# puzzle_state

Agrégation côté master des énigmes résolues. Chaque énigme reporte un fragment
de code ; `puzzle_state` assemble le **code final** en concaténant les fragments
de toutes les énigmes résolues, **par id croissant**.

Logique pure, sans I/O — testée sur hôte.

## API (`puzzle_state.h`)

- **`puzzle_state_init(s)`** — remet l'état à zéro.
- **`puzzle_state_report(s, id, fragment, len)`** — enregistre une énigme
  résolue. **Idempotent par id** : reporter deux fois le même id ne duplique pas
  ses chiffres. `len <= PUZZLE_MAX_FRAG` ; `fragment` non-NULL si `len > 0`. Un
  fragment de `len == 0` est valide (énigme marquée résolue, aucun chiffre).
- **`puzzle_state_code(s, out, cap)`** — écrit le code assemblé (chiffres de
  toutes les énigmes résolues, id croissant) en chaîne NUL-terminée ; renvoie le
  nombre de chiffres écrits. Chaque octet de fragment est pris **modulo 10** pour
  donner un chiffre décimal. `cap == 0` n'écrit rien et renvoie 0.

Constantes : `PUZZLE_MAX_ID` = 8, `PUZZLE_MAX_FRAG` = 4.

## Tests hôte

```bash
make -C idf_zacus/components/puzzle_state/test/host test
```

2 tests : assemblage du code à partir des fragments reportés, et idempotence
(une énigme reportée deux fois ne duplique pas ses chiffres). Nécessite Unity.
