iniciar-programa
define-nueva-instruccion gira(n) como inicio
   repetir n veces
      gira-izquierda;
fin;
define-nueva-instruccion norte como inicio
   mientras no-orientado-al-norte hacer
      gira(1);
fin;
define-nueva-instruccion sur como inicio
   mientras no-orientado-al-sur hacer
      gira(1);
fin;
define-nueva-instruccion este como inicio
   mientras no-orientado-al-este hacer
      gira(1);
fin;
define-nueva-instruccion oeste como inicio
   mientras no-orientado-al-oeste hacer
      gira(1);
fin;
define-nueva-instruccion compara(n) como inicio
   si no-junto-a-zumbador entonces inicio
      avanza;
      compara(sucede(n));
   fin
   sino inicio
      mientras junto-a-zumbador hacer
         avanza;
      repetir n veces inicio
         si no-junto-a-zumbador entonces inicio
            avanza;
         fin
         sino inicio
            mientras junto-a-zumbador hacer
               coge-zumbador;
            deja-zumbador;
            apagate;
         fin;
      fin;
      apagate;
   fin;
fin;
define-nueva-instruccion cuenta(n) como inicio
   si junto-a-zumbador entonces inicio
      coge-zumbador;
      si junto-a-zumbador entonces inicio
         coge-zumbador;
      fin
      sino inicio
         deja-zumbador;
         avanza;
         si junto-a-zumbador entonces inicio
            cuenta(sucede(n));
         fin
         sino inicio
            norte;
            cuenta(sucede(n));
         fin;
      fin;
   fin
   sino inicio
      si no-orientado-al-norte entonces inicio
         si no-junto-a-zumbador entonces inicio
            avanza;
            cuenta(sucede(n));
            si no-junto-a-zumbador entonces inicio
               deja-zumbador;
               apagate;
            fin
            sino inicio
               oeste;
               mientras frente-libre hacer
                  avanza;
               este;
               compara(0);
               apagate;
            fin;
         fin;
      fin;
      si frente-libre y no-junto-a-zumbador y orientado-al-norte entonces inicio
         este;
         avanza;
         norte;
         si no-junto-a-zumbador entonces
            cuenta(sucede(n));
      fin;
      si no-orientado-al-sur entonces inicio
         oeste;
         mientras frente-libre hacer
            avanza;
         norte;
         mientras frente-libre hacer
            avanza;
         este;
         mientras frente-libre hacer
            avanza;
         sur;
         mientras frente-libre hacer
            avanza;
         este;
         avanza;
         repetir 2 veces
            coge-zumbador;
         repetir n veces
            deja-zumbador;
         sur;
      fin;
   fin;
fin;
define-nueva-instruccion deja como inicio
   norte;
   mientras frente-libre hacer
      avanza;
   este;
   mientras frente-libre hacer
      avanza;
   sur;
   mientras frente-libre hacer
      avanza;
   este;
   avanza;
   repetir 2 veces
      deja-zumbador;
fin;
define-nueva-instruccion gol(n) como inicio
   si junto-a-zumbador entonces inicio
      coge-zumbador;
      gol(sucede(n));
   fin
   sino inicio
      si orientado-al-este entonces inicio
         oeste;
         mientras frente-libre hacer
            avanza;
         este;
         repetir precede(n) veces
            avanza;
         deja-zumbador;
         avanza;
         mientras no-junto-a-zumbador hacer
            avanza;
         norte;
         gol(0);
      fin;
      si orientado-al-norte entonces inicio
         oeste;
         mientras no-junto-a-zumbador y frente-libre hacer
            avanza;
         norte;
         repetir precede(n) veces inicio
            si frente-libre entonces inicio
               avanza;
               deja-zumbador;
            fin;
         fin;
         sur;
         mientras frente-libre hacer
            avanza;
         este;
         avanza;
         mientras no-junto-a-zumbador hacer
            avanza;
         oeste;
         gol(0);
      fin;
      si orientado-al-oeste entonces inicio
         mientras frente-libre y no-junto-a-zumbador hacer
            avanza;
         este;
         mientras junto-a-zumbador y orientado-al-este hacer inicio
            este;
            repetir precede(n) veces inicio
               si frente-libre entonces inicio
                  avanza;
                  deja-zumbador;
               fin;
            fin;
            oeste;
            repetir precede(n) veces
               si frente-libre entonces
                  avanza;
            norte;
            si frente-libre entonces inicio
               avanza;
               este;
            fin
            sino inicio
               sur;
               mientras frente-libre hacer
                  avanza;
               oeste;
               mientras frente-libre hacer
                  avanza;
               este;
               deja;
               oeste;
               mientras frente-libre hacer
                  avanza;
               este;
               cuenta(1);
               apagate;
            fin;
            si no-junto-a-zumbador entonces inicio
               sur;
               mientras frente-libre hacer
                  avanza;
               oeste;
               mientras frente-libre hacer
                  avanza;
               este;
               deja;
               oeste;
               mientras frente-libre hacer
                  avanza;
               este;
               cuenta(1);
               apagate;
            fin;
         fin;
      fin;
   fin;
fin;
    inicia-ejecucion
       oeste;
       mientras frente-libre hacer
          avanza;
       este;
       mientras no-junto-a-zumbador hacer
          avanza;
       gol(0);
       apagate;
    termina-ejecucion
finalizar-programa