1.3 KiB
1.3 KiB
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;fragmentnon-NULL silen > 0. Un fragment delen == 0est 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 == 0n'écrit rien et renvoie 0.
Constantes : PUZZLE_MAX_ID = 8, PUZZLE_MAX_FRAG = 4.
Tests hôte
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.