iniciar-programa
 define-nueva-instruccion gira(n) como
 inicio
      repetir n veces
         gira-izquierda;
fin;
   define-nueva-instruccion compara(n) como
   inicio
      si junto-a-zumbador entonces
      inicio
         coge-zumbador;
         si si-es-cero(n) entonces
            gira(1)
         sino
         compara(precede(n));
         deja-zumbador;
      fin;
   fin;
   define-nueva-instruccion arribajo(n) como
   inicio
      si frente-libre entonces
      inicio
        avanza;
        mientras junto-a-zumbador hacer
           coge-zumbador;
        arribajo(sucede(n));
        deja-zumbador;
      fin
      sino
      inicio
         gira(2);
         mientras no-junto-a-zumbador hacer
            avanza;
      fin;
   fin;

   define-nueva-instruccion lleva como
   inicio
      si junto-a-zumbador entonces
      inicio
         coge-zumbador;
         lleva;
         deja-zumbador;
      fin
      sino
      inicio
         avanza;
         coge-zumbador;
      fin;
   fin;
   define-nueva-instruccion acaba(n) como
   inicio
      si junto-a-zumbador entonces
      inicio
         coge-zumbador;
         acaba(sucede(n));
      fin
      sino
      inicio
         avanza;
         repetir n veces
         inicio
            si junto-a-zumbador entonces
               coge-zumbador
            sino
               apagate;
         fin;
         apagate;
      fin;
   fin;
   define-nueva-instruccion comAba(n) como
   inicio
      si frente-libre entonces
      inicio
         avanza;
          mientras junto-a-zumbador hacer
            coge-zumbador;
         si si-es-cero(n) entonces
         inicio
            gira(2);
            mientras no-junto-a-zumbador hacer
               avanza;
            mientras no-orientado-al-oeste hacer
            gira-izquierda;
            avanza;
            gira(2);
            acaba(0);
         fin
         sino
         inicio
         comAba(precede(n));
         deja-zumbador;
         fin;
      fin
      sino
      si orientado-al-sur entonces
      inicio
         gira(2);
         mientras no-junto-a-zumbador hacer
            avanza;
         gira(3);
         comAba(n);
      fin
      sino
      inicio
         gira(2);
         mientras no-junto-a-zumbador hacer
            avanza;
         mientras junto-a-zumbador hacer
            coge-zumbador;
         deja-zumbador;
      fin;
   fin;
   define-nueva-instruccion come(n) como
   inicio
      si junto-a-zumbador entonces
      inicio
         coge-zumbador;
         come(sucede(n));
      fin
      sino
      inicio
         repetir n veces
            deja-zumbador;
         comAba(precede(n));
      fin;
   fin;
   define-nueva-instruccion puma como
   inicio
      deja-zumbador;
      mientras no-orientado-al-este hacer
      gira(1);
      arribajo(0);
      gira(3);
      arribajo(0);
      come(0);
      avanza;
      gira(2);
      acaba(0);
      apagate;
   fin;

   define-nueva-instruccion cero como
   inicio
      si junto-a-zumbador entonces
      inicio
         repetir 4 veces
         inicio
           si frente-libre entonces
           inicio
             avanza;
             si junto-a-zumbador entonces
             inicio
                coge-zumbador;
                si junto-a-zumbador entonces
                   deja-zumbador
                sino
                  puma;
             fin;
             gira(2);
             avanza;
             gira(2);
            fin;
            gira-izquierda;
         fin;
      fin
      sino
         sal-de-instruccion;
      mientras junto-a-zumbador hacer
                coge-zumbador;
      repetir 4 veces
      inicio
         si frente-libre entonces
         inicio
            avanza;
            cero;
            gira(2);
            avanza;
            gira(2);
         fin;
         gira-izquierda;
      fin;
   fin;
   define-nueva-instruccion g(n) como
   inicio
      repetir 4 veces
      inicio
         si orientado-al-norte entonces
         inicio
            compara(n);
            si no orientado-al-norte entonces
            inicio
               mientras junto-a-zumbador hacer
                  coge-zumbador;
                gira(3);
            fin;
          fin;
          gira-izquierda;
      fin;
   fin;
   define-nueva-instruccion dfs(n) como
   inicio
      si junto-a-zumbador entonces
      inicio
         coge-zumbador;
         si no junto-a-zumbador entonces
         inicio
            deja-zumbador;
            sal-de-instruccion;
         fin
         sino
            deja-zumbador;
         g(n);
         si junto-a-zumbador entonces
            sal-de-instruccion;
      fin;
      repetir n veces
      deja-zumbador;
      repetir 4 veces
      inicio
         si frente-libre entonces
            inicio
                avanza;
                dfs(sucede(n));
                gira(2);
                avanza;
                gira(2);
            fin;
          gira-izquierda;
      fin;
   fin;
inicia-ejecucion
   deja-zumbador;
   deja-zumbador;
   repetir 4 veces
   inicio
      si frente-libre entonces
      inicio
         avanza;
         dfs(3);
         gira(2);
         avanza;
         gira(2);
      fin;
      gira-izquierda;
   fin;
   cero;
   apagate;
   termina-ejecucion
finalizar-programa
