I will second the recommendation. As someone who's wasted too many hours on minesweeper, it radically changes the game. Because I know there's a logical solution, I'm able to find patterns that I never found in the original, because I'd often assume it was just one of those guesswork situations. It's similar to how chess puzzles are easier than an equivalent position during a game. Because you know there's a neat solution, you're more willing to put in the legwork of searching for it. Learned a lot about the game simply by playing Simon's version.
For the vanilla game the guesses become integral part of the game that you can strategize around. There are guesses where some squares are less likely to contain mines than others. You can also try to uncover guesses as early as possible in a game, so you don't waste too much time on a game that is doomed to fail.
it's also available on windows and android - very good.
https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/mine...
However, the minesweeper puzzle is the one that causes a big wart in the API, which part of me has wanted to refactor for years. (it's for the reason given in GP comment, the puzzle isn't generated until first click; it's the only one with this behavior and could be reworked to have the clicked area be a parameter to creation, but then it would have a slightly quirky main()-equivalent function.. IMO worth it for the cleaner API)
Simon's puzzles have overall been an inspiration, some good reading if you're into algorithms and applied graph theory and don't mind that it's in C.