iniciar-programa
   define-nueva-instruccion gira(n) como inicio
      repetir n veces
         gira-izquierda;
   fin;
   define-nueva-instruccion mueve(n) como inicio
      repetir n veces
         avanza;
   fin;
   define-nueva-instruccion sur como inicio
      mientras no-orientado-al-sur hacer
         gira(1);
   fin;
   define-nueva-instruccion oeste como inicio
      mientras no-orientado-al-oeste hacer
         gira(1);
   fin;
   define-nueva-instruccion deja(n) como inicio
      si no si-es-cero(n) entonces inicio
         deja-zumbador;
         deja(precede(n));
      fin;
   fin;
   define-nueva-instruccion actual(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         actual(sucede(n));
      fin
      sino inicio
         deja(n);
         oeste;
         mientras frente-libre hacer
            mueve(1);
         gira(3);
         mueve(4);
         deja(n);
         gira(2);
         mueve(4);
      fin;
   fin;
   define-nueva-instruccion Recoge(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         Recoge(sucede(n));
      fin
      sino inicio
         sur;
         mueve(3);
         gira(1);
         mientras junto-a-zumbador hacer
            mueve(1);
         deja(n);
      fin;
   fin;
   define-nueva-instruccion Suma(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         Suma(sucede(n));
      fin
      sino inicio
         mueve(1);
         deja(n);
         Recoge(0);
      fin;
   fin;
   define-nueva-instruccion Cominimos(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         mueve(1);
         coge-zumbador;
         si no-junto-a-zumbador entonces inicio
            gira(2);
            mueve(1);
            mientras junto-a-zumbador hacer
               coge-zumbador;
            deja(sucede(n));
            gira(2);
            mueve(1);
         fin
         sino inicio
            gira(2);
            mueve(1);
            gira(2);
            Cominimos(sucede(n));
         fin;
      fin
      sino inicio
         mueve(1);
         deja(n);
      fin;
   fin;
   define-nueva-instruccion busca(n) como inicio
      oeste;
      si junto-a-zumbador entonces inicio
         gira(3);
         mueve(1);
         deja(n);
         gira(2);
         Cominimos(0);
         gira(2);
         mueve(1);
         si junto-a-zumbador entonces inicio
            gira(2);
            mueve(1);
            deja(n);
            gira(2);
            mueve(1);
         fin
         sino inicio
            gira(2);
            mueve(1);
            gira(3);
            si frente-libre entonces inicio
               mueve(1);
               busca(n);
            fin
            sino inicio
               gira(3);
               mueve(2);
               si junto-a-zumbador entonces
                  mueve(1);
               deja(n);
               gira(2);
               mientras frente-libre hacer
                  mueve(1);
               gira(3);
            fin;
         fin;
      fin
      sino inicio
         si frente-libre entonces inicio
            mueve(1);
            busca(n);
         fin;
      fin;
   fin;
   define-nueva-instruccion Min(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         Min(sucede(n));
      fin
      sino inicio
         si orientado-al-norte entonces inicio
            gira(2);
            mueve(1);
            gira(3);
         fin;
         si frente-libre entonces inicio
            mueve(1);
            busca(n);
            si no-orientado-al-oeste entonces
               Min(0);
         fin
         sino inicio
            gira(3);
            mueve(3);
            deja(n);
            gira(2);
            mueve(3);
         fin;
      fin;
   fin;
   define-nueva-instruccion Resuelve(n) como inicio
      si junto-a-zumbador entonces inicio
         mueve(1);
         Resuelve(sucede(n));
      fin
      sino inicio
         repetir precede(n) veces inicio
            repetir 2 veces inicio
               oeste;
               mientras frente-libre hacer
                  mueve(1);
               gira(2);
               mueve(precede(n));
               gira(2);
               oeste;
               mientras no-junto-a-zumbador hacer
                  mueve(1);
               Min(0);
            fin;
            oeste;
            mientras frente-libre hacer
               mueve(1);
            gira(3);
            mueve(2);
            Suma(0);
            actual(0);
         fin;
      fin;
   fin;
   define-nueva-instruccion Abajo(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         Abajo(sucede(n));
      fin
      sino inicio
         mueve(3);
         deja(n);
      fin;
   fin;
   inicia-ejecucion
      Resuelve(0);
      gira(2);
      mueve(4);
      gira(2);
      Abajo(0);
      apagate;
   termina-ejecucion
finalizar-programa