iniciar-programa
define-nueva-instruccion gira-derecha como
inicio
    repetir 3 veces
       gira-izquierda;
fin;
define-nueva-instruccion mira-este como
inicio
    mientras no-orientado-al-este hacer
      gira-izquierda;
fin;
define-nueva-instruccion mira-oeste como
inicio
    mientras no-orientado-al-oeste hacer
       gira-izquierda;
fin;
define-nueva-instruccion mira-norte como
inicio
    mientras no-orientado-al-norte hacer
        gira-izquierda;
fin;
define-nueva-instruccion mira-sur como
inicio
    mientras no-orientado-al-sur hacer
       gira-izquierda;
fin;
define-nueva-instruccion paso-atras como
inicio
    repetir 2 veces
       gira-izquierdA;
    avanza;
    repetir 2 veces
       gira-izquierda;
fin;
define-nueva-instruccion copia(m) como
inicio
    si junto-a-zumbador entonces
    inicio
       coge-zumbador;
       copia(sucede(m));
       deja-zumbador;
    fin
    sino
    inicio
       repetir m veces
          deja-zumbador;
       paso-atras;
    fin;
fin;
define-nueva-instruccion compara(m) como
inicio
    si no(si-es-cero(m)) y junto-a-zumbador entonces
    inicio
        coge-zumbador;
        compara(precede(m));
           deja-zumbador;
    fin
    sino
    inicio
       mientras junto-a-zumbador hacer
          coge-zumbador;
    fin;
fin;
define-nueva-instruccion divisible(m) como
inicio
     mientras junto-a-zumbador hacer
     inicio
         repetir sucede(m) veces
         inicio
             si junto-a-zumbador entonces
                coge-zumbador
             sino
                 mira-oeste;
         fin;
     fin;
fin;
define-nueva-instruccion divisibleoes(m) como
inicio
    mientras junto-a-zumbador hacer
    inicio
        repetir sucede(m) veces
        inicio
            si junto-a-zumbador entonces
               coge-zumbador
            sino
               mira-sur;
        fin;
   fin;
fin;
define-nueva-instruccion busca(n) como
inicio
  si junto-a-zumbador y (frente-libre o izquierda-libre o derecha-libre) entonces
  inicio
           coge-zumbador;
           busca(n);
           deja-zumbador;
   fin
   sino
   inicio
   (*preguntar si es la casilla del final*)
   si frente-libre o derecha-libre o izquierda-libre entonces
   inicio

       si frente-libre entonces
       inicio
           avanza;
           si frente-bloqueado y derecha-bloqueada y izquierda-bloqueada entonces
           inicio
              busca(sucede(n));
           fin
           sino
           inicio
           copia(0);(*checar si es divisible*)
           si orientado-al-norte y junto-a-zumbador entonces
           inicio
               divisible(n);
               si orientado-al-norte entonces
               inicio
                  avanza;
                  busca(sucede(n));
               fin
               sino
               inicio
                   mira-norte;
                   avanza;
               fin;
           fin;
           si orientado-al-sur y junto-a-zumbador entonces
           inicio
               divisible(n);
               si orientado-al-sur entonces
               inicio
                  avanza;
                  busca(sucede(n));
               fin
               sino
               inicio
                   mira-sur;
                   avanza;
               fin;
           fin;
           si orientado-al-este y junto-a-zumbador entonces
           inicio
               divisible(n);
               si orientado-al-este entonces
               inicio
                  avanza;
                  busca(sucede(n));
               fin
               sino
               inicio
                   mira-este;
                   avanza;
               fin;
           fin;
           si orientado-al-oeste y junto-a-zumbador entonces
           inicio
               divisibleoes(n);
               si orientado-al-oeste entonces
               inicio
                   avanza;
                   busca(sucede(n));
               fin
               sino
               inicio
                   mira-oeste;
                   avanza;
               fin;
           fin;
           si no-junto-a-zumbador entonces
              avanza;
           fin;
           paso-atras;
       fin;
       si izquierda-libre entonces
       inicio
           gira-izquierdA;
           avanza;
           si frente-bloqueado y derecha-bloqueada y izquierda-bloqueada entonces
           inicio
               busca(sucede(n));
           fin
           sino
           inicio
           copia(0);(*checar si es divisible*)
           si orientado-al-norte y junto-a-zumbador entonces
           inicio
               divisible(n);
               si orientado-al-norte entonces
               inicio
                  avanza;
                  busca(sucede(n));
               fin
               sino
               inicio
                   mira-norte;
                   avanza;
               fin;
           fin;
           si orientado-al-sur y junto-a-zumbador entonces
           inicio
               divisible(n);
               si orientado-al-sur entonces
               inicio
                  avanza;
                  busca(sucede(n));
               fin
               sino
               inicio
                   mira-sur;
                   avanza;
               fin;
           fin;
           si orientado-al-este y junto-a-zumbador entonces
           inicio
               divisible(n);
               si orientado-al-este entonces
               inicio
                  avanza;
                  busca(sucede(n));
               fin
               sino
               inicio
                   mira-este;
                   avanza;
               fin;
           fin;
           si orientado-al-oeste y junto-a-zumbador entonces
           inicio
               divisibleoes(n);
               si orientado-al-oeste entonces
               inicio
                   avanza;
                   busca(sucede(n));
               fin
               sino
               inicio
                   mira-oeste;
                   avanza;
               fin;
           fin;
           si no-junto-a-zumbador entonces
              avanza;
           fin;
           paso-atras;
           gira-derecha;
       fin;
       si derecha-libre entonces
       inicio
           gira-derecha;
           avanza;
           si frente-bloqueado y derecha-bloqueada y izquierda-bloqueada entonces
           inicio
               busca(sucede(n));
           fin
           sino
           inicio
           copia(0);(*checar si es divisible*)
           si orientado-al-norte y junto-a-zumbador entonces
           inicio
               divisible(n);
               si orientado-al-norte entonces
               inicio
                  avanza;
                  busca(sucede(n));
               fin
               sino
               inicio
                   mira-norte;
                   avanza;
               fin;
           fin;
           si orientado-al-sur y junto-a-zumbador entonces
           inicio
               divisible(n);
               si orientado-al-sur entonces
               inicio
                  avanza;
                  busca(sucede(n));
               fin
               sino
               inicio
                   mira-sur;
                   avanza;
               fin;
           fin;
           si orientado-al-este y junto-a-zumbador entonces
           inicio
               divisible(n);
               si orientado-al-este entonces
               inicio
                  avanza;
                  busca(sucede(n));
               fin
               sino
               inicio
                   mira-este;
                   avanza;
               fin;
           fin;
           si orientado-al-oeste y junto-a-zumbador entonces
           inicio
               divisibleoes(n);
               si orientado-al-oeste entonces
               inicio
                   avanza;
                   busca(sucede(n));
               fin
               sino
               inicio
                   mira-oeste;
                   avanza;
               fin;
           fin;
           si no-junto-a-zumbador entonces
              avanza;
           fin;
           paso-atras;
           gira-izquierda;
       fin;
   fin
   sino
   inicio
       (*revisar si mi camino es menor*)
       si junto-a-zumbador entonces
       inicio
           compara(n);
       fin
       sino
           repetir n veces
               deja-zumbador;
   fin;
   fin;
fin;
    inicia-ejecucion
        mira-norte;
        busca(0);
        mira-sur;
        busca(0);
        apagate;
    termina-ejecucion
finalizar-programa
