Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Actualités


Index du Forum » Actualités » Le Puzzle de l'Avent 2025
Lephenixnoir Hors ligne Administrateur Points: 25733 Défis: 174 Message

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




Lephenixnoir Hors ligne Administrateur Points: 25733 Défis: 174 Message

Citer : Posté le 26/12/2025 16:34 | #


N'hésitez pas à garder des notes sur vos solutions, on pourra débriefer ça à partir du 1er Janvier (après quoi le Puzzle sera clôt du coup).

De mon côté j'ai déjà écrit les explications de mes solutions, ça fait un beau petit pavé. Je sais que vous en avez qui sont différentes et parfois meilleures, je serai curieux de voir vos approches.
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 25733 Défis: 174 Message

Citer : Posté le 01/01/2026 13:19 | #


Comme le site était down et y'a quelques personnes qui bloquent, j'étends la deadline au 7 Janvier.

Un dernier indice pour court-circuit : non seulement il faut utiliser un caractère spéciale dans la chaîne d'entrée pour créer le court-circuit (et donc utiliser des chiffres et ce caractère spécial), mais le groupement le plus naturel est le suivant :

a ac a abbbc a ac abbc a abbc a ac

Désolé pour ce problème super dur, et bon courage à ceux qui essaient encore (Prgmprotogen et J2l, j'espère !).
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Prgmprotogen Hors ligne Membre Points: 35 Défis: 0 Message

Citer : Posté le 01/01/2026 19:28 | #


Phew, I got a little worried when I couldn’t access the site. I’m glad it got resolved. Thank you for extending the deadline!

I believe this new hint is enough for me to efficiently solve Short-Circuit! (I see exactly what you meant about the trap the spacing set in the original.) If I still can’t solve it after this hint, then I probably don’t deserve the title of Puzzle Master, but rather Puzzle Wimp, haha
(Honestly, that would be a pretty funny title to have if I managed to fail)

Good luck to the remaining contestants!
Earatozytet En ligne Membre Points: 31 Défis: 9 Message

Citer : Posté le 03/01/2026 00:19 | #


Bonjour !
Je suis un peu en retard sur les problèmes et ça m'étonnerait que j'ai le temps de finir, mais au cas où j'aimerais savoir s'il est encore nécessaire d'envoyer le puzzle complété après avoir fini tous les problèmes ?
Lephenixnoir Hors ligne Administrateur Points: 25733 Défis: 174 Message

Citer : Posté le 03/01/2026 00:21 | #


Bonjour ! Non pas la peine, comme il a été publié dans l'article des voeux il vous suffirait de copier l'image de toute façon
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Earatozytet En ligne Membre Points: 31 Défis: 9 Message

Citer : Posté le 03/01/2026 00:22 | #


D'accord merci !
Cg2025 Hors ligne Membre Points: 1 Défis: 0 Message

Citer : Posté le 05/01/2026 15:51 | #


Greetings to all!
I don't know French, am an amateur programmer and am extremely late; so the odds are completely stacked against me heh.
It took me several hours just to complete the second puzzle, so I can see the time for the puzzles was given reasonably.
Inevitably, I can only participate the next year if I hopefully do remember by then...
Best of luck to everyone who are participating!
Lephenixnoir Hors ligne Administrateur Points: 25733 Défis: 174 Message

Citer : Posté le 05/01/2026 16:37 | #


Hi! Don't worry about it too much, the second problem is quite hard. There's some activity, but two of the three winning slots are still open!

In any case, the deadline mostly exists so we can share solutions afterwards. If there are still competing people and available prizes there's no reason to cut the event short. Keep letting me know if you're trying...

I'm surprised to have so many new English-speaking members having a crack at the puzzle this year. Did the even get cross-posted somewhere?
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 25733 Défis: 174 Message

Citer : Posté le 05/01/2026 17:42 | #


Earatozytet est la deuxième personne à finir ! Encore un lot et tous les titres de Maître du Puzzle à distribuer. Bon courage !!
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Prgmprotogen Hors ligne Membre Points: 35 Défis: 0 Message

Citer : Posté le 05/01/2026 18:10 | #


Lephenixnoir a écrit :
I'm surprised to have so many new English-speaking members having a crack at the puzzle this year. Did the even get cross-posted somewhere?


Personally, I had probably learned about this site as a whole through watching a YouTube video explaining how to install games onto my model of calculator. (I believe the first game I ever added was Wolfenstein.) More recently, right before the start of the challenge, I had been looking to install a few more games, so I visited the site again. And on the front page, I either saw the posting or the banner for the Advent Puzzle. I checked it out, and since there was the promise of free stuff, I was thoroughly entranced and had to at least give it a try. Towards the end, I had many of my solutions and pieces already (and, thanks to my so-called “Puzzle Place-O-Matic” tool I made, the jigsaw was largely assembled); so, I created an account to be able to safely participate and send my answer (and to also ask for for help on Short Circuit ).
Long story short, this event might’ve been a really good trap to recruit more members

Lephenixnoir a écrit :
Earatozytet est la deuxième personne à finir ! Encore un lot et tous les titres de Maître du Puzzle à distribuer. Bon courage !!

Congratulations, Earatozytet!!! If Afyu is okay with it, I think Earatozytet should be the one to receive the grand prize; I admittedly have been a little lazy lately, and keep forgetting to solve the puzzle (or usually just try to put it off until later).
Lephenixnoir Hors ligne Administrateur Points: 25733 Défis: 174 Message

Citer : Posté le 05/01/2026 19:32 | #


Oh so you've been hanging around for a while, cool!

For the record Prgmprotogen I have your almost-finished solve but I couldn't count it as is so if you have the chance to go back to Short-circuit there's still a prize potentially waiting for you. I'm slightly unsure there wasn't a misunderstanding so I just want to clarify.
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Prgmprotogen Hors ligne Membre Points: 35 Défis: 0 Message

Citer : Posté le 05/01/2026 20:31 | #


Yeah, I would occasionally visit, but I was just here for the games lol. Now that I have an account, I might look into polishing/finishing and releasing some of my own games

Oh, I understand, I'm just saying that I've been doing a lot of things other than solving Short Circuit, not because I'm struggling a ton with it, but because I'm procrastinating lol. I was just saying that Earatozytet would probably be more deserving of the prize Afyu offered since they actually put in the effort and finished it, unlike me (Also, I live in the U.S., so shipping and customs might be painful to deal with depending on how everything is set up.)
I'm going to actually try to finish it now, since I have some time to spare.
Prgmprotogen Hors ligne Membre Points: 35 Défis: 0 Message

Citer : Posté le 05/01/2026 20:53 | #


Lephenixnoir a écrit :
Un dernier indice pour court-circuit : non seulement il faut utiliser un caractère spéciale dans la chaîne d'entrée pour créer le court-circuit (et donc utiliser des chiffres et ce caractère spécial), mais le groupement le plus naturel est le suivant :
a ac a abbc a ac abbc a abbc a ac


In this, I noticed that for the first section of "b", the original problem showed 3 "b" in a row (if you read it as a continuous string), whereas the hint you gave shows only 2 "b" in a row in the first section. Should I still adhere to what the original problem showed?
Lephenixnoir Hors ligne Administrateur Points: 25733 Défis: 174 Message

Citer : Posté le 05/01/2026 21:11 | #


Sorry, formatting error on my end! There should be 3 "b"s. I'll edit the message.
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Prgmprotogen Hors ligne Membre Points: 35 Défis: 0 Message

Citer : Posté le 05/01/2026 21:13 | #


No worries, thank you! With 3 "b"s there, this might be a little trickier than I thought... (or maybe easier...?)
Lephenixnoir Hors ligne Administrateur Points: 25733 Défis: 174 Message

Citer : Posté le 05/01/2026 21:14 | #


Prgmprotogen a écrit :
I was just saying that Earatozytet would probably be more deserving of the prize Afyu offered since they actually put in the effort and finished it, unlike me (Also, I live in the U.S., so shipping and customs might be painful to deal with depending on how everything is set up.)

Ok I didn't realize Afyu had offered to shift the prizes publically. All participants will get to choose their prize in completion order, so Afyu first, Earatozytet second, and the next participant to complete the puzzle will go last. This will also include goodies from the treasury.

No worries, thank you! With 3 "b"s there, this might be a little trickier than I thought... (or maybe easier...?)

It doesn't make any difference.
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 25733 Défis: 174 Message

Citer : Posté le 10/01/2026 14:13 | #


Je ne suis pas là demain, mais je regarderai les soumissions une dernière fois demain soir. Après quoi, même s'il n'y a que deux participations, je publierai les solutions et on passera à la distribution des lots
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 25733 Défis: 174 Message

Citer : Posté le 12/01/2026 16:25 | #


Pas de nouvelle soumission, donc Afyu et Earatozytet sont nos deux gagnants ! Je poste les solutions "attendues" tout à l'heure, comme ça on pourra voir ce qui diffère chez vous
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 25733 Défis: 174 Message

Citer : Posté le 14/01/2026 00:32 | #


Évidemment j'ai oublié la suite, grr. C'est pas grave. Donc quelques histoires sur les problèmes, explications, coulisses de mon côté. Racontez vos solutions à vous aussi, elles sont sûrement différentes !

Un monde de séquences

Ici le but était de se mettre dans le bain et de montrer qu'on n'a pas un joli langage tout lisse, on a une chaîne de caractères et "13x" ne veut pas dire 13 x mais bien 1 fois 3 x. Ma solution de référence en 12 caractères était

9(abc)4(abc)

J'avais repéré qu'avec "?" on peut compacter pas mal, spécifiquement on peut faire 9 caractères :

abc;66?3?

Mais quelqu'un a tout de suite pointé (Hackell je crois ?) qu'on peut déjà faire 9 sans, en décomposant en 1 + 12 :

abc34(abc

Déjà des surprises.

Théorème de factorisation

Le but de ce problème était de bien penser de façon circulaire à la chaîne d'entrée. Je voulais qu'il y ait un cycle dans la formule (avec un groupe "*") et un cycle dans la chaîne d'entrée (avec une lecture en boucle), mais pas alignés. Du coup j'ai choisi de faire un cycle de longueur 3 dans la formule et 4 dans la chaîne d'entrée, ce qui m'a donné la formule de longueur 14

3525;*(?a?b?a)

Et là vous voyez que pour moi ce problème était facile à concevoir, et ainsi les périls de l'exercice, puisqu'il était beaucoup plus dur à résoudre que je ne l'avais prévu. :x

Prélude

J'aime vraiment celui-là. Initialement je voulais trouver plus « d'applications » des séquences et les transcrire ensuite en formule. Finalemment je l'ai pas beaucoup fait, pour deux raisons : d'une part c'est dur de trouver des applications pas trop complexes, d'autre part compacter une séquence quelconque est assez dur et ingrat. Du coup j'ai fait plus de problèmes sur les finesses théoriques des formules comme un modèle de calcul.

À ce stade j'avais déjà bien investigué les possibilités pour se déplacer silencieusement dans la chaîne d'entrée, et mon approchge initiale consistait à encoder les notes dans la chaîne d'entrée avec un motif de lecture un peu complexe (avec l'extension "<" dont je parlerai plus tard) :

CDEGudGEDCABuCEECdBAx;4(5<5?)C3(5?5<)4?d0?4(5?5<)05?A3(5?5<)4?u

Mais j'ai vite réalisé que c'était plus court de la coder directement, donc j'ai repoussé ces subtilités à plus tard, et je me suis arrêté sur cette solution de longueur 39 :

uA;2(4(CDEGu)4(CdGED)d4(ABuCE)4(AECdB)?

Pavé César

Cette fois-ci vous n'y échappiez plus : le 0. Quand j'ai conçu le langage de formules j'avais imaginé différents systèmes, et une des variations était d'avoir ou pas un parser. En gros la question c'est si la portée des opérateurs est connue à l'avance. Si j'écris :

2?z

on peut se demander : qu'est-ce que le 2 répète ? Si le prochain caractère de la chaîne d'entrée est une lettre, par exemple, x, ça fait 2 x et plus tard on avance au z. Donc on peut grouper mentalement comme dans "(2?)z". Mais si le prochain caractère de la chaîne d'entrée est un chiffre, disons 7, ça fait 2 fois 7 z, du coup il faut grouper comme dans "(2?z)".

Dans les variations où il y a un parser, le groupement est fixé de façon définitive au début de l'évaluation de la formule. Dans la variation que j'ai retenue, on a le comportement ci-dessus, et donc on ne sait pas à l'avance comment grouper. J'ai choisi ça en ayant l'intuition que ça donnerait des possibilités sympa.

Du coup, le 0. Si j'écris "0?zt", qu'est-ce qu'il se passe ? Si je ne lis pas le prochain caractère d'entrée je ne saurai pas s'il faut grouper comme "(0?)zt" et donc afficher zt, ou s'il faut grouper comme "(0?z)t" et donc afficher t.

Du coup, dans le code le 0 active un mode "silencieux" qui n'affiche plus rien mais calcule une fois son argument au lieu de zéro fois. Ça peut avoir comme effet de bord de faire avancer la chaîne. Comme dans la solution à ce problème, en 35 caractères :

abcdefghijklmnopqrstuvwxyz;*(55??0?

La partie "55??" affiche 26 lettres, et ensuite "0?" n'affiche rien mais avance d'une position dans la chaîne, effectuant le décalage d'une ligne à la suivante.

Un million de variations

Encore un dont j'aimais beaucoup l'idée. Le principe que j'ai retenu pour ma solution est de prendre une séquence de longueur 7 (abcdefg) et de ne prendre que 6 des 7 caractères (abcdef) pour créer un décalage. Comme 6 et 7 sont premiers entre eux, ça me donne 42 caractères uniques (6 paquets) sans utiliser le g, et je pousse jusqu'à 48, i.e. un caractère juste avant que le dernier paquet ne se répète.

Entrée : abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg
Trous  : abcdef. abcdef. abcdef. abcdef. abcdef. abcdef. abcdef. abcdef.
Sortie : abcdefa bcdefab cdefabc defabcd efabcde fabcdef abcdef#

Et là, je décale une fois de plus, ce qui me saute le a. Du coup, je peux refaire le même motif, sauf que cette fois au lieu d'utiliser toutes les lettres sauf le g, j'utilise toutes les lettres sauf le a.

Entrée : abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg a bcdefga bcdefga
Trous  : abcdef. abcdef. abcdef. abcdef. abcdef. abcdef. abcdef. . bcdefg. bcdefg.
Sortie : abcdefa bcdefab cdefabc defabcd efabcde fabcdef abcdefb   cdefgbc defg### (etc)

Je peux répéter ça 7 fois, excluant le b, le c, le d, le e, et le f avant de retomber sur l'exclusion du g.

abcdefg;*(0?8(6?0?

Gratter sur les 48 caractères me permet de répéter 48 segments avec cette formule de longueur 18.

Initialement je voulais des permutations, i.e. imposer que chaque lettre apparaisse exactement une fois par segment, juste dans un ordre différent. Je croyais avoir des bonnes façons d'en générer mais ça ne marchait pas bien, ça ne faisait qu'interférer avec mes idées sur l'exclusion... où d'ailleurs je voulais trouver un motif d'exclusion plus complexe pour que ça donne des variations plus longtemps. J'ai pas réussi à le faire bien marcher et je soupçonne que y'a un théorème de théorie des groupes quelque part qui dit que ce que je voulais faire est pas possible. x)

Toupie dans un labyrinthe

Rien d'extraordinaire sur celui-là. Je voulais qu'il y ait une solution pour laquelle la formule la plus courte ne produise pas le chemin le plus court, ce qui n'est pas facile pour un labyrinthe de cette taille. En fin de compte j'ai construit la majorité du labyrinthe pour la solution de taille 8 que j'avais retenue (après plusieurs itérations) :

*(hhgbbd

Je serais très surpris qu'il y ait une autre solution courte. (Mais j'ai vu passer une solution qui passait par la droite !!)

Court-circuit

Celui-ci était prévu depuis le début quand j'ai conçu le langage des formules. Comme j'ai évoqué précédemment en discutant du 0, la présence de "?" rend impossible de déterminer à l'avance la portée des opérateurs. J'avais vu venir dès le début qu'il en serait de même avec les parenthèses, car dans

*(a?b)

chaque fois que "?" produit une parenthèse fermante, cela ferme implicitement le groupe.

« Court-circuit » ne sert qu'à une seule chose et c'est montrer cette technique. Là aussi je suis parti de la solution pour m'assurer qu'il n'y ait pas d'autre façon de faire le même résultat :

)0)3)02)2;*(a?bc

Le groupe "(a?bc" peut avoir plusieurs comportements différents selon le caractère donné :

  • Un chiffre de "1" à "9": "ab...bc", le plus intuitif.
  • Le chiffre "0": "ac".
  • Une parenthèse fermante ")": "a" tout court.
  • J'aurais pu complexifier en ajoutant une lettre "X", auquel cas ça donnerait "aXbc", mais j'ai décidé de ne pas le faire (ouf lol).

Ensuite j'ai choisi les paramètres de façon à donner un motif plaisant par groupes de 3, bien que ce ne soit pas du tout le bon découpage.

Présenté : aac  aab  bbc  aac  abb  caa  bbc  aac
Solution : a ac a abbbc a ac abbc a abbc a ac
Entrée :   ) 0  ) 3     ) 0  2    ) 2    ) 0

