iniciar-programa
define-nueva-instruccion gira(n) como repetir n veces gira-izquierda;
define-nueva-instruccion casa como
inicio
mientras no-orientado-al-sur hacer gira(1);
mientras frente-libre hacer avanza;
gira(3);
mientras frente-libre hacer avanza;
gira(2);
fin;
define-nueva-instruccion clona(a) como
si junto-a-zumbador entonces
inicio
coge-zumbador;
clona(sucede(a));
fin
sino
inicio
si orientado-al-este entonces repetir a veces deja-zumbador;
avanza;
repetir a veces deja-zumbador;
fin;
define-nueva-instruccion lleva como
si junto-a-zumbador entonces
inicio
coge-zumbador;
lleva;
deja-zumbador;
fin
sino
inicio
avanza;
gira(1);
avanza;
fin;
define-nueva-instruccion resta(a) como
si no si-es-cero(a) entonces
si junto-a-zumbador entonces
inicio
coge-zumbador;
avanza;
deja-zumbador;
gira(2);
avanza;
gira(2);
resta(precede(a));
si orientado-al-norte entonces
inicio
avanza;
mientras junto-a-zumbador hacer coge-zumbador;
gira(1);
avanza;
gira(1);
clona(0);
gira(1);
clona(0);
fin;
fin
sino
inicio
gira(1);
avanza;
gira(3);
avanza;
gira(2);
lleva;
gira(1);
avanza;
gira(1);
lleva;
gira(1);
avanza;
fin;
define-nueva-instruccion cuenta(a) como
si junto-a-zumbador entonces
inicio
coge-zumbador;
cuenta(sucede(a));
fin
sino
inicio
gira(1);
avanza;
repetir a veces deja-zumbador;
gira(3);
avanza;
gira(3);
avanza;
gira(2);
si junto-a-zumbador entonces resta(a)
sino
inicio
gira(1);
avanza;
gira(3);
avanza;
gira(2);
clona(0);
fin;
fin;
define-nueva-instruccion contador(a) como
si junto-a-zumbador y frente-libre entonces
inicio
avanza;
contador(sucede(a));
fin
sino
inicio
gira(2);
mientras frente-libre hacer avanza;
gira(2);
si frente-libre y junto-a-zumbador entonces
repetir a veces
inicio
mientras frente-libre y junto-a-zumbador hacer cuenta(0);
si frente-bloqueado entonces casa;
fin;
fin;
define-nueva-instruccion toma(a) como
si junto-a-zumbador entonces
inicio
coge-zumbador;
toma(sucede(a));
fin
sino
inicio
repetir 2 veces avanza;
gira(2);
repetir a veces deja-zumbador;
repetir 2 veces avanza;
repetir a veces deja-zumbador;
gira(1);
fin;
define-nueva-instruccion acomoda como
si junto-a-zumbador entonces
inicio
coge-zumbador;
acomoda;
deja-zumbador;
fin
sino
inicio
mientras frente-libre hacer avanza;
gira(2);
mientras junto-a-zumbador y frente-libre hacer avanza;
fin;
define-nueva-instruccion cuantas(a) como
si junto-a-zumbador y frente-libre entonces
inicio
avanza;
cuantas(sucede(a));
fin
sino
inicio
gira(2);
mientras frente-libre hacer avanza;
gira(2);
si frente-libre y junto-a-zumbador entonces
repetir a veces
inicio
contador(0);
avanza;
gira(2);
si junto-a-zumbador entonces
inicio
clona(0);
gira(3);
toma(0);
fin
sino
inicio
avanza;
gira(3);
repetir 2 veces avanza;
gira(2);
clona(0);
apagate;
fin;
mientras frente-libre y junto-a-zumbador hacer
inicio
mientras junto-a-zumbador hacer avanza;
mientras no-junto-a-zumbador y frente-libre hacer avanza;
si junto-a-zumbador entonces
inicio
gira(2);
acomoda;
fin;
fin;
casa;
fin;
fin;

     inicia-ejecucion
     cuantas(0);
        apagate;
    termina-ejecucion
finalizar-programa
