# DailyCalcudoku — technické poznámky

## Přehled skriptů

| Skript | Popis |
|--------|-------|
| `preskumaj_calcudoku.py` | Průzkumný — vytáhne `gameLevels` z JS kontextu stránky |
| `stahni_calcudoku.py` | Stáhne data z webu a uloží do MySQL (celý rok najednou) |
| `vykresli_calcudoku.py` | Generuje PDF z dat v MySQL (reportlab, vektorové) |

## Zdroj dat

Stránka: https://www.solitaire.org/daily-calcudoku/

Stejná architektura jako Kakuro/Str8ts — `game.php` načte `gameLevels` s daty pro celý rok (366 dní × 4 velikosti). Klíče `"MM-DD"`, bez roku. Data se nemění přes rok — stačí jednorázové stažení v lednu.

## Obtížnosti (velikosti mřížek)

| Klíč | Rozměr | Číslice |
|------|--------|---------|
| 4x4 | 4×4 | 1–4 |
| 5x5 | 5×5 | 1–5 |
| 6x6 | 6×6 | 1–6 |
| 8x8 | 8×8 | 1–8 |

## Datová struktura `gameLevels`

Každý záznam je pole dvou stringů: `[cages, solution]`

### Cages (definice klecí)

Klece oddělené `|`, každá ve formátu `target,operator,cells`:
```
3,*,a1b1|8,+,a2b2a3|2,/,c4d4
```
- `target` = cílová hodnota
- `operator` = `+`, `-`, `*`, `/`
- `cells` = seznam buněk (sloupec=písmeno a–h, řádek=číslo 1–8)

### Solution (řešení)

Flat string číslic, řádek po řádku:
```
1342213442133421  (4×4 = 16 znaků)
```

## MySQL tabulka `puzzle.puzzles`

Sdílená tabulka s ostatními puzzle. Pro Calcudoku:
- `game_type` = `'calcudoku'`
- `difficulty` = `'4x4'` / `'5x5'` / `'6x6'` / `'8x8'`
- `puzzle` = cage definice (cages string)
- `solution` = flat string řešení
- `extra` = `{"grid_size": 4}` / `5` / `6` / `8`
- `source` = `'solitaire.org'`

Stav: celý rok 2026 naplněn (1460 řádků = 365 dní × 4 velikosti).
