iniciar-programa
define-nueva-instruccion gira(x) como
inicio
   repetir x veces
      gira-izquierda;
fin;
define-nueva-instruccion cabe(x) como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      si no si-es-cero(precede(x)) entonces
         cabe(precede(x));
      deja-zumbador;
   fin
   sino
      gira(1);
fin;
define-nueva-instruccion minimo(x) como
inicio
   si no junto-a-zumbador entonces
   inicio
      repetir x veces
         deja-zumbador;
   fin
   sino
   inicio
       si orientado-al-norte o orientado-al-sur entonces
       inicio
          cabe(x);
          si orientado-al-norte o orientado-al-sur entonces
          inicio
             mientras junto-a-zumbador hacer
                coge-zumbador;
             repetir x veces
                deja-zumbador;
          fin
          sino
             repetir 3 veces
                gira-izquierda;
      fin
      sino
      inicio
          cabe(x);
          si orientado-al-este o orientado-al-oeste entonces
          inicio
             mientras junto-a-zumbador hacer
                coge-zumbador;
             repetir x veces
                deja-zumbador;
          fin
          sino
             repetir 3 veces
                gira-izquierda;
      fin;
   fin;
fin;
define-nueva-instruccion div(x) como
inicio
  si orientado-al-norte o orientado-al-sur entonces
  inicio
      cabe(x);
      si orientado-al-norte o orientado-al-sur entonces
      inicio
         repetir x veces
            coge-zumbador;
         si junto-a-zumbador entonces
         div(x);
         repetir x veces
            deja-zumbador;
      fin;
  fin
  sino
  inicio
     cabe(x);
     si orientado-al-este o orientado-al-oeste entonces
     inicio
          repetir x veces
            coge-zumbador;
         si junto-a-zumbador entonces
         div(x);
         repetir x veces
            deja-zumbador;
     fin;
   fin;
fin;
define-nueva-instruccion dfs(n) como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      dfs(n);
      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
                minimo(sucede(n));
             fin
             sino
             inicio
                si junto-a-zumbador entonces
                inicio
                   si orientado-al-norte o orientado-al-sur entonces
                   inicio
                      div(sucede(n));
                      si orientado-al-norte o orientado-al-sur entonces
                         dfs(sucede(n))
                      sino
                         gira(3);
                   fin
                   sino
                   inicio
                       div(sucede(n));
                      si orientado-al-este o orientado-al-oeste entonces
                         dfs(sucede(n))
                      sino
                         gira(3);
                   fin;
                fin;
             fin;
             gira(2);
             avanza;
             gira(2);
         fin;
         gira-izquierda;
      fin;
   fin;
fin;
inicia-ejecucion
   repetir 4 veces
   inicio
      si frente-libre entonces
      inicio
         avanza;
         si frente-bloqueado y izquierda-bloqueada y derecha-bloqueada entonces
         inicio
            deja-zumbador;
            apagate;
         fin;
         dfs(1);
         gira(2);
         avanza;
         gira(2);
      fin;
      gira-izquierda;
   fin;
    apagate;
termina-ejecucion
finalizar-programa
