Reptes
Repte 7 — L'escala doble ★★ Intermedi
Al fons del mar hi ha una muntanya submarina en forma d'escala doble:
N graons que pugen per l'esquerra i N graons que baixen per la dreta,
com una piràmide. A la cima hi ha una perla.
En Karel comença al peu de l'escala esquerra, mirant cap a l'Est. La seva missió: pujar fins a la cima, recollir la perla i baixar l'escala de l'altra banda deixant la perla al peu.
La teva feina: escriu un programa que funcioni sigui quin sigui el nombre de graons. El teu codi no pot dependre del nombre exacte de caselles.
En Karel comença al peu de l'escala esquerra, mirant cap a l'Est. La seva missió: pujar fins a la cima, recollir la perla i baixar l'escala de l'altra banda deixant la perla al peu.
La teva feina: escriu un programa que funcioni sigui quin sigui el nombre de graons. El teu codi no pot dependre del nombre exacte de caselles.
💡 Pista — la simetria entre
puja_grao() i baixa_grao()
puja_grao() fa: avança, gira a l'esquerra, puja, gira a la dreta.
baixa_grao() és exactament l'operació inversa: gira a la dreta,
baixa, gira a l'esquerra, avança. Imagina que executes puja_grao()
al revés, pas per pas. Si les dues funcions estan ben escrites, la
pre/postcondició de totes dues és la mateixa: en Karel és al
peu d'un graó, mirant cap a l'Est.
💡 Pista — com saber quan has arribat a la cima?
La cima és l'única casella del món que té una perla. Pots usar
while not pearl_here(): per pujar graó a graó fins
que trobis la perla. D'aquesta manera el programa funciona per a
qualsevol alçada de muntanya sense necessitat de comptar graons.
💡 Pista — com saber quan has arribat al peu de l'altra banda?
Quan en Karel és al peu del darrer graó de la dreta, la paret del
món li bloqueja el camí cap a l'Est:
front_is_clear()
retorna False. Pots usar while front_is_clear():
per baixar graó a graó fins que arribes al peu. Llavors deixa la perla.