Reptes

Repte 11 — El tauler d'escacs ★★★ Avançat

El món és un rectangle buit. En Karel ha d'omplir-lo com si fos un tauler d'escacs: ha de situar perles a les caselles «negres» i deixar-ho buit a les «blanques». La cantonada inferior esquerra serà sempre negra (és a dir, amb una perla).

La teva feina: escriu un programa que funcioni per a qualsevol rectangle, sigui quina sigui l'amplada i l'alçada. El teu codi no pot dependre del nombre exacte de caselles.

Restricció important: no pots comptar files ni columnes. Has de deduir si tens un nombre parell o senar de files (el mateix amb columnes), sabent on en Karel ha deixat l'última perla abans de trobar una paret.
💡 Pista — el truc de la paritat física
Quan en Karel acaba una fila i ha de pujar a la fila de sobre, la darrera casella que ha visitat és la clau: si hi ha perla (pearl_here() = True), la primera casella de la nova fila serà «blanca» (sense perla). Si no hi ha perla, la primera casella de la nova fila serà «negra» (amb perla). Comprova la condició abans de moure't a la nova fila; un cop t'has mogut ja no pots saber-ho.
💡 Pista — el recorregut en serpentí i els dos girs
En Karel recorre el món resseguint les files: fila inferior cap a l'Est, llavors avança cap al Nord, després fila superior cap a l'Oest, torna a avançar cap al Nord, fila superior cap a l'Est, etc.

El gir de transició depèn de la direcció actual: des de l'Est cal turn_left(); move(); turn_left() (girar al Nord, pujar, girar a l'Oest). Des de l'Oest cal turn_right(); move(); turn_right() (girar al Nord, pujar, girar a l'Est). Escriu dues funcions per pujar de fila, una per a cada direcció.