iniciar-programa
define-nueva-instruccion gira(g) como repetir g veces gira-izquierda;
define-nueva-instruccion deja(n) como inicio
si junto-a-zumbador entonces inicio
mientras junto-a-zumbador hacer  coge-zumbador;
si frente-libre entonces inicio
avanza;
fin
sino
gira(3);
deja(n);
repetir n veces inicio
gira(3);
repetir n veces inicio
deja-zumbador;
si frente-libre entonces inicio
avanza
fin
sino inicio
gira(2);
repetir n veces avanza;
gira(2);
avanza;
gira(1);
si frente-libre entonces avanza;
fin;
fin;
si orientado-al-este entonces inicio
gira(2);
repetir n veces avanza;
gira(3);
si frente-libre entonces avanza;
fin;
fin;
sal-de-instruccion;
fin;
si orientado-al-oeste entonces inicio
gira(3);
mientras frente-libre hacer avanza;
gira-izquierda;
si frente-bloqueado entonces inicio
gira-izquierda;
mientras frente-libre hacer avanza;
gira(2);
sal-de-instruccion;
fin;
avanza;
gira-izquierda;
deja(n);
gira(2);
mientras frente-libre hacer avanza;
gira-izquierda;
repetir n veces avanza;
gira-izquierda;
sal-de-instruccion;
fin;

si frente-bloqueado y junto-a-zumbador entonces inicio
gira(2);
mientras frente-libre hacer avanza;
gira-izquierda;
si frente-bloqueado entonces inicio
gira(1);
mientras frente-libre hacer avanza;
gira(2);
sal-de-instruccion;
fin;
avanza;
gira-izquierda;
deja(n);
gira(2);
mientras frente-libre hacer avanza;
gira-izquierda;
repetir n veces avanza;
gira-izquierda;
sal-de-instruccion;
fin;




si frente-bloqueado y no junto-a-zumbador y orientado-al-sur entonces inicio
si frente-libre entonces avanza;
gira-izquierda;
deja(n);
repetir n veces si frente-libre entonces  avanza;
sal-de-instruccion;
fin;
si no junto-a-zumbador y orientado-al-este entonces  inicio
gira-izquierda;
mientras frente-libre hacer avanza;
gira-izquierda;
si frente-bloqueado entonces inicio
gira(1);
mientras frente-libre hacer avanza;
gira(2);
sal-de-instruccion;
fin;
avanza;
gira-izquierda;
deja(n);
gira(2);
mientras frente-libre hacer avanza;
gira-izquierda;
repetir n veces avanza;
gira-izquierda;
sal-de-instruccion;
fin;

si frente-libre entonces inicio
avanza;
deja(n);
repetir n veces si frente-libre entonces  avanza;
fin;
fin;



define-nueva-instruccion coge(n) como inicio
si junto-a-zumbador entonces inicio
coge-zumbador;
coge(sucede(n));
fin
sino inicio
repetir n veces deja-zumbador;
deja(n);
fin;
fin;

    inicia-ejecucion
     mientras no orientado-al-norte hacer gira-izquierda;
     mientras frente-libre hacer avanza;
     gira(3);
     mientras frente-libre hacer avanza;
     gira(3);
     mientras orientado-al-sur hacer inicio
     si junto-a-zumbador entonces inicio
     coge(0);
     apagate;
     fin;
     si frente-bloqueado entonces inicio
     gira(2);
     mientras frente-libre hacer avanza;
     gira-izquierda;
     avanza;
     gira-izquierda;
     fin;
     avanza;
     fin;


        apagate;
    termina-ejecucion
finalizar-programa
