iniciar-programa
define-nueva-instruccion gira-derecha como inicio
repetir 3 veces gira-izquierdA;
fin;

define-nueva-instruccion media-vuelta como inicio
repetir 2 veces gira-izquierdA;
fin;

define-nueva-instruccion unodos(n) como inicio
si junto-a-zumbador entonces  inicio
coge-zumbador;
unodos (sucede(n));
fin
sino inicio
si no si-es-cero (precede(n)) entonces inicio
repetir n veces deja-zumbador;
repetir 2 veces deja-zumbador;
fin
sino inicio
repetir n veces deja-zumbador;
fin;
fin;
fin;


define-nueva-instruccion soldado como inicio
si frente-libre  entonces inicio
avanza;
si no junto-a-zumbador entonces inicio
deja-zumbador;
deja-zumbador;
media-vuelta;
avanza;
gira-derecha;
fin
sino inicio
unodos (0);
media-vuelta;
avanza;
gira-derecha;
fin;
fin
sino inicio
gira-izquierdA;
fin;
fin;
define-nueva-instruccion haz como inicio
repetir 4 veces inicio
soldado;
fin;
mientras no orientado-al-norte hacer gira-izquierda;
si frente-libre entonces  inicio
avanza;
fin
sino inicio
media-vuelta;
 mientras frente-libre hacer avanzA;
gira-izquierda;
si frente-libre entonces  inicio
avanzA;
gira-izquierdA;
fin
sino
sal-de-instruccion;
fin;
fin;


define-nueva-instruccion sitio (n) como inicio
si junto-a-zumbador entonces inicio
coge-zumbador;
sitio(sucede(n));
fin
sino inicio
si si-es-cero (precede(n)) entonces inicio
deja-zumbador;
haz;
fin
sino inicio
repetir n veces deja-zumbador;
si frente-libre entonces avanzA;
si frente-bloqueado entonces inicio
media-vuelta;
mientras frente-libre hacer avanzA;
gira-izquierda;
si frente-libre entonces  inicio
avanzA;
gira-izquierdA;
fin
sino
sal-de-instruccion;
fin;
fin;
 fin;
  fin;
define-nueva-instruccion camina como inicio
si orientado-al-norte entonces inicio
mientras frente-libre  y no junto-a-zumbador hacer avanza;
si junto-a-zumbador entonces sitio (0);
si junto-a-zumbador y frente-bloqueado entonces sitio (0);
fin;
si frente-bloqueado y orientado-al-norte  entonces inicio
media-vuelta;
mientras frente-libre hacer avanzA;
gira-izquierda;
si frente-libre entonces  inicio
avanzA;
gira-izquierdA;
fin
sino inicio
sal-de-instruccion;
fin;
camina;
fin;
fin;


define-nueva-instruccion iniciar como inicio
mientras no orientado-al-oeste hacer gira-izquierdA;
mientras frente-libre hacer avanza;
mientras no orientado-al-sur hacer gira-izquierdA;
mientras frente-libre hacer avanzA;
media-vuelta;
fin;
define-nueva-instruccion quitaunos como inicio
si junto-a-zumbador entonces inicio
coge-zumbador;
si junto-a-zumbador entonces deja-zumbador;
si frente-libre entonces  inicio
avanza;
fin
sino inicio
media-vuelta;
mientras frente-libre hacer avanza;
  gira-izquierda;
si frente-libre entonces  inicio
avanzA;
gira-izquierdA;
fin
sino inicio
sal-de-instruccion;
fin;
fin;
quitaunos;
fin
sino inicio
mientras no junto-a-zumbador y frente-libre hacer avanza;
si frente-bloqueado entonces inicio
media-vuelta;
mientras frente-libre hacer avanzA;
gira-izquierda;
si frente-libre entonces  inicio
avanzA;
gira-izquierdA;
fin
sino inicio
sal-de-instruccion;
fin;
fin;
quitaunos;
fin;
fin;

     define-nueva-instruccion junta(n) como inicio
     si junto-a-zumbador entonces inicio
     coge-zumbador;
     junta (sucede(n));
     fin
     sino inicio
     mientras no junto-a-zumbador y frente-libre hacer avanzA;
     si frente-bloqueado y junto-a-zumbador entonces junta (0);
     si frente-bloqueado entonces inicio
       media-vuelta;
mientras frente-libre hacer avanzA;
gira-izquierda;
si frente-libre entonces  inicio
avanzA;
gira-izquierdA;
fin
sino inicio
iniciar;
mientras no orientado-al-sur hacer gira-izquierDA;
repetir n veces deja-zumbador;
fin;
fin;
si frente-libre entonces inicio
junta (n);
fin;
fin;
fin;

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

    inicia-ejecucion
    iniciar;
    mientras no orientado-al-este hacer camina;
    iniciar;
    quitaunos;
    iniciar;
    junta(0);
    divide (0);



        apagate;
    termina-ejecucion
finalizar-programa
