iniciar-programa
define-nueva-instruccion lleva(n) como
inicio
    repetir 2 veces
      gira-izquierda;
     avanza;
    repetir n veces
      deja-zumbador;
    repetir 2 veces
      gira-izquierda;
    avanza;
fin;
define-nueva-instruccion trae como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      trae;
      deja-zumbador;
   fin
   sino
   inicio
      gira-izquierda;
      gira-izquierda;
      avanza;
   fin
fin;
define-nueva-instruccion dfs(n) como
inicio
   repetir 3 veces
      gira-izquierda;
   repetir 3 veces
   inicio
      si frente-libre entonces
      inicio
         avanza;
         si junto-a-zumbador entonces
         inicio
            coge-zumbador;
            si junto-a-zumbador entonces
            inicio
               coge-zumbador;
               si junto-a-zumbador entonces
               inicio
                  coge-zumbador;
                  gira-izquierda;
                  gira-izquierda;
                  avanza;
                  trae;
                  mientras no orientado-al-oeste hacer
                     gira-izquierda;
                  trae;
                  coge-zumbador;
                  apagate;
               fin
               sino
               inicio
                  si no si-es-cero(n) entonces
                  inicio
                     gira-izquierda;
                     gira-izquierda;
                     avanza;
                     trae;
                     coge-zumbador;
                     dfs(precede(n));
                     trae;
                     deja-zumbador;
                     lleva(2);
                     gira-izquierda;
                     gira-izquierda;
                  fin
                  sino
                  inicio
                     repetir 2 veces
                        deja-zumbador;
                     gira-izquierda;
                     gira-izquierda;
                     avanza;
                  gira-izquierda;
                  gira-izquierda;
                  fin;
               fin;
            fin
            sino
            inicio
               gira-izquierda;
               gira-izquierda;
               avanza;
               trae;
               dfs(n);
               trae;
                     lleva(1);
                     gira-izquierda;
                     gira-izquierda;

            fin;
         fin
         sino
         inicio
            gira-izquierda;
            gira-izquierda;
            avanza;
            gira-izquierda;
            gira-izquierda;
         fin;
       fin;
       gira-izquierda;
   fin;
   gira-izquierda;
   gira-izquierda;
fin;

define-nueva-instruccion cuenta1(n) como
inicio
   si frente-libre o frente-bloqueado entonces
   inicio
      avanza;
      gira-izquierda;
      gira-izquierda;
      coge-zumbador;
      si no-junto-a-zumbador entonces
      inicio
         avanza;
         trae;
         dfs(n);
         trae;
         repetir 2 veces
            gira-izquierda;
         avanza;
         deja-zumbador;
         repetir 2 veces
            gira-izquierda;
         avanza;
         repetir 2 veces
         gira-izquierda;
         cuenta1(sucede(n));
      fin
      sino
      inicio
         coge-zumbador;
         avanza;
         trae;
         coge-zumbador;
         dfs(n);
         trae;
         deja-zumbador;
         repetir 2 veces
            gira-izquierda;
         avanza;
         repetir 2 veces
            deja-zumbador;
         repetir 2 veces
            gira-izquierda;
         avanza;
         repetir 2 veces
            gira-izquierda;
         cuenta1(sucede(n));
      fin;
   fin;
 fin;
    inicia-ejecucion
       cuenta1(0);
       apagate;
    termina-ejecucion
finalizar-programa
