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.
* 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.
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.
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.
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?
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.
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.
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].
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 :)
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!
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.
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 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.
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.
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.
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.
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).
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’.
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.
There are multiple puzzle sites, connected with common user accounts to keep track of scores. Random puzzles with varying difficulty, and daily challenges.
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.
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.
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...