Vigas
Karel entró a trabajar en una tienda de materiales de construcción, como parte de su entrenamiento (así es, no sólo los olímpicos sufren por tener que ser entrenados) le han pedido que catalogue los tipos de vigas que venden en la tienda. El almacén de las vigas es un cuarto rectangular con una puerta en la esquina inferior izquierda (Ver figura). Las vigas están acomodadas verticalmente recargadas en la pared del almacén.
Karel debe contar cuantas alturas distintas de vigas hay en el almacén y dejar un número de zumbadores igual a esa cantidad en la puerta del almacén.
* Karel inicia en la puerta del almacén mirando al este.
* Karel inicia con 0 beepers en la mochila.
* Karel gana dos beeper-salarios mínimos.
* La altura de las vigas varía entre 1 y la altura máxima de la bodega.
* Puede haber espacios SIN vigas.
* Todas las vigas inician en la fila inferior del almacén.
* No importa la posición final de Karel ni de los beepers que no estén en la puerta.
class program { void triste(b) { move(); turnleft(); while (frontIsClear()) { move(); } turnleft(); turnleft(); turnleft(); while (frontIsClear()) { while (frontIsClear()) { if (nextToABeeper()) { pickbeeper(); triste(succ(b)); } if (frontIsClear()) { move(); } } if (nextToABeeper()) { pickbeeper(); triste(succ(b)); } } turnleft(); turnleft(); while (frontIsClear()) { move(); } turnleft(); while (frontIsClear()) { move(); } iterate (3) { turnleft(); } move(); iterate (b) { putbeeper(); } turnoff(); } void levantalos(a) { pickbeeper(); if (frontIsClear()) { move(); levantalos(succ(a)); } else { turnleft(); turnleft(); iterate (a) { move(); } iterate (3) { turnleft(); } } } void dinosaurio() { turnleft(); turnleft(); move(); while (notNextToABeeper()) { move(); } pickbeeper(); turnleft(); } void feliz() { while (frontIsClear()) { move(); if (nextToABeeper()) { iterate (3) { turnleft(); } levantalos(0); } } turnleft(); turnleft(); while (frontIsClear()) { move(); } turnleft(); if (frontIsClear()) { move(); turnleft(); } else { turnleft(); } } program() { move(); turnleft(); while (frontIsClear()) { move(); } iterate (3) { turnleft(); } while (rightIsClear()) { while (frontIsClear()) { if (nextToABeeper()) { iterate (3) { turnleft(); } move(); while (frontIsClear()) { pickbeeper(); move(); } pickbeeper(); turnleft(); turnleft(); while (frontIsClear()) { move(); } putbeeper(); dinosaurio(); feliz(); } else { move(); } } turnleft(); turnleft(); while (frontIsClear()) { move(); } turnleft(); move(); turnleft(); } while (frontIsClear()) { if (nextToABeeper()) { pickbeeper(); turnleft(); while (frontIsClear()) { move(); } putbeeper(); turnleft(); turnleft(); while (frontIsClear()) { move(); } iterate (3) { turnleft(); } while (frontIsClear()) { move(); } turnleft(); turnleft(); triste(0); } if (frontIsClear()) { move(); } } turnleft(); turnleft(); while (frontIsClear()) { move(); } turnleft(); turnleft(); triste(0); if (frontIsClear()) { move(); } turnoff(); } }