notebookvb
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
# SudokuKiller — technické poznámky
|
||||
|
||||
## Přehled skriptů
|
||||
|
||||
### Stahování PDF (původní pipeline)
|
||||
|
||||
| Skript | Popis |
|
||||
|--------|-------|
|
||||
| `stahni_killer_sudoku.py` | Stáhne puzzle + solution PDF z dailykillersudoku.com |
|
||||
| `stahni_greater_than.py` | Stáhne Greater-Than variantu, přejmenuje existující |
|
||||
| `import_do_mysql.py` | Importuje PDF soubory do MySQL tabulky `sudoku_killer` (binární bloby) |
|
||||
| `30_BatchCrop.py` | Ořeže PDF (odstraní hlavičky/patičky), uloží zpět do DB |
|
||||
|
||||
### Strukturovaná data (nový pipeline)
|
||||
|
||||
| Skript | Popis |
|
||||
|--------|-------|
|
||||
| `stahni_killer_structured.py` | Stáhne strukturovaná data (cage definice + řešení) z webu do sdílené tabulky `puzzles` |
|
||||
| `preskumaj_killer_data*.py` | Průzkumné skripty pro reverzní inženýrství datového formátu |
|
||||
|
||||
## Zdroj dat
|
||||
|
||||
Web: https://www.dailykillersudoku.com/
|
||||
|
||||
Každý puzzle má stránku `/puzzle/{N}` s inline JSON daty v HTML:
|
||||
```javascript
|
||||
DKS.puzzle = new DKS.Puzzle({
|
||||
"id": 376,
|
||||
"date": "2009-05-04",
|
||||
"difficulty": 4,
|
||||
"board_base64": "AZoACQAE...",
|
||||
"solution_base64": "AJoICQIG...",
|
||||
"puzzle_type": 1
|
||||
})
|
||||
```
|
||||
|
||||
## Dekódování base64
|
||||
|
||||
### board_base64
|
||||
- 2 bajty header (puzzle_type, flags)
|
||||
- 81 × 2 bajty = 162 bajtů — cage ID pro každou buňku (uint16 big-endian)
|
||||
- N bajtů — součet pro každou klec (1 bajt = max 255)
|
||||
|
||||
### solution_base64
|
||||
- 2 bajty header
|
||||
- 81 bajtů — čísla řešení (řádek po řádku)
|
||||
|
||||
## Typy puzzle
|
||||
|
||||
| puzzle_type | game_type v DB | Popis |
|
||||
|-------------|----------------|-------|
|
||||
| 1 | `killer_sudoku` | Killer Sudoku — klece se součty |
|
||||
| 2 | `killer_sudoku_gt` | Greater-Than Killer Sudoku — klece + nerovnosti |
|
||||
|
||||
## Obtížnost
|
||||
|
||||
Škála 1–10 (z webu), uložena v `difficulty`.
|
||||
|
||||
## MySQL — původní tabulka `sudoku_killer`
|
||||
|
||||
Obsahuje binární PDF v `file_puzzle` / `file_solution` / `file_puzzle_cropped`.
|
||||
- 19 106 KillerSudoku (puzzle 1–31414, 2009–2026)
|
||||
- 11 405 GreaterThan (puzzle 1730–31416, 2010–2026)
|
||||
|
||||
## MySQL — sdílená tabulka `puzzles`
|
||||
|
||||
Strukturovaná data (cage definice + řešení):
|
||||
- `game_type` = `'killer_sudoku'` / `'killer_sudoku_gt'`
|
||||
- `difficulty` = `'1'` až `'10'`
|
||||
- `puzzle` = klece ve formátu `sum,r0c1r0c2|sum,r3c4r3c5|...`
|
||||
- `solution` = flat string 81 číslic
|
||||
- `extra` = `{"grid_size": 9, "puzzle_number": 376, "original_difficulty": 4}`
|
||||
- `source` = `'dailykillersudoku.com'`
|
||||
|
||||
## Layout a tisk
|
||||
|
||||
V podadresáři `Testy/` jsou experimentální skripty pro:
|
||||
- Ořezávání PDF (ray-cast detekce mřížky)
|
||||
- Škálování a umístění 2 puzzle na A4
|
||||
- Layout konfigurace (`layouts.json`)
|
||||
|
||||
## Závislosti
|
||||
|
||||
- `requests`, `beautifulsoup4` — HTTP + HTML parsing
|
||||
- `fitz` (PyMuPDF) — PDF manipulace, ray-cast cropping
|
||||
- `pypdf` — PDF čtení/zápis
|
||||
- `playwright` — průzkumné skripty (není potřeba pro produkční stahování)
|
||||
- `tqdm` — progress bar
|
||||
Reference in New Issue
Block a user