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 revisa(n) como inicio
   si frente-libre entonces inicio
      avanza;
      si no-junto-a-zumbador entonces
         revisa(n);
   fin
   sino inicio
      si orientado-al-este y frente-bloqueado entonces inicio
         norte;
         si no-junto-a-zumbador entonces inicio
            revisa(n);
         fin
         sino inicio
            si frente-libre entonces
               avanza;
         fin;
      fin;
      si orientado-al-norte y frente-bloqueado entonces inicio
         oeste;
         si no-junto-a-zumbador entonces inicio
            revisa(n);
         fin
         sino inicio
            si frente-libre entonces
               avanza;
         fin;
      fin;
      si orientado-al-oeste y frente-bloqueado entonces inicio
         sur;
         si no-junto-a-zumbador entonces inicio
            revisa(n);
         fin
         sino inicio
            si frente-libre entonces
               avanza;
         fin;
      fin;
      si orientado-al-sur y frente-bloqueado entonces inicio
         este;
         si no-junto-a-zumbador entonces inicio
            repetir 4 veces inicio
               mientras frente-libre y no-junto-a-zumbador hacer
                  avanza;
               si frente-bloqueado entonces
                  gira(1);
            fin;
            si no-junto-a-zumbador entonces inicio
               oeste;
               mientras frente-libre hacer
                  avanza;
               sur;
               mientras frente-libre hacer
                  avanza;
               repetir n veces
                  deja-zumbador;
               apagate;
            fin;
         fin
         sino inicio
            si frente-libre entonces
               avanza;
         fin;
      fin;
   fin;
fin;
define-nueva-instruccion cuenta(n) como inicio
   si junto-a-zumbador entonces inicio
      coge-zumbador;
      cuenta(sucede(n));
   fin
   sino inicio
      repetir n veces
         si frente-libre entonces inicio
            revisa(n);
         fin
         sino inicio
            si orientado-al-oeste y frente-bloqueado entonces inicio
               sur;
               si frente-libre entonces
                  revisa(n);
            fin;
            si orientado-al-norte y frente-bloqueado entonces inicio
               oeste;
               si frente-libre entonces
                  revisa(n);
            fin;
            si orientado-al-este y frente-bloqueado entonces inicio
               norte;
               si frente-libre entonces
                  revisa(n);
            fin;
            si orientado-al-sur y frente-bloqueado entonces inicio
               este;
               si frente-libre entonces
                  revisa(n);
            fin;
         fin;
      cuenta(0);
   fin;
fin;
define-nueva-instruccion orienta como inicio
   oeste;
   mientras frente-libre hacer
      avanza;
   sur;
   mientras frente-libre hacer
      avanza;
   este;
   cuenta(0);
fin;
    inicia-ejecucion
       orienta;
        apagate;
    termina-ejecucion
finalizar-programa