Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Simon Tatham's Portable Puzzle Collection (greenend.org.uk)
274 points by WorldPeas on July 20, 2022 | hide | past | favorite | 69 comments


The developer documentation is absolutely top notch: https://www.chiark.greenend.org.uk/~sgtatham/puzzles/devel/

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...


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).


The other day, while collecting my childhood belongings from my mother's house, I found my old peg-solitaire set. The following week I was totally obsessed with it, playing it all the time, sharing it with all my friends, and I ended up discovering some really nifty facts about it.

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.


> 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.


This collection is truly amazing.

* 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


An excellent free Android version is also available: https://play.google.com/store/apps/details?id=name.boyle.chr...

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.


Of course, the app is also available on f-droid.org for people with a libre AOSP phone:

https://f-droid.org/de/packages/name.boyle.chris.sgtpuzzles/


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.


> 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).


> 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.

[1] https://git.tartarus.org/?p=simon/puzzles.git;a=blob;f=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.


> 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.


Once I had a field where the last place to uncover was completely surrounded by mines, revealing the digit 8 underneath.


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?


Sorry, it was meant as an example for that, not as a counterpoint. I did solve the field without guessing, so it wasn't a problem.


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.


I enjoy this collection really much, and play many of them regularly using the Android port. https://play.google.com/store/apps/details?id=name.boyle.chr...

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...


Tametsi [1] is also great if you are bored of static rectangular or hexagonal grids.

[1] https://store.steampowered.com/app/709920/Tametsi/


> https://0hh1.com/ fill a grid with yellow and blue, but never three in a row.

The authors of that also did https://0hn0.com/ (Oh no!, to go along with Oh hi!), which is also fun.


These are both in OP's puzzle collection, or at least in the android app.


Ah, interesting—they're not in the iOS port, although they both have nice & small iOS apps themselves.


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.


Robozzle, while of a rather different nature, is quite wonderful.

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?!


I guess Lightbot might be an Android alternative. https://play.google.com/store/apps/details?id=com.lightbot.l...


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].

[0] https://github.com/mrichards42/remarkable_puzzles

[1] https://imgur.com/a/WnDQi93


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.

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...


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.

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.


>playing on paper

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 :)


Thanks, it's been a while since the last time I played GMPuzzles... clearly I should do it again.


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!

https://www.barnesandnoble.com/w/iq-puzzles-1-nikoli/1131029... https://www.barnesandnoble.com/w/iq-puzzles-2-nikoli/1131029...


> Slitherlink

One of the best mobile puzzle games ever

https://play.google.com/store/apps/details?id=com.ejelta.sli...


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 just checked Nikoli, and now I am getting a definite desire to play Shakashaka ( https://www.nikoli.co.jp/en/puzzles/shakashaka/ ).

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...


There's Slant in the collection, which seems similar... haven't played Shakashaka though, might be mistaking.


Most implementations probably use algorithmically generated puzzles, which are less fun than human-created puzzles.


Here's Slitherlink and a ton of other puzzles playable on the browser: https://www.puzzle-loop.com/

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'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.


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.


Simon Tatham? SIMON TATHAM!

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'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.


Simon is also the programmer of PuTTY, the SSH/telnet client for Windows..


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.


Let me take this opportunity to shill my Minesweeper quick-mark patch against the Portable Puzzle Collection:

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    _ _ _       _ _ _    _ _ _


Well, if you're aiming to optimize for speed, not marking mines in the first place is faster :) The game ends when you uncover all non-mine squares, so only those squares need to be clicked.

And yes, loopy is a great game.


True, true. I've been trying to play loopy without marking any edges, and it's way way harder. I think there's still an advantage to going fast at the sort of low intermediate tier where you're still using markers.


You mean without clearing any edges, right? As in you only left-click edges, not right-click them? I used to do that too. I haven't played in over a decade, but IIRC it was relatively easy to do that on the honeycomb and octagonal types (because most edges need to be left-clicked) and on the triangular type (because it has the fewest edges per tile).


Ah yeah.


These are great puzzles!

I used to play Flood a lot so I ended up creating my own version of it with daily challenges: https://fastflood.dylancastillo.co


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’.


There's a easily memorisable solution to pegs that once learnt makes the whole game devoid of any interest.


These games are good for testing intelligent systems. Many of these games can be solved using optimization strategies or search.


I love this collection. There are also excellent mobile versions with no ads that I love for basic puzzles to kill some time


Oh how I love this collection. I have had it on my phone for many years.. I struggle with vasovagal syncope when I go to anyplace related to medical. Mixing my syncope with cancer/chemo was rough and this puzzle collection helped me in some of the hardest times of my life. I love Tents, Undead, Unequal, and Map.


Many of these puzzles, and others, can be played in the browser at https://www.puzzle-loop.com/.

There are multiple puzzle sites, connected with common user accounts to keep track of scores. Random puzzles with varying difficulty, and daily challenges.


All of them can be played in the browser at OP's link.


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.


Great stuff, but I really wish the author would have the decency to charge money for it


Love it - and also hacked it quite a bit (e.g. extra shapes and controls for Loopy).


I really love seeing the ethos of the old internet shine through with new ideas.


This is incredibly good! And it proves once again that you don't need Electron (not Qt or similar in this case...) to do cross-platform without rewriting the codebase multiple times.


When the internet was smaller, I considered this guy the Best Coder in the World. Good times, playing with Putty and Linux servers.


I've spent so many hours on 'Pattern' and 'Keen'.... both quite recommendable.


I've had this on my phone for ages, great puzzles and no ads.


I played a lot of these games around ~2007. Excellent collection.


Last Call BBS vives :)


I was just thinking that dungeons and diagrams would make a great addition to this collection. Maybe a fun weekend project to implement that.


The first prc I loaded in every Palm PDA I had :-)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: