iniciar-programa
 define-nueva-instruccion gira(n) como
 inicio
      repetir n veces
         gira-izquierda;
fin;


   define-nueva-instruccion arriba como
   inicio
      si frente-libre entonces
         avanza
      sino
      si izquierda-libre entonces
      inicio
         gira(1);
         avanza;
         gira(1);
         mientras frente-libre hacer
            avanza;
         gira(2);
      fin
      sino
         gira(1);
   fin;
   define-nueva-instruccion esquina como
   inicio
      mientras no orientado-al-oeste hacer
          gira-izquierda;
      mientras frente-libre hacer
            avanza;
         gira(1);
        mientras frente-libre hacer
            avanza;
         gira(1);
      fin;
    define-nueva-instruccion acaba(n) como
   inicio
       esquina;
       mientras junto-a-zumbador hacer
          coge-zumbador;
       repetir n veces
         deja-zumbador;
       apagate;
   fin;
   define-nueva-instruccion recorre(n) como
   inicio
      si si-es-cero(n) entonces
         acaba(n);
      mientras no-orientado-al-norte hacer
      inicio
         mientras frente-libre y no junto-a-zumbador hacer
           avanza;
         si junto-a-zumbador entonces
         inicio
           coge-zumbador;
           si no-junto-a-zumbador entonces
           inicio
              arriba;
              recorre(precede(n));
           fin
           sino
             arriba;
         fin
           sino
              arriba;
      fin;
      acaba(n);
   fin;
   define-nueva-instruccion dfs2 como
   inicio
      si junto-a-zumbador entonces
      inicio
         coge-zumbador;
         si junto-a-zumbador entonces
         inicio
            coge-zumbador;
            si junto-a-zumbador entonces
            inicio
               repetir 2 veces
                  deja-zumbador;
               sal-de-instruccion;
             fin;
         fin
         sino
         inicio
           deja-zumbador;
            sal-de-instruccion;
         fin;
      fin
      sino
         sal-de-instruccion;
      repetir 4 veces
      inicio
         si frente-libre entonces
            inicio
                avanza;
                dfs2;
                gira(2);
                avanza;
                gira(2);
            fin;
          gira-izquierda;
      fin;
   fin;
   define-nueva-instruccion tortas(n) como
   inicio
      si junto-a-zumbador entonces
      inicio
         coge-zumbador;
         coge-zumbador;
         tortas(sucede(n));
      fin
      sino
      inicio
         esquina;
         recorre(n);
      fin;

   fin;
    inicia-ejecucion
    dfs2;
    mientras algun-zumbador-en-la-mochila hacer
       deja-zumbador;
    tortas(0);
       apagate;
    termina-ejecucion
finalizar-programa
