Reptes
Repte 6 — Construir torres ★★ Intermedi
El fons del mar té diverses bases marcades amb una perla al terra.
En Karel comença a la base de la columna més a l'esquerra, mirant
cap a l'Est.
La seva missió: construir una torre de perles per damunt de cada base, des del terra fins al sostre. Com que algunes bases ja podrien tenir perles de decoració, en Karel ha de deixar una perla només si la casella és buida.
Quan ha omplit totes les columnes, ha de quedar a la base de l'última torre mirant cap a l'Est.
La teva feina: escriu un programa que funcioni sigui quina sigui l'alçada del món i el nombre de torres. El teu codi no pot dependre del nombre exacte de caselles.
La seva missió: construir una torre de perles per damunt de cada base, des del terra fins al sostre. Com que algunes bases ja podrien tenir perles de decoració, en Karel ha de deixar una perla només si la casella és buida.
Quan ha omplit totes les columnes, ha de quedar a la base de l'última torre mirant cap a l'Est.
La teva feina: escriu un programa que funcioni sigui quina sigui l'alçada del món i el nombre de torres. El teu codi no pot dependre del nombre exacte de caselles.
💡 Pista — pre/postcondicions de
omple_columna()
Perquè el programa principal funcioni amb un while,
la funció omple_columna() ha de tenir la mateixa
precondició i postcondició: en Karel és a la base de la columna,
mirant cap a l'Est. Si la postcondició no es compleix (per
exemple, si en Karel queda mirant al Nord), el bucle principal es
desorientarà a la primera iteració. Dissenya el gir final de
omple_columna() amb cura.
💡 Pista — el
while imbricat i l'error de pal de paller
Dins de omple_columna() hi ha dos bucles: un per
pujar fins al sostre i un per tornar al terra. El bucle de pujada
s'atura abans d'arribar a l'última casella, igual que al
repte del passadís. Afegeix un if not pearl_here(): drop()
fora del while per no perdre la casella del sostre.
💡 Pista — quin gir retorna al Sud→Est?
Quan en Karel torna al terra, mira cap al Sud. Per orientar-se
cap a l'Est des del Sud, necessita un sol gir de 90°. Recorda la
taula de girs:
turn_left() des del Sud gira a l'Est;
turn_right() des del Sud gira a l'Oest.