Ah oui et pour vous embêter un peu plus l'entrée cycle aussi, les deux derniers caractères ")0" sont récupérés au début. (sowwy :3)

Aux limites de la légalité

Rien de subtil ici, l'introduction laisse entendre qu'on peut analyser le texte pour comprendre ce qui se passe mais la contrainte d'unicité est beaucoup trop dure à démêler, il faut juste tester toutes les combinaisons avec un script. La réponse est 32650.

def all_exprs(characters, maxlen):
    for i in range(1, maxlen + 1):
        sources = [characters] * i
        for expr in itertools.product(*sources):
            yield "".join(expr)

total, total_valid = 0, 0
outputs = set()

for expr in all_exprs("()*?abc", 8):
formula = "a3b2c;" + expr
out, err = generate2(formula, outsize=10, timeout=100)
total += 1

if not err:
    total_valid += 1
    outputs.add(out)

print(total, total_valid, len(outputs))
# 6725600 6253235 32650

Vous noterez que la règle de légalité n'a pas beaucoup de sens, c'est ridicule qu'une erreur soit levée quand la chaîne de caractères se termine par "*" ou un chiffre alors que ça marche bien si le "*" ou le chiffre est suivi d'une parenthèse. Je n'avais juste pas envisagé ce cas quand j'ai codé le générateur et j'étais réticent à le modifier pendant le Puzzle. Ça rend certaines parenthèses fermantes non optionnelles sur les problèmes de fin (en tous cas pour mes solutions).

Vous avez peut-être vu dans le code que j'avais également planifié une extension avec un caractère "<" permettant de revenir en arrière d'une position dans la chaîne d'entrée. Cette idée était accompagnée d'un changement de sémantique pour "*" pour que l'itération s'arrête automatiquement si rien n'est affiché et la formule ne change plus. De cette façon, "*<" permettait de revenir au début de la chaîne et "*" de façon générale devenait plus intéressante. Mais pareil, je voulais pas trop changer le code après coup, donc j'ai laissé tomber.

Tri-formule

Un problème très improvisé, un peu trop peut-être ; l'intention était de faire apparaître quelques tricks. La solution prévue était :

a3b2*;*(a?b2?)
= aabbabbaabbbbabbbbbb

a3b2*;*(a??2b)
= aabbbbbbabbbbbaabbbb

a3b2*;*(?a?2b)
= aabbbbbbbabbbbaaaaaa

mais vues les solutions l'étoile n'avait pas besoin d'être une étoile et y'a une solution encore plus simple (mais plus longue), donc c'est un résultat très mitigé. J'espère qu'il était au moins un peu fun à résoudre. ^^"

Complément à b

Ah, là on s'amuse ! Au début j'étais pas sûr de si on pouvait faire des vrais calculs avec les formules. J'étais resté sur le cas où l'entrée du calcul est donnée par "?" et du coup la formule prenait des "décisions" avec des extensions genre opérateur de comparaison ou des trucs du style. Mais je trouvais ça trop compliqué, donc j'avais relégué cette possibilité dans un coin de ma tête au début du mois.

Avec un peu plus de pratique j'ai fini par réaliser que le mécanisme de décision était tout bête : la position dans la chaîne d'entrée représente l'état. Du coup il fallait laisser la formuler utiliser la chaîne d'entrée pour sa logique interne, et donc j'ai introduit "!". C'est vachement redondant avec "?", mais j'étais vraaaiment plus à ça près.

Ma solution en 18 caractères est la suivante :

a6b4 ; *(0!2?0z ? ?0?)

L'idée est que la chaîne d'entrée représente un automate. Chaque paire lettre/chiffre indique une lettre à afficher et un nombre de caractères à avancer dans la chaîne d'entrée pour revenir au début.

Dans la formule, la partie "0!2?0z" sert à avancer silencieusement dans la chaîne de 2 fois le chiffre reçu par le générateur (pour rappel quand le générateur donne "1" on veut afficher "b", quand il donne "2" on veut afficher "a"). Le premier "0" passe en silencieux, ensuite on répète "!" fois la sous-formule "2?" qui donc avance dans la chaîne.

Le "0z" est un peu subtil, et un peu con. Ça gère deux choses. D'une part, si on passe sur un chiffre dans "?", comme j'ai expliqué précédemment ça va lire plus loin, et la suite de la formule est un "?" (le groupe du milieu tout seul), ce qui menace de partir en vrille. Donc le "z" absorbe, pour que ça fasse genre "0!260z". Quant au deuxième zéro, c'est au cas où au contraire le dernier "?" soit une lettre, auquel cas l'exécution continuerait juste après ce "?", et il ne faut pas que le "z" s'affiche. Mettre des parenthèses aurait été plus simple, mais j'y ai pas pensé.

Bref, si on voit un "1" on avance de 2 caractères et on arrive sur le "b4". Si on voit un "2" on avance de 4 caractères et on arrive sur le "a6". Notez que la lettre correspondant à l'état d'arrivée est bien celle qu'on veut afficher.

Le groupe du milieu, "?", affiche donc cette lettre. Le groupe de fin, "?0?", avance du nombre de positions indiqués dans la chaîne d'entrée après la lettre. Donc si on a affiché "b" on avance maintenant de 4 positions, si on a affiché "a" on avance de 6 positions. Dans les deux cas ça nous ramène au début, et on peut recommencer avec le caractère suivant.

Derniers ajouts

Même idée de base que pour Complément à b, c'est une machine à états. L'idée est d'implémenter un additioneur complet, i.e. un additioneur qui prend trois entrées (prochain bit de p + prochain bit de q + retenue) et produit deux sorties (prochain bit de r et la nouvelle retenue). La retenue est encodée dans la position dans la chaîne d'entrée, ce qui me donnne une formule de 26 caractères :

a6b4a4b2 ; *(2!20?z 40?z ? ?0?)

  • Le premier état "a6" correspond au cas où bit_p + bit_q + retenue = 0.
  • Le deuxième état "b4" correspond au cas où bit_p + bit_q + retenue = 1.
  • Le troisième état "a4" correspond au cas où bit_p + bit_q + retenue = 2.
  • Le dernier état "b2" correspond au cas où bit_p + bit_q + retenue = 3.

