I have played a little bit with a new-to-me puzzle type. The "board" consists of some number of stacks of colored balls. (Each stack is depicted as a test tube, making it more plausible that you can arrange smooth balls in a stack.) A legal move is to remove the top ball from some stack, and then place it on top of any other stack whose top ball is the same color as the one you're moving. An empty stack is a "wild card" -- you can move any ball to an empty stack. The stacks have a maximum capacity, typically 4 balls. The initial position has some number of full stacks -- typically 3 or more of them -- and two empty stacks. There are 4 balls of each color, so the number of colors matches the number of initial stacks. The object of the game is to rearrange all the balls into stacks of completely matching colors. Moves are not in general reversible (although some implementations offer an "undo" option), so it is definitely possible to get stuck and have to start over. The app never shows you a puzzle that can't be solved. Obvious parameters are the number of colors (C), the number of balls of each color (B), which is usually the same as the maximum stack height (H), and the number of empty stacks at the outset (E). One question is, for given values of C, B, and H, what is the smallest E that guarantees that any initial position can be solved? What is a good algorithm for generating puzzles? Some of the puzzles are very hard and require a lot of lookahead (or false starts). Many implementations I have found either cost money, or have extremely annoying advertising, or offer only a tiny selection of teaser puzzles. But https://www.crazygames.com/game/bubble-sorting looks like a good place to try it out.