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 junta como inicio
   si junto-a-zumbador entonces inicio
      mientras junto-a-zumbador hacer
         coge-zumbador;
      mientras frente-libre hacer
         avanza;
      oeste;
      mientras junto-a-zumbador hacer
         avanza;
      deja-zumbador;
      deja-zumbador;
      mientras junto-a-zumbador y frente-libre hacer
         avanza;
      si no-junto-a-zumbador entonces inicio
         mientras frente-libre y no-junto-a-zumbador hacer
            avanza;
         si junto-a-zumbador entonces inicio
            mientras frente-libre hacer
               avanza;
            este;
            junta;
         fin
         sino inicio
            si frente-bloqueado entonces
               este;
         fin;
      fin;
   fin
   sino inicio
      si frente-libre entonces inicio
         avanza;
         junta;
      fin
      sino inicio
         oeste;
         mientras frente-libre hacer
            avanza;
         este;
      fin;
   fin;
fin;
define-nueva-instruccion fila(n) como inicio
   si junto-a-zumbador entonces inicio
      coge-zumbador;
      si junto-a-zumbador entonces inicio
         deja-zumbador;
         si frente-libre entonces inicio
            avanza;
            fila(n);
         fin
         sino inicio
            oeste;
            mientras frente-libre hacer
               avanza;
            este;
            junta;
            repetir n veces inicio
               deja-zumbador;
               avanza;
            fin;
         fin;
      fin
      sino inicio
         si frente-libre entonces inicio
            avanza;
            fila(sucede(n));
         fin
         sino inicio
            oeste;
            mientras frente-libre hacer
               avanza;
            este;
            junta;
            repetir sucede(n) veces inicio
                  deja-zumbador;
                  si frente-libre entonces
                     avanza;
            fin;
         fin;
      fin;
   fin
   sino inicio
      si frente-libre entonces inicio
         avanza;
         fila(n);
      fin
      sino inicio
         oeste;
         mientras frente-libre hacer
            avanza;
         este;
         junta;
         repetir n veces inicio
               deja-zumbador;
               si frente-libre entonces
                  avanza;
         fin;
      fin;
   fin;
fin;
    inicia-ejecucion
       oeste;
       mientras frente-libre hacer
          avanza;
       este;
       fila(0);
        apagate;
    termina-ejecucion
finalizar-programa