iniciar-programa
define-nueva-instruccion gira(n) como
inicio
repetir n veces gira-izquierda;
fin;
define-nueva-instruccion prepara como
inicio

mientras no-orientado-al-este hacer gira(1);
repetir 2 veces avanza;
mientras junto-a-zumbador hacer
inicio
mientras junto-a-zumbador hacer coge-zumbador;
gira(1);
repetir 2 veces si frente-libre entonces avanza;
mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
gira(2);
mientras frente-libre hacer avanza;
gira(1);
si frente-libre entonces avanza;
fin;

gira(2);
mientras frente-libre hacer avanza;
gira(2);
mientras junto-a-zumbador hacer coge-zumbador;
repetir 2 veces si frente-libre entonces avanza;
mientras algun-zumbador-en-la-mochila hacer
inicio
deja-zumbador;
avanza;
fin;

gira(2);
si frente-libre entonces avanza;
mientras junto-a-zumbador hacer
inicio
gira(3);
repetir 2 veces si frente-libre entonces avanza;
mientras junto-a-zumbador hacer coge-zumbador;
mientras algun-zumbador-en-la-mochila hacer
inicio
deja-zumbador;
avanza;
fin;
gira(2);
mientras frente-libre hacer avanza;
gira(3);
si frente-libre entonces avanza;
fin;
gira(2);

fin;
define-nueva-instruccion go como
inicio

mientras no-junto-a-zumbador hacer avanza;
gira(1);
repetir 2 veces si frente-libre entonces avanza;
gira(3);

mientras junto-a-zumbador hacer
inicio
si frente-libre entonces avanza;
si junto-a-zumbador entonces
inicio

gira(2);
si frente-libre entonces avanza;
gira(3);
mientras junto-a-zumbador hacer avanza;
gira(2);
si frente-libre entonces avanza;
mientras junto-a-zumbador hacer
inicio
mientras junto-a-zumbador hacer coge-zumbador;
gira(1);
si frente-libre entonces avanza;
mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
gira(2);
si frente-libre entonces avanza;
gira(1);
si frente-libre entonces avanza;
fin;
gira(2);
si frente-libre entonces avanza;
gira(3);
si frente-libre entonces avanza;

fin
sino
inicio

gira(2);

sal-de-instruccion;

fin;
fin;

fin;
define-nueva-instruccion casi como
inicio

si frente-libre entonces avanza;
gira(3);
mientras junto-a-zumbador hacer avanza;
gira(2);
si frente-libre entonces avanza;
mientras junto-a-zumbador hacer
inicio

mientras junto-a-zumbador hacer coge-zumbador;
deja-zumbador;
si algun-zumbador-en-la-mochila entonces
inicio
gira(3);
si frente-libre entonces avanza;
mientras algun-zumbador-en-la-mochila hacer
inicio
deja-zumbador;
si frente-libre entonces avanza;
fin;
gira(2);
si no-junto-a-zumbador entonces avanza;
mientras junto-a-zumbador hacer avanza;
gira(2);
si frente-libre entonces avanza;
gira(1);
si frente-libre entonces avanza;
fin
sino
inicio
si frente-libre entonces avanza;
fin;

fin;

fin;
define-nueva-instruccion casitermina como
inicio

mientras junto-a-zumbador hacer
inicio
gira(2);
repetir 2 veces avanza;
mientras junto-a-zumbador hacer avanza;
gira(2);
si frente-libre entonces avanza;
mientras junto-a-zumbador hacer
inicio
mientras junto-a-zumbador hacer coge-zumbador;
si frente-libre entonces avanza;
fin;
mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
gira(3);
si frente-libre entonces avanza;
gira(1);
si frente-libre entonces avanza;
fin;

fin;
define-nueva-instruccion termina como
inicio
si frente-libre entonces avanza;
mientras junto-a-zumbador hacer avanza;
gira(2);
si frente-libre entonces avanza;
mientras junto-a-zumbador hacer
inicio
gira(3);
si frente-libre entonces avanza;
mientras junto-a-zumbador hacer coge-zumbador;
gira(2);
si frente-libre entonces avanza;
gira(3);
mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
coge-zumbador;
mientras frente-libre hacer avanza;
gira(2);
deja-zumbador;
repetir 2 veces si frente-libre entonces avanza;
gira(1);
si frente-libre entonces avanza;
gira(3);
si junto-a-zumbador entonces
inicio
mientras junto-a-zumbador hacer avanza;
gira(2);
si frente-libre entonces avanza;
gira(1);
mientras frente-libre hacer avanza;
gira(3);
fin
sino
inicio
apagate;
fin;
fin;
fin;
    inicia-ejecucion
    si no-junto-a-zumbador entonces apagate;
    prepara;
    go;
    casi;
    si frente-libre entonces avanza;
    casitermina;
    gira(1);
    termina;
        apagate;
    termina-ejecucion
finalizar-programa
