Une tempĂȘte de sable vous a enlevĂ© votre guide, juste aprĂšs qu'il vous ait mis en garde contre les fantĂŽmes du dĂ©sert !
Heureusement, vous avez trouvé une carte du désert dans les fontes du chameau que vous montez.
Elle se prĂ©sente sous la forme d'une suite d'instructions gauche/droite et un sacrĂ©seau de nĆuds.
RL
AAA = (BBB, CCC)
BBB = (DDD, EEE)
CCC = (ZZZ, GGG)
DDD = (DDD, DDD)
EEE = (EEE, EEE)
GGG = (GGG, GGG)
ZZZ = (ZZZ, ZZZ)
Vous remarquez qu'il faut partir du nĆud "AAA" pour arriver au nĆud "ZZZ". Pour vous dĂ©placer, il faut passer en boucle la suite de lettres "L" et "R" (gauche et droite) en regardant en commençant du dĂ©part le nom du nĆud suivant selon s'il est Ă droite ou Ă gauche.
On atteint l'arrivée aprÚs 2 instructions :
AAA R => CCC L => ZZZ
Pour l'exemple suivant, 6 étapes sont nécessaires :
LLR
AAA = (BBB, BBB)
BBB = (AAA, ZZZ)
ZZZ = (ZZZ, ZZZ)
AAA L => BBB L => AAA R => BBB L => AAA L => BBB R => ZZZ
En combien d'étapes atteint-on l'arrivée ?
Mais, attendez ! Vous revoilà à votre point de départ !
Et si c'était une carte destinée aux fantÎmes ? Les fantÎmes ne sont pas contraints par les lois de l'espace-temps.
Vous remarquez aussi quelque chose de curieux : il y a exactement le mĂȘme nombre de nĆuds finissants par "A" que par "Z"Â !
Il faut en fait parcourir en mĂȘme temps tous les chemins en commençant de tous les points finissants par "A" et s'arrĂȘter lorsqu'on est partout sur un point finissant par "Z".
Par exemple :
LR
11A = (11B, XXX)
11B = (XXX, 11Z)
11Z = (11B, XXX)
22A = (22B, XXX)
22B = (22C, 22C)
22C = (22Z, 22Z)
22Z = (22B, 22B)
XXX = (XXX, XXX)
Demande 6 Ă©tapes.
Combien en faut-il pour votre carte ?
Indice : il en faut beaucoup. Brutus n'est pas la solution du jour. Il faut dans les 1014.
# Encore des maths, du Python et de la POO
PostĂ©Â par alberic89 đ§ . ĂvaluĂ©Â Ă Â 1.
Ma solution aurait pu ĂȘtre mieux optimisĂ©e pour la lisibilitĂ© et la redondance, mais elle fonctionne. Je dĂ©finis une classe pour les nĆuds, surcharge quelques opĂ©rateurs, prĂ©traite quelques donnĂ©es, et trouve le ppcm en utilisant le module
math
de Python.L'informatique n'est pas une science exacte, on n'est jamais Ă l'abri d'un succĂšs
# sans PPCM, t'est cuit
PostĂ©Â par steph1978 . ĂvaluĂ©Â Ă Â 1.
J'ai bien brĂ»lĂ© du CPU avant de comprendre qu'il fallait pas tout faire tourner en mĂȘme temps mais juste calculer le nombre d'Ă©tapes de chaque fantĂŽme puis de prendre leur PPCM.
En 20 lignes de python:
[^] # Re: sans PPCM, t'est cuit
PostĂ©Â par Yth (Mastodon) . ĂvaluĂ©Â Ă Â 2.
Mon algo final est un peu bĂątard, parce qu'il part sur un truc plus gĂ©nĂ©rique selon les donnĂ©es de l'Ă©noncĂ© et s'arrĂȘte un peu sĂšchement grĂące Ă ce qu'on « dĂ©couvre » dans les donnĂ©es :
Au passage j'ai découvert itertools.cycle, trÚs pratique, au début j'avais réimplémenté la meme chose avec un générateur.
Les affichages de la boucle de l'exercice 2 donnent chez moi :
On voit trĂšs clairement les deux cycles de mĂȘme longueur, dĂšs le dĂ©but.
C'est à partir de cet affichage là qu'on saute la résolution générique pour se contenter de calculer le PPCM et finir le problÚme.
Suivre le flux des commentaires
Note : les commentaires appartiennent Ă celles et ceux qui les ont postĂ©s. Nous nâen sommes pas responsables.