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

  fin;
define-nueva-instruccion divide(n) como
  inicio
     repetir n veces
       inicio
          si junto-a-zumbador entonces
            coge-zumbador
          sino
             inicio
                gira-izquierda;
                repetir n veces deja-zumbador;
                si junto-a-zumbador entonces coge-zumbador;
                mientras no-orientado-al-norte hacer
                  gira-izquierda;
             fin;

       fin;

    si junto-a-zumbador y no orientado-al-norte  y no-orientado-al-sur entonces
       divide(n);
     si no-junto-a-zumbador entonces
       mientras no orientado-al-sur hacer gira-izquierda;
       repetir n veces deja-zumbador;
   fin;

 define-nueva-instruccion orienta (x) como
    inicio
    si orientado-al-este entonces
       inicio
         divide(x);
         si orientado-al-norte entonces
           inicio
           mientras no-orientado-al-norte hacer gira-izquierda;
           repetir x veces coge-zumbador;
          fin
         sino
          mientras no-orientado-al-este hacer gira-izquierda;

        sal-de-instruccion;
      fin;
   si orientado-al-oeste entonces
       inicio
         divide(x);
          si orientado-al-norte entonces
            inicio
             mientras no-orientado-al-sur hacer gira-izquierda;
             repetir x veces coge-zumbador;
             fin
         sino
            mientras no-orientado-al-oeste hacer gira-izquierda;

         sal-de-instruccion;
       fin;
   si orientado-al-sur entonces
      inicio
        mientras no-orientado-al-este hacer gira-izquierda;
        divide(x);
        si orientado-al-norte entonces
          inicio
          mientras no-orientado-al-este hacer gira-izquierda;
          repetir x veces coge-zumbador;
          fin
        sino
          mientras no-orientado-al-sur hacer gira-izquierda;

        sal-de-instruccion;
     fin;
  si orientado-al-norte entonces
     inicio
      mientras no-orientado-al-este hacer gira-izquierda;
        divide(x);
       si orientado-al-norte entonces
         inicio
          mientras no-orientado-al-oeste hacer gira-izquierda;
          repetir x veces coge-zumbador;
          fin
          sino
         mientras no-orientado-al-norte hacer gira-izquierda;
      sal-de-instruccion;
     fin;
   fin;


 define-nueva-instruccion busca(x) como
   inicio
    si junto-a-zumbador entonces
      inicio
       coge-zumbador;
       busca(x);
       deja-zumbador;
      fin
      sino
      inicio
     repetir 4 veces
       inicio
          si frente-libre entonces
            inicio
             avanza;
                si frente-bloqueado y izquierda-bloqueada y derecha-bloqueada entonces
                   inicio
                    si no-junto-a-zumbador entonces
                       repetir sucede(x) veces deja-zumbador
                     sino
                       inicio
                         si orientado-al-este o orientado-al-oeste entonces
                          inicio
                            compara(sucede(x));
                            si orientado-al-este o orientado-al-oeste entonces
                              inicio
                                mientras junto-a-zumbador hacer coge-zumbador;
                               repetir sucede(x) veces deja-zumbador;
                              fin
                            sino
                             repetir 3 veces gira-izquierda;
                          fin
                          sino
                           inicio
                             si orientado-al-norte o orientado-al-sur entonces
                                inicio
                                  compara(sucede(x));
                                 si orientado-al-norte o orientado-al-sur entonces
                                    inicio
                                      mientras junto-a-zumbador hacer coge-zumbador;
                                      repetir sucede(x) veces deja-zumbador;
                                    fin
                                  sino
                                    repetir 3 veces gira-izquierda;
                                 fin;
                           fin;
                       fin;

                   fin
                 sino
                   si junto-a-zumbador entonces
                    inicio
                      si orientado-al-este o orientado-al-oeste entonces
                        inicio
                         orienta(sucede(x));
                         si orientado-al-este o orientado-al-oeste entonces
                           busca(sucede(x))
                          sino
                           repetir 3 veces gira-izquierda;
                       fin
                    sino
                      inicio
                          orienta(sucede(x));
                         si orientado-al-norte o orientado-al-sur entonces
                           busca(sucede(x))
                          sino
                           repetir 3 veces gira-izquierda;

                     fin;
                   fin;
              repetir 2 veces gira-izquierda;
              si frente-libre entonces avanza;
              repetir 2  veces gira-izquierda;
           fin;
          gira-izquierda;
       fin;
     fin;
   fin;
   inicia-ejecucion
     busca(0);

        apagate;
    termina-ejecucion
finalizar-programa
