Simon Tatham's Portable Puzzle Collection
chiark.greenend.org.uk
chiark.greenend.org.uk
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).
I quickly found that as starting positions go, only certain specific choices for the first open hole would make the game winnable (in the sense that you remove all except one peg). For others there would always be at least two pegs left. I also found that the final relative configuration was to a large degree decided (modulo some relative shift) by your choice of initial configuration.
After gaining intuition I decided to apply some rigor, so I went about things mathematically and found an invariant! That is, I found a way to compute, from any board state, a number between 0 and 15, which would be the same after any legal move. This meant that there were (at least) 16 groups of board states that were inaccessible from each other by legal moves. And of these 16 groups, only 9 were congruent with a board state containing just one peg. In particular, the octagon board (the one I had as a kid, apparently referred to as the French variant) with the center peg missing in the starting position is not solvable!
Once I felt that I was done with investigating the puzzle for myself, I started searching around online and found that my results were (unsurprisingly) far from novel, and were in fact only scratching the surface of what brighter mathematicians had found over the years. But that only made me more happy with my findings, because it confirmed to me that I was right and also that other people were interested in this thing.
I've thought about writing an interactive article presenting the findings I made and intuitions I used. Perhaps I'll post it on here once I'm done with it.
> 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 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
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.
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.
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...
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.
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.
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.
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.
https://gist.github.com/FeepingCreature/3f5f59ca58fd2134ac8e...
I tried to send it in, but Simon never replied to my email. :( Pls merge!
Just as you can leftclick a free n-tile where n mines are marked around it to immediately reveal all other tiles, this patch allows you to rightclick a free n-tile where n tiles are unrevealed (or marked as mines) around it in order to immediately mark all surrounding tiles as mines.
This turns Minesweeper into much less of a precision clicking game.
Also I am hopelessly addicted to ./loopy.
edit:
this already works | this is what the patch adds
left click the 4 | right click the 4
X X X X X X O O O X X X
X 4 O -> X 4 _ O 4 _ -> X 4 _
O O O _ _ _ _ _ _ _ _ _And yes, loopy is a great game.
I used to play Flood a lot so I ended up creating my own version of it with daily challenges: https://fastflood.dylancastillo.co
There are multiple puzzle sites, connected with common user accounts to keep track of scores. Random puzzles with varying difficulty, and daily challenges.