iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;

define-nueva-instruccion deja(n) como
  inicio
   repetir 2 veces deja-zumbador;
   repetir n veces avanza;
   si izquierda-libre y no-orientado-al-sur entonces gira-izquierda;
   si no-junto-a-zumbador entonces deja(n);
  fin;

define-nueva-instruccion poste(n) como
  inicio
   si junto-a-zumbador entonces
     inicio
      coge-zumbador;
      poste(sucede(n));
     fin
   sino
     inicio
      norte;
      avanza;
      este;
      deja(n);
     fin;
  fin;

define-nueva-instruccion balla como
  inicio
   este;
   avanza;
   mientras izquierda-bloqueada hacer
     inicio
      si no-junto-a-zumbador entonces deja-zumbador;
      avanza;
      si no-junto-a-zumbador entonces deja-zumbador;
      si izquierda-libre y no-orientado-al-sur entonces
        inicio
         gira-izquierda;
         avanza;
        fin;
     fin;
  fin;

define-nueva-instruccion rpostes(n) como
  inicio
   si junto-a-zumbador entonces
     inicio
      coge-zumbador;
      si junto-a-zumbador entonces
        inicio
         coge-zumbador;
         avanza;
         si izquierda-libre y no-orientado-al-sur entonces gira-izquierda;
         rpostes(sucede(n));
        fin
      sino
        inicio
         deja-zumbador;
         avanza;
         si izquierda-libre y no-orientado-al-sur entonces gira-izquierda;
         rpostes(n);
        fin;
     fin
   sino
     inicio
      avanza;
      este;
      avanza;
      repetir n veces deja-zumbador;
     fin;
  fin;

define-nueva-instruccion rballas(n) como
  inicio
   si frente-libre entonces
     inicio
      avanza;
      si junto-a-zumbador entonces
        inicio
         coge-zumbador;
         si izquierda-libre y no-orientado-al-sur entonces gira-izquierda;
         rballas(sucede(n));
        fin
      sino
        inicio
         si izquierda-libre y no-orientado-al-sur entonces gira-izquierda;
         rballas(n);
        fin;
     fin
   sino
     inicio
      este;
      avanza;
      avanza;
      repetir n veces deja-zumbador;
     fin;
  fin;

    inicia-ejecucion
     este;
     avanza;
     poste(0);
     balla;
     este;
     rpostes(0);
     oeste;
     avanza;
     norte;
     avanza;
     este;
     rballas(0);
        apagate;
    termina-ejecucion
finalizar-programa