L'idée est qu'à chaque étape, on part soit de l'état "a6" (si la retenue vaut 0) soit de l'état "b4" (si la retenue vaut 1), puis on avance de 2 caractères si le bit de p vaut 1, et on avance encore de 2 caractères si le bit de q vaut 1. Dans l'état où on arrive, le caractère sera le bit de r, et le chiffre nous dira de combien avancer dans la chaîne d'entrée pour se repositionner soit en "a6" (si la nouvelle retenue vaut 0) soit en "b4" (si la nouvelle retenue vaut 1).

La formule est donc très similaire à la précédente, à l'arnaque près que je voyais pas commencer utiliser les chiffres 1/2 donnés par "!" pour avancer de 0/2 caractères, donc j'avance de 2/4 à la place. Ça veut dire que j'avance 2 caractères de trop pour le bit de p et pareil pour le bit de q, soit un décalage de 4 positions. Je compense avec le groupe "40?z" qui avance silencieusement de la longueur de l'entrée moins 4 (8 - 4 = 4), complétant un cycle inutile de la chaîne d'entrée.

Pour la transition après avoir affiché un bit en sortie, si bit_p + bit_q + retenue ≤ 1 il n'y pas de nouvelle retenue, donc les deux premiers états "a6" et "b4" ramènent à "a6". Si bit_p + bit_q + retenue ≥ 2 il y a une nouvelle retenue donc les états "a4" et "b2" ramènent à "b4".

On a l'impression qu'on peut faire n'importe quel automate fini comme ça mais c'est pas évident parce qu'on s'appuie encore sur des transitions qui avancent tout droit quand on lit le prochain caractère généré par "!". C'est un peu limitant.

Castor affairé

Dernier problème et lui aussi un peu improvisé. (Pour info Afyu quand j'ai dit que le dernier problème serait facile je l'avais pas encore écrit, il est effectivement moins facile que prévu. ouuups :3)

Je pensais au classique du Busy Beaver mais sans contrainte la solution est évidemment triviale, avec par exemple 10 caractères la meilleure option est

999999999a

et pouf, c'est fini. J'ai fini par tomber sur l'idée de ne pas utiliser le même caractère plusieurs fois d'affilée, ce pour quoi il y avait deux compromis possibles :

  1. Renoncer à n'utiliser que des 9 en interposant des 8 : "989898989a" ;
  2. Payer 2 caractères pour que "?" devienne équivalent à 9 et garder les 9 : "9;9?9?9?9a".

