Karel a été embauché par les Nations Unies pour venir aider à construire des maisons. La journée doit être gagnée et Karel est clairement le meilleur robot pour ce travail. Votre objectif est de faire marcher Karel dans la rangée du bas et de construire une maison comme suit à chaque endroit où Karel trouve un beeper:

Les images ci-dessous montrent ce que Karel devrait faire pour deux mondes donnés en exemple. Vous pouvez supposer qu'aucune maison ne se chevauchera et que toutes les maisons iront bien dans le monde. Vous ne devriez pas faire de suppositions la taille du monde ou sur le nombre de maisons!

Avant

Après

Avant

Après

Solution

import stanford.karel.*;
	
public class UNKarel extends SuperKarel {
	
	public void run() {
		while(frontIsClear()) {
			move();
			if(beepersPresent()) {
				construireMaison();
			}
		}
	}

	/*
		* Cette méthode fait Karel construire une maison centree a la position courante de Karel.
		* Elle suppose qu'un beeper est present a la position de Karel.
		* A la fin de la methode, Karel aura pris le beeper, construit une maison centree a sa place. 
		* Kare sera aussi positionne au coin droit de la maison et faisant face a l'Est 
		*/
	private void construireMaison() {
		pickBeeper();
		turnAround();
		move();
		turnRight();
		placerTroisBeepers();
		turnRight();
		move();
		turnRight();
		placerTroisBeepers();
		turnLeft();
		move();
		turnLeft();
		placerTroisBeepers();
		turnAround();
		allerAuMur();
		turnLeft();
	}
	
	/*
		* Cette méthode fait avancer karel jusqu'au mur
		*/
	private void allerAuMur() {
		while(frontIsClear()) {
			move();
		}
	}

	/*
		* Cette méthode place 1 beeper sur 3 cellules consécutives 
		* commencant a la position courante de Karel, et alant dans 
		* la direction que face Karel présentement.
		*/
	private void placerTroisBeepers() {
		for(int i = 0; i < 3; i++) {
			putBeeper();
			move();
		}
	}
	
}