notebookvb

This commit is contained in:
Vladimir Buzalka
2026-05-08 22:06:57 +02:00
parent c9903646f1
commit c4c0d1d435
14 changed files with 1666 additions and 0 deletions
+88
View File
@@ -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 110 (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 131414, 20092026)
- 11 405 GreaterThan (puzzle 173031416, 20102026)
## MySQL — sdílená tabulka `puzzles`
Strukturovaná data (cage definice + řešení):
- `game_type` = `'killer_sudoku'` / `'killer_sudoku_gt'`
- `difficulty` = `'1'``'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