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

2.8 KiB
Raw Blame History

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:

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