iniciar-programa

define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;
define-nueva-instruccion choca como mientras frente-libre hacer avanza;


 define-nueva-instruccion sube como inicio
     si junto-a-zumbador entonces inicio
         coge-zumbador;
         sube;
         deja-zumbador;
     fin sino inicio
         norte;
         avanza;
     fin;
 fin;

 define-nueva-instruccion resultado como inicio
     si junto-a-zumbador entonces inicio
         coge-zumbador;
         resultado;
         deja-zumbador;
     fin sino inicio
         si frente-libre entonces inicio
             avanza;
             resultado;
         fin;
     fin;
 fin;

 define-nueva-instruccion menor(n) como inicio
     si junto-a-zumbador y  no si-es-cero(n) entonces inicio
           coge-zumbador;
           menor(precede(n));
           deja-zumbador;
     fin sino inicio
         si no-junto-a-zumbador y no si-es-cero(n) entonces inicio
             (*Menor*)
             oeste;

         fin sino inicio
             si junto-a-zumbador entonces inicio
                 este;
                 (* es mayor pasalo pa'lla *)
             fin sino inicio
                 norte; (* Son iguales *)
             fin;
         fin;

     fin;
 fin;


 define-nueva-instruccion devuelve como inicio
     si junto-a-zumbador entonces inicio
         coge-zumbador;
         devuelve;
         deja-zumbador;
     fin sino inicio
         oeste; avanza;
     fin;
 fin;

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

 define-nueva-instruccion compara(n) como inicio
     si junto-a-zumbador entonces inicio
         coge-zumbador;
         compara(sucede(n));
     fin sino inicio
         repetir n veces deja-zumbador;
         oeste; avanza;
         menor(n);
         si orientado-al-norte entonces inicio
             este;
             avanza;
         fin sino inicio
             si orientado-al-este entonces inicio
                 pasa(0);
             fin sino inicio
                 este; avanza;
             fin;
         fin;
         este;
         avanza;
     fin;
 fin;

 define-nueva-instruccion ordena como inicio
     repetir 10 veces inicio
         mientras junto-a-zumbador hacer inicio
             compara(0);
         FIN;
         oeste; choca; este;
         mientras no-junto-a-zumbador hacer avanza;
         avanza;
     fin;
 fin;

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

     fin;
 fin;

 define-nueva-instruccion suma(n) como inicio
     si junto-a-zumbador entonces inicio
         coge-zumbador;
         suma(sucede(n));
     fin sino inicio
         avanza;
         repetir n veces deja-zumbador;
         norte;
         acumulado(0);
         sur;
         avanza;
         este;
     fin;
 fin;

    inicia-ejecucion
          avanza;
          mientras junto-a-zumbador hacer inicio
             oeste; choca; este;
             mientras no-junto-a-zumbador hacer avanza;
             avanza;
             ordena;
             oeste; choca; este;
             mientras no-junto-a-zumbador hacer avanza;
             suma(0);
             avanza;
          fin;
          oeste; avanza;
          si frente-bloqueado entonces inicio
              sube;
          fin;
          si no-orientado-al-norte entonces inicio
              norte; avanza; oeste;
              resultado;

          fin;

        apagate;
    termina-ejecucion
finalizar-programa