Par rapport à la solution optimale n'utilisant que des 9, la première approche paie une multiplication du nombre total de caractères par un facteur 8/9 pour chaque 8 qui est utilisé, un coût qui augmente quand la formule devient plus longue. La deuxième paie un facteur de 1/9 pour chacun des deux premiers caractères qui ne contribuent rien, soit un coût fixe de 1/81 peu importe la longueur.

La deuxième stratégie est donc meilleure sur le long terme, puisque les 8/9 répétés vont finir par peser plus fort que le coût fixe de 1/81, mais il faut attendre assez longtemps pour que ça se arrive. On peut calculer combien de temps avec un petit logarithme (log en base 8/9 de 1/81) ou avec un script ; il se trouve que les 8 gagnent pour les longueurs ≤ 76 et les "?" gagnent pour les longueurs ≥ 77.

Quand j'ai vu apparaître cette dynamique j'ai tout de suite décidé que ce serait ça le problème, puisque ça justifie de donner deux jeux de pièces le 23. Et aussi je trouvais ça cool que le 77 tombe absolument du ciel et que somehow la solution soit pas la même pour 76 et 77.

// 76
989898989898989898989898989898989898989898989898989898989898989898989898989a

// 77
9;9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?a
9;?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9a

Vous noterez que pour 77 y'a deux solutions, mais pas pour 76, puisqu'il y a un nombre impair de chiffres donc on est obligés de commencer par un 9 et de finir par un 9.

Voilà voilà, c'est tout pour ce Puzzle ! J'espère que ça vous a plus même si y'a pas eu énormément de soumissions finies. ^^"
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)
Prgmprotogen Hors ligne Membre Points: 35 Défis: 0 Message

Citer : Posté le 14/01/2026 03:30 | # | Fichier joint


Wow, it's very interesting to see your process behind the development of the puzzles! I'm surprised to see that I actually not only got an alternate solution to Spinning Top in a Maze, but had I realized I could have formatted my solution differently, it would have actually been different! More on that further down

