Reptes

Repte 12 — El laberint ★★★ Avançat

En Karel és l'extrem superior esquerre, que és l'entrada d'un laberint. En Karel ha d'arribar a la perla que es troba a l'extrem oposat, però ha de superar un laberint.

Sempre existeix un camí que porta en Karel fins a la perla. Escriu un programa que funcioni per a qualsevol laberint, sigui quina sigui la seva forma o mida. El teu codi no pot assumir res sobre la geometria concreta del laberint.

Restricció important: no pots codificar el camí pas a pas. Has de descobrir un algorisme genèric que segueixi les parets fins trobar la sortida. Fixa't que els mons que et presentem són ben diferents.
💡 Pista — la regla de la mà dreta
Imagina que poses la mà dreta a la paret del laberint i camines sempre mantenint el contacte amb ella. Quan la paret acaba (la dreta és lliure), gires a la dreta i avances. Si la paret continua però el davant és lliure, avances recte. Si tens paret tant a la dreta com al davant, gires a l'esquerra (però no avances: potser ara el davant és lliure i caldrà tornar a comprovar). Aquesta regla garanteix que trobaràs la sortida en qualsevol laberint.
💡 Pista — un sol pas, repetit moltes vegades
La clau és definir una funció un_sol_pas(), que implementi exactament un pas amb la regla de la mà dreta.

Hauràs de tenir en compte tres casos: dreta lliure, dreta ocupada però davant lliure, i dreta i davant ocupats. Cada cas fa una acció diferent.
Pots usar right_is_clear(), front_is_clear() i turn_right() juntament amb les funcions que ja coneixes.