Le Puzzle de l'Avent 2025
Posté le 02/12/2025 03:33
Décembre est de retour, et du même coup le Puzzle de l'Avent de Planète Casio ! La neige n'est peut-être pas au rendez-vous mais les activités de saison n'attendent pas.
On en est à pas moins de la
6ème édition (
2018,
2019,
2021,
2023,
2024) et la formule est proche de ce qu'on a fait ces dernières années.
Principe et lots
Le but du jeu est de
reconstituer un puzzle en pixel art (en l'occurrence de 192x112 pixels) en résolvant des problèmes d'informatique posés durant le moins de Décembre. Cette année j'ai retenu ma leçon que poser un problème pas trivial tous les jours c'est beaucoup (pour vous comme pour moi), donc on va la jouer cool avec en gros des problèmes 1 jour sur 2.
Il y aura
3 lots à remporter gracieusement sponsorisés par
Calcuso !
- Une calculatrice Graph Math+ (normalement gravée laser avec un message personnalisé--je vous confirme ça) ;
- Deux housses pour calculatrices (ou, selon les goûts, une coque d'édition limitée pour Graph Light/Math+ offerte par Casio Éducation).

Fonctionnement des problèmes et attribution des lots
Je change un poil la formule cette année pour élargir le type de problèmes !
- Chaque problème sera posé sous la forme d'un "énoncé" que vous devrez résoudre. Généralement du code Python sera fourni, à utiliser sur votre calculatrice ou ordinateur, et parfois vous devrez écrire du code Python pour trouver une réponse.
- Une solution sera soit un nombre soit une chaîne de caractères. Contrairement aux années précédentes, il pourra y avoir plusieurs solutions, auquel cas vous devrez en trouver une « suffisamment bonne ».
- Une page sur le site sera à votre disposition pour soumettre vos réponses en échange des pièces du puzzle du jour.
- Page de soumission des réponses en échange des pièces : https://events.planet-casio.com/avent2025
- Réassemblez le puzzle dans un outil d'édition d'images (comme GIMP ou Photoshop) pour remporter des lots et le titre de Maître du Puzzle !
Le dernier problème sera posté le 24 Décembre. Comme d'habitude, les premières personnes qui m'enverront par MP le puzzle résolu avec leurs solutions/scripts remporteront les lots. Je préciserai quand on approchera de la fin
Avant que j'oublie, pour que ça tourne un peu les membres qui ont déjà gagné une Math+ en 2025 ne pourront prétendre qu'aux deux lots de housses/coques. Si vous n'avez jamais joué, c'est le meilleur moment pour vous lancer !
Le titre de
Maître du Puzzle pourra être collecté au moins jusqu'à début Janvier, et ceux qui auront trouvé des solutions meilleures que ce qui était attendu dans les problèmes auront bien sûr la classe éternelle. :3
Les premiers jours
Une fois n'est pas coutume, mon planning cette année est ridicule (récemment j'ai
fait des trucs et changé de job). Du coup j'ai un peu de retard sur le code et j'ai pas tout à fait fini le puzzle. Je mettrai en ligne la page permettant de récupérer les pièces d'ici quelques jours, donc gardez bien vos solutions au chaud. En échange de ce désagrément, je ferai une animation pour montrer la progression du dessin du puzzle
Allez, à vos neurones !
Liste des puzzles
Citer : Posté le 08/12/2025 21:47 | #
2?c -> ??c -> 23c -> six c ?
Ah mais y'a des priorités justement.
L'émulateur commence à la position #0, voit le 2 dans 2?c, et il se prépare donc à évaluer l'atome suivant deux fois, atome qui commence à la position #1.
Donc première itération, l'atome à la position #1 il commence par ?, que l'on remplace par le première caractère d'entrée 2, ce qui déclenche la double évaluation de l'atome à la position #2. Le première évaluation imbriquée trouve le caractère c à la position #2 donc l'affiche ; la deuxième fait pareil. On affiche donc 2 "c".
Maintenant seconde itération, l'atome à la position #1 n'a pas changé et commence toujours par ?, que l'on remplace par le prochain caractère d'entrée, cette fois 3. Cela déclenche une triple évaluation de l'atome à la position #2, et chacune de ces évaluations affiche le caractère "c".
Du coup, 5 "c".
Citer : Posté le 08/12/2025 21:48 | #
Oui, c'était en réaction à "avec les outils à jour", pas pour la 1ere épreuve.
C'est pas une question des outils à jour ou pas, c'est que la présence du limiteur ou pas est imposée par l'énoncé.
Citer : Posté le 09/12/2025 01:43 | #
⚠️ La page pour soumettre les réponses et obtenir les pièces est en ligne ! ⚠️
» https://events.planet-casio.com/avent2025 «
Je mets le lien partout demain. Je douille mais je vais y arriver
J'espère que ce puzzle vous plaît en tous cas !
Citer : Posté le 10/12/2025 00:07 | #
Un million de variations
Jusqu'à présent on a surtout vu comment utiliser le générateur de séquences pour produire des sorties régulières. Mais c'est pas très drôle si tout est régulier ! Des fois il faut savoir faire dans l'imprévisible, le surprenant, l'aléatoire.
Le but de ce problème est de générer le plus grand nombre possible de motifs de 7 lettres différents à la suite. Vous devez produire une séquence utilisant les lettres abcdefg, par exemple :
La séquence sera coupée en paquets de 7 :
gfedcba
abcdefg
...
Et le but est de produire le plus possible de paquets différents avant d'en répéter un. Ici le 3ème paquet est une répétition du 1er, donc la formule a produit seulement 2 paquets distincts avant de se répéter.
Il y a 7⁷ soit pas loin de un million de combinaisons de longueur 7 qu'on peut former. À votre avis, à quel point peut-on forcer une formuler à varier sans en faire exploser la longueur ?
Problème : Trouver une formule de longueur ≤ 22 produisant une séquence formée des lettres abcdefg dont au moins les 30 premiers paquets de 7 sont tous différents.
Pour être transparent, c'est le problème que j'ai le moins exploré jusqu'à présent, donc j'ai pris des marges. Ma solution de référence a une longueur de 18 et produit 48 paquets distincts. Il doit y avoir moyen de faire mieux.
Soumettre une solution et obtenir les pièces : https://events.planet-casio.com/avent2025
Citer : Posté le 10/12/2025 18:32 | #
N'hésitez pas à me dire où vous en êtes, si y'a des problèmes que personne ne trouve ou autre pour que je puisse voir ce qui se passe. ^^"
Citer : Posté le 10/12/2025 21:19 | #
Hello ! J'ai résolu très facilement "un monde de séquence", mais j'ai du mal avec "théorème de factorisation". Mais bon, je n'ai pas encore assez cherché pour m'avouer vaincu.
Merci beaucoup Lephe' pour le puzzle !
Citer : Posté le 11/12/2025 20:55 | #
Toupie dans un labyrinthe
Que serait un Puzzle de l'Avent sans un petit labyrinthe ?
En partant du "x", le but est de générer (par une formule) une séquence permettant de sortir du labyrinthe. La séquence sera composée des lettres "h" (haut/up), "b" (bas/bottom), "g" (gauche/left), et "d" (droite/right).
Les chemins les plus courts pour sortir du labyrinthe prennent 10 étapes. Pouvez-vous, sans utiliser de chiffres, trouver une formule de 8 caractères ou moins qui génère une séquence gagnante de déplacements ?
Je vous préviens, le chemin que la formule va générer ne sera pas des plus courts...
Problème : Trouver une formule de longueur ≤ 8 sans chiffres qui génère une série de déplacements (h, b, g, d) menant du "x" à la sortie du labyrinthe.
Le programme Dec11.py est fourni avec de quoi exécuter le labyrinthe. Appelez la fonction run_labyrinth() avec votre formule. La fonction affichera votre position à chaque étape (en partant du coin haut gauche, x vers la droite, y vers le bas) ainsi que le prochain déplacement à effectuer.
x=2, y=6, next: h
x=2, y=5, next: h
x=2, y=5, next: h
x=2, y=5, next: g
Fin : x=1, y=5
Dans l'exemple, la formule est hhhg donc on monte d'un case, on reste bloqué sur un mur pendant deux tours et ensuite on se déplace vers la gauche, ce qui nous amène en (1, 5).
Bon courage. Rappelez-vous de ne pas fermer les parenthèses quand ce n'est pas nécessaire !
Soumettre une solution et obtenir les pièces : https://events.planet-casio.com/avent2025
Citer : Posté le 11/12/2025 21:01 | #
Hello ! J'ai résolu très facilement "un monde de séquence", mais j'ai du mal avec "théorème de factorisation". Mais bon, je n'ai pas encore assez cherché pour m'avouer vaincu.
Merci beaucoup Lephe' pour le puzzle !
Merci pour ce retour ! J'en ai eu un autre dans le chat. Manifestement il est dur celui-là !
Voici un indice donc. Vous voulez répéter des a et des b, mais les groupes ne sont pas formé d'un seul blocs. On voit :
Et donc on pense à 3a 5b 7a 3b etc, avec en vue une formule du type 3573;*(?a?b).
Évidemment, ça marche pas, il faut chercher d'autres façons de faire le découpage. Par exemple, ça pourrait être 3a 5b 3a 4a 3b etc. Mais ça, on peut pas l'obtenir avec *(?a?b), il faut insérer des ?a en plus.
Si on regarde bien, toutes les sections les plus longues sont à base de a. Essayez une formule du genre *(?a?b?a) avec une entrée bien choisie.
Citer : Posté le 11/12/2025 21:07 | #
Quest-ce que ça veux dire avec formule?
Citer : Posté le 11/12/2025 21:09 | #
Je n'ai pas compris la question ?
Citer : Posté le 11/12/2025 21:10 | #
Tu as dis avec un formule... ça veux dire quoi?
Citer : Posté le 11/12/2025 21:11 | #
Ah il faut que tu commences au début, tous les problèmes de l'événement tournent autour d'un système où tu écris une formule et ça génère une séquence de lettres. Tu as toutes les explications dans les énoncés des premiers problèmes
Citer : Posté le 13/12/2025 23:10 | #
Court-circuit
Je continue dans la lancée de Théorème de factorisation, pour lequel l'indice vous aura débloqué j'espère. Mais cette fois, il y a une astuce.
On peut faire beaucoup de choses avec "?" dans une formule, mais une chose qu'on ne peut pas faire c'est répéter un caractère d'entrée avec "2?" (parce que ça évalue le "?" deux fois et lit un caractère d'entrée différent à chaque fois).
Problème : Trouver une formule de longueur ≤ 16 dont les 24 premiers caractères produits sont la séquence
Les espaces sont là pour la lisibilité (et pour vous tendre un piège).
La solution prévue nécessite une technique nouvelle, pas encore utilisé dans les problèmes précédents.
Soumettre une solution et obtenir les pièces : https://events.planet-casio.com/avent2025
Citer : Posté le 15/12/2025 17:01 | #
Hello ! Petite question : à la fin du puzzle envoyer seulement l'image reconstituée suffira ou il faut également conserver la liste des solutions ?
Citer : Posté le 15/12/2025 18:17 | #
Il faudra la liste des solutions ! Gardez-les bien sous le coude !
Citer : Posté le 15/12/2025 23:29 | # |
Fichier joint
Aux limites de la légalité
Le mini-langage du générateur de séquences est très permissif. On peut mettre quasiment n'importe quoi dans les formules. De fait, les seules choses vraiment interdites sont de finir avec un chiffre ou une étoile sans rien derrière.
<error: string index out of range>
Ça, et écrire une formule qui dépasse le temps de calcul autorisé (timeout) défini par l'appel.
Mais du coup, si on fixe une chaîne d'entrée, par exemple "a3b2c;" et qu'on tente de mettre n'importe quoi dans la formule, qu'est-ce qu'il se passe ?
aabbbbbbca
Fiouh, il se passe... des choses. Pour ce problème on va se limiter à 10 caractères affichés (outsize=10) et 100 étapes de calcul (timeout=100) au lieu des 1000 habituelles.
Bon donc cette formule en fait est assez cocasse parce que des fois le ? est une lettre (genre a) donc il affiche la lettre, des fois c'est un chiffre (genre 3) du coup il va lire plus loin et afficher 3 fois l'atome suivant, en l'occurrence en "b".
Si on regarde droit dans les yeux ce qui est autorisé ou pas on peut calculer que de l'ordre de 93% des formules possibles sont légales. La majorité fait des trucs bizarres. Mais surtout y'en a plein qui produiront le même résultat, ce qui est peu de la triche.
Problème : Compter combien il existe de formules légales (de longueur ≤ 8 sans compter l'entrée, sans chiffres, sans lettres autres que a, b et c) qui produisent des résultats différents quand on les exécute sur l'entrée "a3b2c;" (avec 10 caractères affichés et 100 étapes de calcul).
Pour vous faciliter la vie, un script vous est fourni en PJ dans lequel la fonction generate() renvoie une paire : chaîne de sortie, et un booléen indiquant si une erreur s'est produite.
('aabbbbbbca', False)
>>> generate("a3b2c;*", outsize=10, timeout=100)
('string index out of range', True)
Promis celui-là est pas dur... juste un peu calculatoire !
Soumettre la solution et obtenir les pièces : https://events.planet-casio.com/avent2025
Citer : Posté le 17/12/2025 19:46 | #
Tri-formule
Le problème précédent s'intéresse à ce qu'il se passe si on met ensemble une formule et une entrée qui n'ont pas particulièrement été conçues pour aller ensemble.
Aujourd'hui on creuse un peu plus cette question en faisant du reverse-engineering. Voici trois formules sans leur entrée :
*(a??2b)
*(?a?2b)
Et voici trois sorties, limitées à 20 caractères, sans ordre particulier :
aabbabbaabbbbabbbbbb
aabbbbbbabbbbbaabbbb
J'affirme qu'il existe une entrée commune qui, quand appliquée aux trois formules ci-dessous, produit ces trois sorties (mais pas dans cet ordre).
Problème : Trouver cette entrée.
Vous pouvez tester en appelant generate() avec outsize=20.
Ce problème n'est pas trop dur si vous gardez en tête qu'à peu près n'importe quoi peut aller dans une entrée.
Soumettre une solution et obtenir les pièces : https://events.planet-casio.com/avent2025
Citer : Posté le 20/12/2025 00:19 | # |
Fichier joint
Complément à b
Si vous avez été surpris·e par toutes les astuces et les trucs drôles qu'on peut faire avec ce petit langage bête de génération de séquences, alors j'ai réussi mon coup ! Sinon, le problème d'aujourd'hui y parviendra peut-être.
En tant que modèle de calcul les formules ne nous emmènent pas bien loin car elles n'ont pas de mémoire et se ramènent facilement à des automates finis, le cas de base facile du modèle de calcul vraiment pas très puissant.
On va quand même jouer un peu avec cette idée. Quel genre de calcul est ce qu'on peut faire avec une formule ? Un cas simple serait de transformer un nombre. Par exemple, on pourrait faire le complément d'un nombre en binaire : inverser les 1 et les 0. Par exemple :
Après : 1110001101110110
Tristement, nos formules ne peuvent pas afficher de chiffres, que des lettres, donc on va devoir s'adapter un peu : on va prendre les chiffres 1 et 2 en entrée, et on va prendre les lettres "a" (1) et "b" (2) en sortie. Du coup l'exemple c'est plutôt :
Après : bbbaaabbabbbabba
Pour ce problème, j'ai introduit un nouvel élément dans les formules, "!", qui fournit un caractère de la chaîne "Avant". En gros, c'est comme "?", mais le caractère est fourni par le problème et ça ne vous bloque pas l'usage de "?" avec une chaîne d'entrée.
En pratique, "!" appelle un générateur et arrête l'exécution quand on arrive à la fin. On l'utilise en fournissant un générateur dans le paramètre bang= de generate(), ce que vous pouvez tester avec le programme Python en pièce jointe de ce post :
>>> generate("*!", bang=gen1)
abcdef
>>> gen2 = (random.choice("12") for i in range(10))
>>> generate("b;*(!a?)", bang=gen2)
abaabaabaabaabaababaababab
Dans le premier exemple, le générateur gen1 produit les lettres a, b, c, d, e, f, et ensuite plus rien du coup l'exécution de la formule s'arrête. Un générateur de cette forme vous sera utile pour tester sur une entrée fixe.
Dans le deuxième exemple, le générateur gen2 produit aléatoirement des 1 et des 2. Dans la formule, on s'en sert pour répéter le "a" soit une fois soit deux fois. Après chaque répétition, on affiche un b avec "?" (c'est juste pour montrer que "?" et "!" marchent en même temps). C'est sur ce genre d'exemple que votre réponse sera évaluée.
Problème : Écrivez une formule de longueur ≤ 40 qui peut recevoir n'importe quelle séquence de "1" et de "2" par "!" et affiche son complément, à savoir le caractère "b" pour chaque 1 reçu et le caractère "a" pour chaque 2 reçu.
Pour être sûr, voilà ce qui est attendu (et doit marcher pour n'importe quelle séquence de 1 et 2) :
bbbaaabbabbbabba
Ne soyez pas intimidé·es par la limite de longueur. La solution de référence fait 18 caractères, je ne veux juste pas vous contraindre.
Soumettre une solution et obtenir les pièces : https://events.planet-casio.com/avent2025
Citer : Posté le 21/12/2025 11:53 | #
Comme on arrive à la fin, quelques informations sur le timing.
Planning de fin
Comme d'habitude, ma préoccupation principale est que ce puzzle soit chill et ne se finisse donc pas en une course à qui sera devant son PC durant les fêtes en famille. Du coup mon plan initial était de publier le dernier problème (pas bien dur) le 24 en journée, et surveiller les soumissions ensuite. Sauf que je bosse le 24, donc c'est pas pratique. Du coup, pour être un peu plus large :
Vous aurez donc dès Mardi soir toutes les pièces pour finir le défi.
Comment participer
Envoyez-moi le puzzle complété par MP (vous pouvez héberger l'image sur https://t.breizh.pm/ si Breizh_craft est pas en train de le déménager) ou par mail à l'adresse du contact du site (contact@vous-savez-quoi) avec l'image en PJ. Incluez vos solutions aux problèmes individuels.
Votre solution sera comptée comme valide si les réponses aux problèmes fonctionnent et le puzzle a 4 pièces ou moins à une position incorrecte. S'il y a un souci je vous ferai un retour de mail/MP avec une indication pour vous permettre d'ajuster. Cependant je ne garantis pas de répondre instantanément et donc il est possible que quelqu'un vous passe devant entre temps. Visez d'avoir juste au premier coup. Si vous hésitez entre des placements sur quelques pièces signalez-le tout de suite.
Les gagnants seront décidés par ordre de réceptions des solutions valides, selon la date du MP ou mail, et les plus rapides pourront choisir leurs lots en premier. Seule contrainte, la calculatrice (Graph Math+) ne pourra pas être choisie par un·e gagnant·e qui a déjà remporté une Math+ dans nos concours depuis l'an dernier. Et tous les participants ayant résolu le puzzle recevront le titre de Maître du Puzzle.
Citer : Posté le 21/12/2025 17:47 | # |
Fichier joint
Derniers ajouts
Pour cet avant-dernier problème, on va faire quelque chose dont je n'étais pas sûr au début que ce soit possible :
poster à une heure raisonnabledes additions !Comme pour le problème précédent, on utilise "!" pour générer des nombres en binaire, et votre tâche est de les additionner. Le fonctionnement est le suivant :
p = 00101
q = 01000
r = 01101 (result of addition)
input of '!': 2111211211
expected result: babba
L'ordre vous paraîtra peut-être bizarre mais en fait c'est pile ce qu'il faut pour calculer l'addition : vous prenez deux bits, vous en faites la somme, vous affichez le bit résultat tout en gardant la retenue en mémoire, et vous passez aux bits suivants.
Le script fourni en pièce jointe contient la fonction bang_addition() qui vous affiche le petit texte ci-dessus automatiquement à partir des valeurs de p et q, et retourne le générateur à donner en argument à bang= pour configurer correctement l'opérateur "!".
Si l'addition produit une retenue finale, les entrées auront des bits à 0 en plus, donc vous n'avez pas besoin de vous préoccuper d'afficher "un caractère en plus". Il vous suffit de générer deux bits avec "!", afficher un bit de résultat, répéter ; et "!" arrêtera automatiquement la formule au bon moment.
Problème : Écrivez une formule de longueur ≤ 60 qui calcule l'addition des entrées fournies par "!" comme décrit ci-dessus.
Encore une fois la limite généreuse de 60 est juste pour ne pas vous contraindre : en réalité moins devrait suffire. Ma solution fait 26 caractères.
Soumettre une solution et obtenir les pièces : https://events.planet-casio.com/avent2025
Citer : Posté le 23/12/2025 17:43 | #
Bonjour !
J'ai réussi à résoudre toutes les énigmes jusqu'à présent, sauf celle de Court-circuit. Comme sa cousine Théorème de factorisation, c'est une énigme difficile à résoudre, haha!