These are wonderful logic puzzles and particularly good implementations of them. For instance, their Minesweeper guarantees that it is solvable - you will never have a 50/50 choice you cannot identify.
> For instance, their Minesweeper guarantees that it is solvable - you will never have a 50/50 choice you cannot identify.
Alas, I've backed myself into a corner a couple of times and triggered "just gotta guess" choices in it - while it's generally good at this, it's not a 100% implementation based on my playing.
I find "Net" way more fun though for quick casual gaming, a 7x11 grid (depends on exact screen size) with wraparound enabled is a favorite for easy to tap but enough squares to make it take some time to solve (about 5 minutes per game, give or take).
Sure it's not something you're overlooking? Haven't encountered it myself.
Sometimes in constraint puzzles, one clue is also that there is a unique solution. So if doing one choice implies that some other choice can be arbitrary, that's not the solution.
> backed myself into a corner a couple of times and triggered "just gotta guess" choices
At least for me sometimes a situation that looked like "just gotta guess" was actually solvable by knowing the total number of remaining mines, as one choice in the "guess" would imply more mines than the other.
Isn't it known how many mines are on the board, so that is not actually a problem since you could count that all of the exposed/marked mines == total # of mines?
> Alas, I've backed myself into a corner a couple of times and triggered "just gotta guess" choices in it - while it's generally good at this, it's not a 100% implementation based on my playing.
This should not happen because the current implementation [1] always tries to solve a randomly generated puzzle deductively, and never generates a puzzle that hasn't passed the check. (There are some shortcuts, including dynamically "perturbing" the current puzzle to make it uniquely solvable.) "Solvable" puzzles do not guarantee no backtracking though, so that's probably where you gave up. Also note that you should take account for the number of remaining mines, which can frequently be the sole information left for the very last mines.
I think you may have overlooked a logical solve. I dug into the code for his Minesweeper at one point and IIRC it works by generating random boards and putting them through a deterministic backtracking solver that gives up when faced with one of these choices. I think it then has a way of changing the board to be solvable. Or it just generates a new one, I don't remember.
I've also played it quite a bit and can't remember having any undecidable boards.
This port is awesome, I remember getting it on the very first android phone (HTC G1/Dream with the little trackball, and I remember the gain actually supported that very well, as well as left/right click with the two button. I've had this game on every phone ever since, for the past decade. It's the one constant on my phones.
If you like these puzzles, consider giving Nikoli some money, as they are a relatively small Japanese puzzle magazine and invented many of them. I find their handmade puzzles a lot more fun than the autogenerated ones this program makes.
I'm also a fan of Nikoli-style puzzles. (My favorite is Nurikabe.) Nikoli themselves used to offer an iPhone app with lots of good ones, but it's sadly unavailable now.
Printing is no longer necessary!
GMPuzzles have been providing Penpa+ (a Javascript puzzle tool) links for all new puzzles for a while now and are in the process of backporting all their backlog puzzles for digital solving, too. It's really awesome :)
Which is not in Simon Tatham's Portable Puzzle Collection. Guess I will have to code it one day. Edit: or just use web implementations - there are many...
I've been a fan of Nikoli puzzles since discovering them through the US Puzzle Championship exam years ago. I always wanted more practice but had a hard time finding paper puzzle books to work with. Especially if I didn't want a book with Sudoku. Anyhow, just a few months ago, I discovered two puzzles books at Barnes and Noble!
I enjoy this collection, they all have a similar and consistent UI. I enjoy their Nonograms, Star Battle, Tents, Hashi and I've just tried their new Mosaic puzzle, seems fun enough.
Note that you can encode hand made (or other externally generated) puzzles in a format that Simon Tanthams app accepts, and share them.
I'm not aware of anyone actually doing this for most puzzles, but the crossword world often lets you download puzzles in a generic format to play in different apps, and the apps often have ways of regularly downloading new puzzles from the web.
I believe there's also apps that can prefill a soduko grid from a photograph of a grid, so maybe a translator could be built to pass those to the Puzzles app in the appropriate format.
I really enjoy these. A screen-sized "slant" puzzle, or a "net" puzzle, can be quite relaxing. And it's fun to work out higher-level logical rules for making several related moves at once.
Instead of Pattern in the collection, play a variant of picross/nonogram with hand made levels, much more satisfying. Picross3d is similar but 3d, really good.
Sherlock and Honeycomb, two variants of hint games where you deduce what is where. Like "x is to the left of y".
Willa's Walk. Create a loop through rooms, but can never walk straight. All three can be found here for desktop and mobile https://www.kaser.com/mobile.html (they look funky but play well)
I guess Ohh1 is the same as Unruly. But 0hn0 is not the exact same as Range in the collection. Range includes the extra rules that the blockers cannot touch, and the remaining must be continuous.
Frankly, once you have some practice, most of these games come down to a few rules that you apply mechanistically. However, I couldn't figure out ‘Cube’, and never in my life had luck with ‘Pegs’.
I'll 2nd the code quality. I dug into the Mines code a while back as I wanted to use its puzzle generation algorithm to throw together a text-based version of the game. This turned out to be very easy to do.
Regarding Tents the puzzle itself, I know it under a different (arguably much better) formulation, as Heating The Houses.
The story goes that to heat each of the given houses you need to build exactly one gas tank for it. Tank can only heat one house. Tank square and house square need to share a side (and you draw a "pipe" connecting them). Tanks cannot touch other tanks, even diagonally.
And to be honest, the implementation lacks any way to "annotate" the situation in any way. This restricts the player to relatively small and unsatisfying puzzles. I do these on paper only, and I routinely do 35x25 problems, which I could have no hope to keep in my head - the chains of reasoning can span a hundred or more houses. They are published in booklets called "Logi-Mix" (a Polish publication per se, but digestible even if you don't know the language).
* There is an own creation algorithm for each game, sometimes including parameters like difficulty
* For every game there must be only one possible solution. This means that you never have to guess. Otherwise, it's a bug. For Mines (Minesweeper clone), this is an outstanding feature.
* The solution for almost every game is implemented with a respective solving algorithm. You can learn a lot from the source code.
* Each generated game comes along with a seed which you can share with others, or for a bug report.
* The project cross-compiles out of the box for many platforms, including Android, Windows and Web. And the resulting Windows binaries are tiny, because it does not use a bloated GUI framework.
* It provides a well-thought framework in case you want to add another game.
* Icons of the game are created on-the-fly during the building process
I've played Simon Tatham's Puzzle Collection on so many devices. I even included it in a keychain Debian variant: https://www.neilvandyke.org/lildeb/
A large "Net", with wrapping, is probably my most often go-to game on smartphone, when waiting somewhere, for transit or an appointment. Sometimes I think about the rules and heuristics I'm using, and how they might be generalized, or more might be learned. Other times, I'm just enjoying how they let me make progress.
Net is actually the one game I prefer to play on a computer, as I find the keyboard controls particularly useful for it. I think Signpost or Magnets are my favourite to play on mobile.
There's something really awesome about learning a new game, it's ruleset, then techniques and tricks. Like once you play a game for a long time, you go into automatic mode and you're not really learning anything anymore, like most people who play normal sudoku or minesweeper. I much prefer the learning phase than the doing phase of a puzzle, which is why I love this. I also love The Witness but that's getting offtopic.
> Puzzle implementations written in this framework are self-testing as far as I could make them
> Textual game and move descriptions, for example, are generated and parsed as part of the normal process of play. Therefore, if you can make moves in the game at all you can be reasonably confident that the mid-end serialisation interface will function correctly and you will be able to save your game. (By contrast, if I'd stuck with a single make_move() function performing the jobs of both interpret_move() and execute_move(), and had separate functions to encode and decode a game state in string form, then those functions would not be used during normal play; so they could have been completely broken, and you'd never know it until you tried to save the game – which would have meant you'd have to test game saving extensively and make sure to test every possible type of game state. As an added bonus, doing it the way I did leads to smaller save files.)
Is there a general name for code like this that deliberately makes use of functions it doesn't necessarily need to so that bugs are noticed early? I haven't heard it called self-testing but I don't have a name of it. I've done this before when features/functions are added that I know are rarely going to get called and I want an early warning if they break later by making sure they're called during regular usage.
There are multiple puzzle sites, connected with common user accounts to keep track of scores. Random puzzles with varying difficulty, and daily challenges.
There is a port[0] of these puzzles to the reMarkable tablet which IMO is the perfect medium in which to view and solve them. I recently worked through variations of the pipes game with a friend and it was a solid experience[1].
I get antsy/fidgety while listening to podcasts (even interesting ones!), so I like to solve 5x5 Signpost while I listen. It's difficult enough to keep my fingers occupied, but simple enough to not distract me from the content of the podcast.
If anyone wants to crank the difficulty up to 11, I suggest the puzzle types "Towers" and "Unequal" at max size/difficulty. These puzzles can get hard much faster than they have any right to - I play them whenever I feel worried that perhaps P = NP.
71 comments
[ 2.6 ms ] story [ 142 ms ] threadThese are wonderful logic puzzles and particularly good implementations of them. For instance, their Minesweeper guarantees that it is solvable - you will never have a 50/50 choice you cannot identify.
https://f-droid.org/de/packages/name.boyle.chris.sgtpuzzles/
Alas, I've backed myself into a corner a couple of times and triggered "just gotta guess" choices in it - while it's generally good at this, it's not a 100% implementation based on my playing.
I find "Net" way more fun though for quick casual gaming, a 7x11 grid (depends on exact screen size) with wraparound enabled is a favorite for easy to tap but enough squares to make it take some time to solve (about 5 minutes per game, give or take).
Sometimes in constraint puzzles, one clue is also that there is a unique solution. So if doing one choice implies that some other choice can be arbitrary, that's not the solution.
At least for me sometimes a situation that looked like "just gotta guess" was actually solvable by knowing the total number of remaining mines, as one choice in the "guess" would imply more mines than the other.
This should not happen because the current implementation [1] always tries to solve a randomly generated puzzle deductively, and never generates a puzzle that hasn't passed the check. (There are some shortcuts, including dynamically "perturbing" the current puzzle to make it uniquely solvable.) "Solvable" puzzles do not guarantee no backtracking though, so that's probably where you gave up. Also note that you should take account for the number of remaining mines, which can frequently be the sole information left for the very last mines.
[1] https://git.tartarus.org/?p=simon/puzzles.git;a=blob;f=mines...
I've also played it quite a bit and can't remember having any undecidable boards.
https://www.nikoli.co.jp/en/puzzles/
https://nikolibookshop.stores.jp/
I recommend 'The Pencil Puzzle 2022' (and other years) which has puzzles from their entire range. English instructions are included.
My absolute favourite is Slitherlink. I've never been more addicted to a puzzle game than the DS version: https://www.eurogamer.net/puzzle-series-vol-5-slitherlink-re...
https://puzz.link/db/ is a great source of community-made puzzles in this style that are playable in a browser. Also worth a look is https://www.gmpuzzles.com/blog/ if printing and playing on paper is okay.
I agree with you that human-made puzzles are much more interesting. The generated ones become boring quickly.
Printing is no longer necessary! GMPuzzles have been providing Penpa+ (a Javascript puzzle tool) links for all new puzzles for a while now and are in the process of backporting all their backlog puzzles for digital solving, too. It's really awesome :)
One of the best mobile puzzle games ever
https://play.google.com/store/apps/details?id=com.ejelta.sli...
Which is not in Simon Tatham's Portable Puzzle Collection. Guess I will have to code it one day. Edit: or just use web implementations - there are many...
https://www.barnesandnoble.com/w/iq-puzzles-1-nikoli/1131029... https://www.barnesandnoble.com/w/iq-puzzles-2-nikoli/1131029...
I enjoy this collection, they all have a similar and consistent UI. I enjoy their Nonograms, Star Battle, Tents, Hashi and I've just tried their new Mosaic puzzle, seems fun enough.
I'm not aware of anyone actually doing this for most puzzles, but the crossword world often lets you download puzzles in a generic format to play in different apps, and the apps often have ways of regularly downloading new puzzles from the web.
I believe there's also apps that can prefill a soduko grid from a photograph of a grid, so maybe a translator could be built to pass those to the Puzzles app in the appropriate format.
Some other similar games I recommend. Feel free to expand, I'm always looking for more!
Slitherlink, same as Loopy, but I prefer the generated puzzles here https://play.google.com/store/apps/details?id=com.ejelta.sli...
Instead of Pattern in the collection, play a variant of picross/nonogram with hand made levels, much more satisfying. Picross3d is similar but 3d, really good.
Sherlock and Honeycomb, two variants of hint games where you deduce what is where. Like "x is to the left of y".
Willa's Walk. Create a loop through rooms, but can never walk straight. All three can be found here for desktop and mobile https://www.kaser.com/mobile.html (they look funky but play well)
Hexcells, a bit like minesweeper but multiple different kind of clues. On Steam, but also a mobile variant called Sixcells. https://store.steampowered.com/app/265890/Hexcells/
https://0hh1.com/ fill a grid with yellow and blue, but never three in a row.
As for a non-constraint type of game, Snakebird is really clever, and really hard. https://play.google.com/store/apps/details?id=com.NoumenonGa...
[1] https://store.steampowered.com/app/709920/Tametsi/
https://apps.apple.com/nl/app/robozzle/id350729261
Although I have it installed on my Android phone, it can no longer be found on the Play Store?!
The authors of that also did https://0hn0.com/ (Oh no!, to go along with Oh hi!), which is also fun.
I used to play Flood a lot so I ended up creating my own version of it with daily challenges: https://fastflood.dylancastillo.co
And I think the code is a masterclass of how to write C. Take a look at the source for the tents puzzle, it’s amazing. https://git.tartarus.org/?p=simon/puzzles.git;a=blob;f=tents...
The story goes that to heat each of the given houses you need to build exactly one gas tank for it. Tank can only heat one house. Tank square and house square need to share a side (and you draw a "pipe" connecting them). Tanks cannot touch other tanks, even diagonally.
And to be honest, the implementation lacks any way to "annotate" the situation in any way. This restricts the player to relatively small and unsatisfying puzzles. I do these on paper only, and I routinely do 35x25 problems, which I could have no hope to keep in my head - the chains of reasoning can span a hundred or more houses. They are published in booklets called "Logi-Mix" (a Polish publication per se, but digestible even if you don't know the language).
* There is an own creation algorithm for each game, sometimes including parameters like difficulty
* For every game there must be only one possible solution. This means that you never have to guess. Otherwise, it's a bug. For Mines (Minesweeper clone), this is an outstanding feature.
* The solution for almost every game is implemented with a respective solving algorithm. You can learn a lot from the source code.
* Each generated game comes along with a seed which you can share with others, or for a bug report.
* The project cross-compiles out of the box for many platforms, including Android, Windows and Web. And the resulting Windows binaries are tiny, because it does not use a bloated GUI framework.
* It provides a well-thought framework in case you want to add another game.
* Icons of the game are created on-the-fly during the building process
A large "Net", with wrapping, is probably my most often go-to game on smartphone, when waiting somewhere, for transit or an appointment. Sometimes I think about the rules and heuristics I'm using, and how they might be generalized, or more might be learned. Other times, I'm just enjoying how they let me make progress.
> Textual game and move descriptions, for example, are generated and parsed as part of the normal process of play. Therefore, if you can make moves in the game at all you can be reasonably confident that the mid-end serialisation interface will function correctly and you will be able to save your game. (By contrast, if I'd stuck with a single make_move() function performing the jobs of both interpret_move() and execute_move(), and had separate functions to encode and decode a game state in string form, then those functions would not be used during normal play; so they could have been completely broken, and you'd never know it until you tried to save the game – which would have meant you'd have to test game saving extensively and make sure to test every possible type of game state. As an added bonus, doing it the way I did leads to smaller save files.)
Is there a general name for code like this that deliberately makes use of functions it doesn't necessarily need to so that bugs are noticed early? I haven't heard it called self-testing but I don't have a name of it. I've done this before when features/functions are added that I know are rarely going to get called and I want an early warning if they break later by making sure they're called during regular usage.
Thank you for writing PuTtY, a Windows-based SSH client.
Totally made our day, months, years, and decades!
You rock, Simon!
Now I am going to play your games … for the first time. Thank you for raising awareness here, HN.
There are multiple puzzle sites, connected with common user accounts to keep track of scores. Random puzzles with varying difficulty, and daily challenges.
[0] https://github.com/mrichards42/remarkable_puzzles
[1] https://imgur.com/a/WnDQi93