(For personal ease of copy-pasting, I'll refer to each puzzle by its French name.)
(Also, sorry for any awkward phrases. I got fatigued as I continued writing the below text )

Click to reveal all of my puzzle-solving secrets!
Cliquez pour recouvrir

Un monde de séquences: abc;66?3?
I don't remember what exactly my first solution was, but it was very similar (if not the exact same) as what Lephe' had first shown. I later factored it using an input string for fun. Overall, this was a very straightforward puzzle, and was a good tutorial, not much else to comment on.

Théorème de factorisation: 3525;*(?a?b?a
This one, I actually had to wait until hints were given before I could start to solve it. When I got around to it, I eventually found the answer with a bit of factoring and... well, I just shifted the numbers in the input string until I got the correct answer

Prélude: uA;2(4(CDEGu)4(CdGED)d4(ABuCE)4(AECdB)?
This one was both a huge pain, and a lot of fun. It was a pain because I had to very carefully watch the video, type out each note, double-check I typed the note correctly, so on. Then from there, I started to factor it down, looking for duplicates and patterns. Sometimes I would do something weird in terms of how I factored it, but then I would realize that by shifting things a little I could format it in a way that would make sense. When I got towards the end, I had to figure out a way to repeat everything twice, but use a different character at the end of each loop; naturally, I found the input string to be a good fit for this. (This was a moment where I felt really clever for figuring it out.) I have a bit of a love-hate relationship with this one The only thing I might change with this puzzle is perhaps providing a text-based encoding of the song, or maybe using a much shorter song.

Pavé César: abcdefghijklmnopqrstuvwxyz;*(55??0?
This one was really fun! I figured it must use a silent input string-reading, and that I'd probably need to use the input string cursor as a simple memory state, so this one was pretty easy and satisfying.

Un million de variations: abcdefg;*(?7(bcdef?
Eh, I kinda cheaped out on this one. I would use one character from the input string, and cycle through variations of the ending letter like "cbcdefa", "cbcdefb", etc. I got enough variations for a valid solution and called it good

Toupie dans un labyrinthe: dhhdb;*?
This one I broke out some graph paper for! I essentially tried using a mix of manual human brute-forcing and logical thinking to try to figure out a way through the maze. Judging based off of your hint about the long way not necessarily being the best way (or something along those lines), I figured I would have to roughly right and up, along the bottom and right edges of the maze. I had no idea there were any other solutions to the maze problem, so I'm pretty surprised to see my solution technically wasn't intended This one was pretty fun in my opinion.
Oh, and Lephe'... you never actually included the maze-stepping program with the posting of the maze puzzle... I wasn't a member then, and I forgot to mention it after I joined

Court-circuit:
No comment...

Aux limites de la légalité: 32650
I'm going to be honest, I wasn't sure if brute-forcing this was the correct answer... but I figured there probably wasn't any reasonable way of mathematically checking the number of possible unique solutions, so I just built a brute-forcer anyways ¯\_(ツ)_/¯
For fun (and since putting the number as my solution doesn't really feel right), I'm attaching the brute-forcer program I made. It's made by a professional Python hater, so the code probably isn't perfect, but oh well (In all seriousness, it was actually fun making this program. Not so fun realizing my program didn't work because I forgot a couple of symbols... )

Tri-formule: a3b26
I don't remember much from this, I basically just played around with it until I found the correct answer. Took some thinking and trial and error :P

Complément à b: !xb2a1xx;*(?0???20?)
This is some of the good stuff! I had to get creative with this. I figured out that I could take advantage of the system of using 1 and 2 for binary 0 and 1, by using 1 and 2 as skip multipliers. For example, if the character read is "1", then it'll substitute it in a way similar to "10?", or skip one character. We skip the dummy "x", and then read and print one character. It's a "b" here. Then, we read the next number, multiply it by 2, and skip the many times. We read a 2 after the "b", so it's "220?" or skip 4. (Remember that reading the 2 still moves the cursor forward by one character.) We skip "a", "1", and two dummy "x"s, ending back up at the start and ready for a new character. Now, when reading a "2", it actually behaves kind of weirdly at first glance. We read 2, skip 2, and read a 2, prompting us to run the next "?" two times. Okay, print an "a", and substitute in a 1 into the next set of characters (which form a skip), producing "120?" or skip 2. We're back at the start! It's a neat little automaton.

Derniers ajouts: xxxxa6b4a4b2;*(2(!20?)?(?0?)
This one is by far my favorite! I recognized pretty much immediately that this represented a full adder circuit. I don't have a huge amount of experience with circuitry (I think my strong suit is programming), but I knew the basic principle was that the program needed to remember a carry bit in order to properly do addition. (The principle is the same with elementary-level addition and multiplication, too; we just need to do it in base 2/binary, not base 10/decimal.) I figured I could use the input string cursor and skip multipliers to remember states and perform different "actions" of sorts, depending on the input. Dummy characters helped make my job easier. (They also look fun to include for some reason, I don't know why )

À venir !
76: 989898989898989898989898989898989898989898989898989898989898989898989898989a
77: 9;9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9?a
This one I found pretty easy (sorry Afyu).
76: I thought that to make a really large finite repetition that doesn't use the same character twice in a row, what could be better than to just spam my keyboard and alternate between the two largest single-digit base 10 numbers, 8 and 9!
77: 9898998... repeating that wouldn't work for this one, so I had to come up with something better. I thought about characters that would let me still print a large repetition, and "?" immediately came to mind. I could use 9 as an input string character, and alternate 9 and "?" repeatedly for the same effect as multiple 9s in a row! It was the perfect scam!

I love the pixel art jigsaw, too! As I was assembling the jigsaw (using my own custom program made specifically for this challenge ), it was fun trying to figure out what the heck certain blotches of pixels were supposed to be, and then having that audible "Ohhhhh" moment as I realized that it was a house, or a tree, or something like that. Of the completed puzzle, I recognized Lephe' and Eragon, but no one else since I'm new here and even as a lurker, I didn't really read the forums often :P


All in all, there were some rough patches, but I'm glad I participated! There were some very fun and clever puzzles here, and I hope to try my hand at more next year
Lephenixnoir Hors ligne Administrateur Points: 25733 Défis: 174 Message

Citer : Posté le 14/01/2026 08:20 | #


Judging based off of your hint about the long way not necessarily being the best way (or something along those lines),

Actually I meant that the right way would be the long way around

Oh, and Lephe'... you never actually included the maze-stepping program with the posting of the maze puzzle... I wasn't a member then, and I forgot to mention it after I joined

Oh snap...! Why did no one tell me...? 😰

I'm blown away by how close your full adder looks to mine. It's incredible that we get exactly the same substring "a6b4a4b2". How cool is that xD
Mon graphe (27 Juin): (MQ || Rogue Life) ; serial gint ; passe gint 3 ; Azur ; ...) || (shoutbox v5 ; v5)

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
captcha
Rafraîchissez la page si vous souhaitez obtenir un nouveau CAPTCHA.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2026 | Il y a 245 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd