# Full Puzzle Kind Status: **Draft** A proposed inheritance tree for libipuz. Some open questions: * Q. Should **ACROSTIC** and **FILL_IN** inherit from crossword? They separate in the spec and are generally quite different puzzle types. However, the boards they have are basically identical, so as a practical matter making them crosswords could be useful. An argument for making them separate is the invariants enforced by the `fix_()` style functions are totally different. None of the ones in `IPuzCrossword` will apply to `IPuzCryptic`, while eg. the ones in `IPuzArrowword` and `IPuzBarred` apply in spirit (if not code). * Q. Which of these can share the same `IPuzCell` type? Should that class grow to be the union of all the values, or do we want to investigate different types? As an example, do we store numbers for sudokus, or just use a string? | Class | Puzzle Kind | Kind URI | Implemented | Notes | |------------------------------|-------------------------|--------------------------------------------|-------------|------------------------------| | `IPuzPuzzle` | *None* | *None* | [X] | Base class for all puzzles | | ┣ `IPuzAnswer` | **ANSWER** | http://ipuz.org/answer | | | | ┃  ┣ `IPuzRiddle` | **RIDDLE** | http://ipuz.org/answer/riddle | | | | ┃  ┣ `IPuzChoice` | **CHOICE** | http://ipuz.org/answer/choice | | | | ┃  ┗ `IPuzFlat` | **FLAT** | http://ipuz.org/answer/flat | | | | ┣ `IPuzBlock` | **BLOCK** | http://ipuz.org/block | | | | ┃  ┣ `IPuzSlidingBlock` | **SLIDING_BLOCK** | http://ipuz.org/block/slidingblock | | | | ┃  ┗ `IPuzMaze` | **MAZE** | http://ipuz.org/block/maze | | | | ┣ `IPuzCrossword` | **CROSSWORD** | http://ipuz.org/crossword | [X] | | | ┃  ┣ `IPuzArrowword` | **ARROWWORD** | http://ipuz.org/crossword/arrowword | [X] | | | ┃  ┣ `IPuzAcrostic` | **ACROSTIC** | http://ipuz.org/acrostic | [X] | Currently subtypes Crossword | | ┃  ┣ `IPuzBarred` | **BARRED** | https://libipuz.org/barred | [X] | libipuz extension | | ┃  ┣ `IPuzCryptic` | **CRYPTIC** | http://ipuz.org/crossword/crypticcrossword | [X] | | | ┃  ┣ `IPuzDiagramless` | **DIAGRAMLESS** | http://ipuz.org/crossword/diagramless | | | | ┃  ┣ `IPuzFilippine` | **FILIPPINE** | https://libipuz.org/filippine | [X] | libipuz extension | | ┃  ┗ `IPuzFillIn` | **FILL_IN** | http://ipuz.org/fill | | | | ┃  ┗ `IPuzFreeForm` | **FREE_FORM** | https://libipuz.org/freeform | | libipuz extension | | ┣ `IPuzSudoku` | **SUDOKU** | http://ipuz.org/sudoku | | | | ┃  ┣ `IPuzCalcudoku` | **CALCUDOKU** | http://ipuz.org/sudoku/calcudoku | | | | ┃  ┣ `IPuzDiagonalSudoku` | **DIAGONAL_SUDOKU** | http://ipuz.org/sudoku/diagonalsudoku | | | | ┃  ┣ `IPuzHyperSudoku` | **HYPER_SUDOKU** | http://ipuz.org/sudoku/hypersudoku | | | | ┃  ┣ `IPuzJigsawSudoku` | **JIGSAW_SUDOKU** | http://ipuz.org/sudoku/jigsawsudoku | | | | ┃  ┣ `IPuzGreaterThanSudoku` | **GREATER_THAN_SUDOKU** | http://ipuz.org/greaterthansudoku | | URI is missing sudoku/ | | ┃  ┣ `IPuzKillerSudoku` | **KILLER_SUDOKU** | http://ipuz.org/sudoku/killersudoku | | | | ┃  ┣ `IPuzLatinSquare` | **LATIN_SQUARE** | http://ipuz.org/sudoku/latinsquare | | | | ┃  ┗ `IPuzWordoku` | **WORDOKU** | http://ipuz.org/sudoku/wordoku | | | | ┗ `IPuzWordSearch` | **WORD_SEARCH** | http://ipuz.org/wordsearch | | | | ┣ `IPuzAnagrid` | **ANAGRID** | http://ipuz.org/wordsearch/anagrid | | | | ┗ `IPuzTraceOut` | **TRACE_OUT** | http://ipuz.org/wordsearch/traceout | | |