Bonjour à tous
Problèmes : faire avancer un petit personnage (Thor) jusqu'à une lumière. On a en entrée la position de Thor en X,Y et la position de la lumière en X,Y. Le terrain n'a aucun obstacle. A chaque tour il faut juste indiquer une direction à choisir entre N, NE, E, SE, S, SW, W, NW et suite à cette indication Thor fait un pas dans la direction citée. Faut juste alors ne pas oublier de modifier la position de Thor pour pouvoir détecter s'il ne sort pas de la carte. Le prog s'arrête tout seul quand Thor arrive à la lumière. Bref rien de vraiment compliqué (code ci-dessous)
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 def choix(T, L, k): if T < L: return(k[0], T+1) if T > L: return(k[1], T-1) return ("", T) # choix # Récupération des positions (Thor et la lumière) LX, LY, TX, TY = [int(i) for i in raw_input().split()] # Boucle de déplacement while True: (Y, TY)=choix(TY, LY, "SN") (X, TX)=choix(TX, LX, "EW") print "%s%s" % (Y, X) #while
Ensuite un autre challenge consiste à programmer la même solution dans le code le plus court possible. Et là, tout compte (les tailles des noms des variables, les espaces, etc.) Je m'y suis mis aussi
Un code vraiment minimaliste (199 caractères au total). Et là, surprise, j'ai un classement honorable (premier tiers) mais le premier a quand-même un code (toujours Python 2) de 66 caractères !!! (et le tout premier a un code Ruby de 46c).
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 d=lambda T,L,k:T<L and (k[0],T+1) or T>L and (k[1],T-1) or ("",T) P=[int(i) for i in raw_input().split()] while 1: (Y,P[3])=d(P[3],P[1],"SN") (X,P[2])=d(P[2],P[0],"EW") print "%s%s"%(Y,X)
Et là est ma question: en dehors de toute idée de tricherie, certains auraient-ils des idées pour savoir comment une telle compression est possible ??? Me semble un truc totalement fou non ???
Partager