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

define-nueva-instruccion divide(k) como
inicio
  si junto-a-zumbador entonces
  inicio
    si orientado-al-este o orientado-al-oeste entonces
    inicio
      compara(k);
      si orientado-al-este o orientado-al-oeste entonces
      inicio
        repetir k veces
        coge-zumbador;
        divide(k);
        repetir k veces deja-zumbador;
      fin;
    fin
    sino
    inicio
    compara(k);
    si orientado-al-norte o orientado-al-sur entonces
    inicio
      repetir k veces coge-zumbador;
      divide(k);
      repetir k veces deja-zumbador;
    fin;
    fin;
 fin;
fin;
define-nueva-instruccion dfs(x) como
inicio
   si junto-a-zumbador entonces
   inicio
     coge-zumbador;
     dfs(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
             inicio
             repetir sucede(x) veces deja-zumbador;
           fin
           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
                compara(sucede(x));
                 si orientado-al-sur o orientado-al-norte 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

           sino
           si junto-a-zumbador entonces
           inicio
             si orientado-al-este o orientado-al-oeste entonces
             inicio
               divide(sucede(x));
               si orientado-al-este o orientado-al-oeste entonces
                 dfs(sucede(x))
               sino
               repetir 3 veces gira-izquierda;
             fin
               sino
               inicio
                  divide(sucede(x));
                  si orientado-al-norte o orientado-al-sur entonces
                  dfs(sucede(x))
                 sino
                 repetir 3 veces gira-izquierda
                 fin;
              fin;
           repetir 2 veces gira-izquierda;
           avanza;
           repetir 2 veces
           gira-izquierda;
         fin;
         gira-izquierda;
    fin;
  fin;
 fin;
     inicia-ejecucion
     dfs(0);
        apagate;
    termina-ejecucion
finalizar-programa
