Files
ordinaceprojekt/SběrDatRůzné/SudokuKiller/NOTES.md
T
Vladimir Buzalka c4c0d1d435 notebookvb
2026-05-08 22:06:57 +02:00

89 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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