Le Puzzle de l'Avent 2024
Posté le 01/12/2024 17:58
Décembre, c'est attendre les fêtes dans une ambiance cozy, un plaid sur le dos et une tasse de thé à la main, avec un puzzle sous les yeux et du Python pour se remuer les neurones. Et vous toutes et tous invité·es !
Pour le principe de l'événement et les lots qui sont à remporter (une Graph Math+ moddée et une coque ou housse), voyez
l'article d'annonce de l'événement. Je ne vous remets ici que les points principaux
- Presque chaque jour de Décembre, je posterai un problème à résoudre, qui prendra cette année la forme d'un programme Python ayant un souci de performance ou de fonctionnalité à corriger.
- Une fois corrigé le programme Python, lorsque lancé, affichera sa « solution », un gros nombre permettant de décoder les pièces de puzzle du jour.
- Réassemblez le puzzle pour gagner des lots et le titre de Maître du Puzzle !
Mon intention est d'alterner entre des problèmes « plutôt faciles » (avec 1 jour laissé pour trouver la solution) et des problèmes « plutôt difficiles » (avec 2 jours laissés pour trouver la solution) pour que ce ne soit pas trop la course pour vous.
Si vous trouvez des solutions créatives, mathématiques, algorithmiques qui vous permettent de trouver le résultat sans lancer le programme Python, c'est valide aussi ! Je vous invite à vous en vanter dans les commentaires si ça arrive. Si vous trouvez un moyen de cheese le puzzle entier (i.e. avec une astuce qui marche pour tous les problèmes), vous ne pourrez pas prétendre au lots principaux, mais ça comptera quand même comme une résolution.
En juste admin qui fait trop de choses en même temps, je n'ai pas fini d'apporter les touches finales au puzzle, donc je vous donnerai les pièces du puzzle d'aujourd'hui et le script de décodage demain.
Comme vous pouvez le voir à la bannière, le puzzle est pas moche !!
À vos calculatrices dans les commentaires, bon courage tout le monde ! o/
Comment participer ?
Vous aurez besoin d'un ordinateur ou d'une calculatrice avec Python pour résoudre les problèmes et d'un ordinateur avec Python et la bibliothèque
Pillow pour décoder les pièces. Téléchargez
decode_pieces.py (lien direct) et indiquez vos solutions dedans. Placez-le dans un dossier à côté des images
Avent2024_Dec*r.png contenant les pièces brouillées, et exécutez-le pour décoder les pièces. Ensuite, réassemblez le puzzle dans un outil de votre choix (je conseille d'ouvrir les pièces comme des calques dans GIMP).
Liste des problèmes :
Le puzzle a été résolu par :
Fichier joint
Citer : Posté le 01/12/2024 18:09 | #
Penguin Programming Party
Cette année toute la communauté de Planète Casio a été invitée à une fête dans le Sud. Très dans le Sud d'ailleurs, puisqu'il s'agit de la première édition de la Penguin Programming Party organisée en terre Adélie. 🐧
Les manchots ont fait appel à vous pour entraîner leur Python-fu et auront un certain nombre de questions, casse-têtes, et autres jeux marrants à vous soumettre. Ils ne sont pas encore très forts en Python mais ils ont l'esprit affûté donc attention à ne pas tomber dans leurs pièges !
Avant votre départ pour l'Antarctique vous avez reçu par pingouin voyageur une petite énigme pour vous échauffer. Déterminez ce que le programme suivant affiche.
if n == 0:
return 3
if n == 1:
return -7
return u(n-2) - u(n-1) + 1
print(u(80))
Pièces du jour :
Indice : C'est une suite récurrente, il est plus facile de la calculer en commençant par le bas.
Citer : Posté le 01/12/2024 19:29 | #
Besides the end of the event, is there an actual deadline on completion of each puzzle, or is it more of a recommendation so as to not fall too far behind?
“They call me the king of the spreadsheets, got 'em all printed out on my bedsheets.” — “Weird Al” Yankovic
Citer : Posté le 01/12/2024 19:54 | #
That's 100% a recommendation. You can solve all the problems on Dec. 24th if you're confident. As far as how late you can submit your solution, there's no hard limit. Latest I've had was January 2nd last year I think. I usually like to put the full puzzle on a front page article as soon as the prizes are claimed, so submissions after that should provide some scripts or evidence of solving.
Citer : Posté le 01/12/2024 21:43 | #
Puisque je vois que dans le chat il y a de la compétition sur ce premier problème, je propose de comparer. Pour tenir compte des écarts de puissance entre les machines, je suggère le benchmark suivant :
Pour correction, u(10000) commence par 3107 et se termine par 6253.
Sur ma machine #2 prend 12.5 secondes et avec la solution de référence #1 prend 8.9 secondes soit un score de 0.712. Plus c'est bas mieux c'est.
Citer : Posté le 01/12/2024 21:54 | #
Perso j’ai un score de 0,561, si mes calculs sont bons.
Citer : Posté le 01/12/2024 21:56 | #
Joli ! J'ai implémenté la solution que j'avais en tête en vous lisant dans #projets, je descends à 0.08.
Citer : Posté le 01/12/2024 22:02 | #
chez moi en python 3.12 sur un Core i5 9300HF @ 2.40GHz
u(40) originel prend 19.6709s
5000 itérations de u(10000) optimisée prennent 18.3169s
soit un ratio de 0.931
PS : édité car erreur de copier coller
Citer : Posté le 01/12/2024 22:48 | #
sur mon tel avec un proco hisilicon kirin 710:
u(40) ~ 81.6 secondes
et 5000 fois u(10000) optimisé pareil
pour un ratio de 1.02
update: second essaie et ratio de 0.55
Citer : Posté le 01/12/2024 22:52 | #
Sur mon R5 4500U :
#1 = 15.121s
#2 = 20.556s
Pour un ratio de 0.73560, pas mieux que les autres
Caltos : G35+EII, G90+E (briquée )
Citer : Posté le 02/12/2024 07:37 | #
Heureusement que tu es là avec ton téléphone Hackcell car sinon mon PC serait complètement à la rue
Faudra que je pense à investir un de ces 4 matins.
(note pour plus tard : prendre un discrete GPU != nvidia !!! j'en peux plus de ces drivers à la con qui me plantent mon système...)
PS pour Lephe : j'avais compris dans l'énoncé du puzzle qu'il fallait corriger des programmes écrits avec les fesses par des Penguins (d'ailleurs est-ce que les penguins ont des fesses à proprement parler ? Mystèèèèèèèèèère ...), mais en fait on peut avoir des programmes "fonctionnel" à optimiser afin que ça ne prenne pas des éons pour obtenir une clef, c'est bien ça ?
Citer : Posté le 02/12/2024 07:42 | #
PPS pour Lephé : pour donner du piment, possible de créer des statuts "Maître du Puzzle 2", "Maître du Puzzle 3", ... afin de motiver ceux qui sont déjà "Maître du Puzzle" ?
Ca préciserait le nombre de puzzles résolus et donnerait le niveau du "Gajo" ou de la "Gajotte" qu'on a en face de nous
Citer : Posté le 02/12/2024 08:13 | #
Oui Sly le thème principal ça va être que les programmes marchent mais sont ultra lents... et faudra optimiser. D'aucuns disent que c'est un complot pour vous faire écrire des programmes Python qui tournent efficacement sur la calto. Mais je ne vois pas de quoi ils parlent.
PPS pour Lephé : pour donner du piment, possible de créer des statuts "Maître du Puzzle 2", "Maître du Puzzle 3", ... afin de motiver ceux qui sont déjà "Maître du Puzzle" ?
Par le nombre de puzzles résolus ou par édition ?
Citer : Posté le 02/12/2024 08:19 | #
Par nombre de puzzle résolus.
"Maître du puzzle MK2"
"Maître du puzzle MK3"
On peut trouver un nom plus fun pour ça. Genre "Dionysos" (Le dieu des jeux)
Citer : Posté le 02/12/2024 08:30 | #
Comme vous voulez. En fait par exemple Hackcell et certains autres sont déjà porteurs du titre. Donc on verra pas de changement pour eux. Ce serait cool d'avoir un truc spécial (si c'est pas trop chiant à implémenter).
Citer : Posté le 02/12/2024 08:45 | #
J'avais fait hier, mais il n'y avait pas encore les consignes pour le score de performances.
Donc sur un Core i7 1260P @ 2,1 GHz avec le même code qu'hier, j'ai un score de 0.515
Citer : Posté le 02/12/2024 09:31 | #
si c'est pas trop chiant à implémenter
Tkt c'est juste une entrée en db
Eragon: Lance la commande sur le serveur
La v4: Plante
Eragon: Et merde…
Citer : Posté le 02/12/2024 11:00 | #
mon ordinosaure cpu 2x 1.3Ghz met 142 secondes pour u(40)
Citer : Posté le 02/12/2024 13:35 | #
Sur suggestion de Kouhai je pense qu'on peut faire encore mieux avec la forme close de la suite... parce que 10000 est assez loin. J'arrive à la calculer sans passer par √5 mais j'ai encore des flottants qui traînent donc c'est pas encore précis. Avec GMP les fractions doivent résoudre le problème.
... je crois que je me suis fait nerd snipe ._.
Citer : Posté le 02/12/2024 14:43 | #
Be careful ... Rabbit hole ahead !!!
😁🤣
Citer : Posté le 02/12/2024 16:21 | #
Si je comprends bien, j'ai un score de 0,112 :
truc_gmp [o]<n> [repetitions]
$ ./truc_gmp o10000 5000
3107...6253
duration: 2700037446ns (2.700s)
$ time python omg.py
945165213
python omg.py 24,10s user 0,05s system 99% cpu 24,190 total
$ python -c "print(2700037446 / 24100000000)"
0.1120347487966805
Mon blog ⋅ Mes autres projets