Repte 6 — Construir torres

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.
💡 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.