iniciar-programa

    define-nueva-instruccion Norte como inicio
       mientras no-orientado-al-Norte hacer inicio
          gira-izquierda;
       fin;
    fin;

    define-nueva-instruccion Oeste como inicio
       mientras no-orientado-al-oeste hacer inicio
          gira-izquierda;
       fin;
    fin;

   define-nueva-instruccion Este como inicio
       mientras no-orientado-al-Este hacer inicio
          gira-izquierda;
       fin;
    fin;

    define-nueva-instruccion Sur como inicio
       mientras no-orientado-al-Sur hacer inicio
          gira-izquierda;
       fin;
    fin;

   define-nueva-instruccion pon(n) como inicio
     repetir n veces inicio
        deja-zumbador;
     fin;
   fin;

   define-nueva-instruccion deja como inicio
      si orientado-al-norte entonces inicio
         pon(3);
      fin;
      si orientado-al-este entonces inicio
         pon(4);
      fin;
      si orientado-al-sur entonces inicio
         pon(5);
      fin;
      si orientado-al-oeste entonces inicio
         pon(6);
      fin;
   fin;

   define-nueva-instruccion orienta( n ) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         orienta (sucede (n) );
      fin sino inicio
          si si-es-cero(precede(precede(precede(precede(precede(precede( n ))))))) entonces inicio
             oeste;
          fin;
          si si-es-cero(precede(precede(precede(precede(precede( n )))))) entonces inicio
             sur;
          fin;
          si si-es-cero(precede(precede(precede(precede( n ))))) entonces inicio
             este;
          fin;
          si si-es-cero(precede(precede(precede(n)))) entonces inicio
             norte;
          fin;
          repetir n veces inicio
             deja-zumbador;
          fin;

      fin;
   fin;

  define-nueva-instruccion compara(n) como inicio
     si no si-es-cero(n) entonces inicio
         si junto-a-zumbador entonces inicio
            coge-zumbador;
            compara( precede (n) );
            deja-zumbador;
         fin;
      fin sino inicio
        mientras junto-a-zumbador hacer inicio
           coge-zumbador;
        fin;
     fin;
  fin;

   define-nueva-instruccion verifica(n) como inicio
     si junto-a-zumbador entonces inicio
         coge-zumbador ;
         si junto-a-zumbador entonces inicio
            coge-zumbador;
            si junto-a-zumbador entonces inicio
               coge-zumbador;
               si junto-a-zumbador entonces inicio
                  coge-zumbador;
                  si junto-a-zumbador entonces inicio
                     coge-zumbador;
                     si junto-a-zumbador entonces inicio
                        coge-zumbador;
                        si junto-a-zumbador entonces inicio
                          repetir 6 veces inicio
                             deja-zumbador;
                          fin;
                          compara(n);
                        fin sino inicio
                          pon(6);
                        fin;
                     fin sino inicio
                        pon(5);
                     fin;
                  fin sino inicio
                     pon(4);
                  fin;
               fin sino inicio
                 pon(3)
               fin;
            fin sino inicio
                repetir n veces inicio
                   deja-zumbador;
                fin;
            fin;
         fin sino inicio
            deja-zumbador;
         fin;
     fin;

   fin;





   define-nueva-instruccion buscar (n) como inicio
       si junto-a-zumbador entonces inicio
          verifica(sucede(sucede(sucede(sucede(sucede(sucede(sucede(n))))))));
       fin sino inicio
          si no-junto-a-zumbador entonces inicio
             deja;
          fin;
          orienta(0);
          si orientado-al-norte entonces inicio
             si frente-libre entonces inicio
                avanza;
                buscar(n);
                sur;
                avanza;
             fin
          fin sino inicio
             norte;
             si frente-libre entonces inicio
                avanza;
                buscar( sucede(n) );
                sur;
                avanza;
             fin
          fin;

          orienta(0);
          si orientado-al-este entonces inicio
             si frente-libre entonces inicio
                avanza;
                buscar(n);
                oeste;
                avanza;
             fin
          fin sino inicio
             este;
             si frente-libre entonces inicio
                avanza;
                buscar( sucede(n) );
                oeste;
                avanza;
             fin
          fin;

          orienta(0);
          si orientado-al-sur entonces inicio
             si frente-libre entonces inicio
                avanza;
                buscar(n);
                norte;
                avanza;
             fin
          fin sino inicio
             sur;
             si frente-libre entonces inicio
                avanza;
                buscar( sucede(n) );
                norte;
                avanza;
             fin
          fin;

          orienta(0);
          si orientado-al-oeste entonces inicio
             si frente-libre entonces inicio
                avanza;
                buscar(n);
                este;
                avanza;
             fin
          fin sino inicio
             oeste;
             si frente-libre entonces inicio
                avanza;
                buscar( sucede(n) );
                este;
                avanza;
             fin
          fin;
          mientras junto-a-zumbador hacer inicio
             coge-zumbador;
          fin;

       fin;
   fin;


    define-nueva-instruccion ubicar(n) como inicio
       norte;
       repetir n veces inicio
          gira-izquierda;
       fin;
       si frente-libre entonces inicio
          avanza;
          si junto-a-zumbador entonces inicio
             gira-izquierda;
             gira-izquierda;
             avanza;
          fin sino inicio
             gira-izquierda;
             gira-izquierda;
             avanza;
             gira-izquierda;
             gira-izquierda;
             buscar(0);
          fin;
       fin;
    fin;

    define-nueva-instruccion camina como inicio
       si frente-libre entonces inicio
          avanza;
       fin sino inicio
          si orientado-al-este entonces inicio
             norte;
             avanza;
             oeste;
          fin sino inicio
             norte;
             avanza;
             este;       
          fin;
       fin;
    fin;

    define-nueva-instruccion esfin como inicio
       si junto-a-zumbador entonces inicio
          coge-zumbador;
          si junto-a-zumbador entonces inicio
            norte;
          fin;
       fin;
    fin;

    define-nueva-instruccion buscaFinal como inicio
      norte;
      repetir 2 veces inicio
         gira-izquierda;
         mientras frente-libre hacer inicio
            avanza;
         fin;
      fin;

      esfin;
      mientras no-orientado-al-norte hacer inicio
          camina;
          esfin;
      fin;
      repetir 6 veces inicio
         coge-zumbador;
      fin;
    fin;

    inicia-ejecucion
        ubicar(0);
        ubicar(1);
        ubicar(2);
        ubicar(3);
        buscafinal;
        apagate;
    termina-ejecucion
finalizar-programa
