iniciar-programa
define-nueva-instruccion gira(n) como inicio
repetir n veces gira-izquierda;
fin;
define-nueva-instruccion papaz(k) como inicio
si junto-a-zumbador entonces inicio
coge-zumbador;
papaz(sucede(k));
fin sino inicio
repetir precede(k) veces avanza;
mientras frente-libre hacer inicio
deja-zumbador;
repetir k veces inicio
si frente-libre entonces avanza;
fin;
fin;
si frente-bloqueado entonces inicio
gira(2);
mientras frente-libre hacer avanza;
gira(1);
avanza;
gira(1);
fin;
fin;
fin;
define-nueva-instruccion popo(p) como inicio
si frente-libre entonces inicio
avanza;
popo(sucede(p));
fin sino inicio
gira(1);
repetir 2 veces avanza;
repetir sucede(p) veces deja-zumbador;
apagate;
fin;
fin;
    inicia-ejecucion
mientras no-orientado-al-oeste hacer gira-izquierda;
mientras frente-libre hacer avanza;
gira(1);
mientras frente-libre hacer avanza;
gira(2);
mientras orientado-al-norte y junto-a-zumbador hacer papaz(0);
gira(1);
avanza;
gira(3);
mientras orientado-al-norte hacer inicio
mientras no-junto-a-zumbador hacer avanza;
gira(1);
avanza;
si no-junto-a-zumbador y orientado-al-oeste entonces inicio
gira(2);
avanza;
gira(1);
avanza;
fin;
si junto-a-zumbador y orientado-al-oeste entonces inicio
gira(1);
popo(0);
fin;
fin;
        apagate;
    termina-ejecucion
finalizar-programa
