iniciar-programa
define-nueva-instruccion sur como inicio
mientras no-orientado-al-sur hacer gira-izquierda; fin;

define-nueva-instruccion este como inicio
mientras no-orientado-al-este hacer gira-izquierda; fin;

define-nueva-instruccion norte como inicio
mientras no-orientado-al-norte hacer gira-izquierda; fin;

define-nueva-instruccion oeste como inicio
mientras no-orientado-al-oeste hacer gira-izquierda; fin;

define-nueva-instruccion ponerPostes(b) como inicio


 si frente-libre entonces
    inicio
        repetir b veces avanza;
        si no-junto-a-zumbador entonces
        inicio
          deja-zumbador;
          fin

          sino
          inicio
             mientras frente-libre hacer avanza;
             oeste;
             mientras frente-libre hacer avanza;
             sur;

          fin;
    fin;


 si izquierda-bloqueada entonces
    inicio
    ponerPostes(b);
    deja-zumbador;
    fin;
 si izquierda-libre y frente-libre entonces
    inicio
       gira-izquierda;
       ponerPostes(b);
       deja-zumbador;
    fin;


fin;

 define-nueva-instruccion fijar como inicio
 si junto-a-zumbador entonces
 inicio
    coge-zumbador;
    fijar;
    deja-zumbador;
 fin
 sino
 inicio
  este;
  repetir 2 veces  avanza;

  fin;

 fin;


define-nueva-instruccion resolver(N) como inicio
 avanza;
mientras frente-libre hacer inicio
  si  izquierda-bloqueada entonces
  inicio
   si junto-a-zumbador entonces
      inicio
       avanza;
      fin
      sino
      inicio
        resolver(sucede(N));
      fin;
   fin;

  si izquierda-libre y no-orientado-al-sur entonces
     inicio
       gira-izquierda;
       resolver(N);
     fin;


     si izquierda-libre y orientado-al-sur entonces
     inicio
          avanza;
          este;
          repetir 2 veces avanza;
          repetir N veces deja-zumbador;
          apagate;
     fin;



  fin;

fin;

 define-nueva-instruccion poste(a) como inicio
   si junto-a-zumbador entonces
      inicio
         coge-zumbador;
         poste(sucede(a));
      fin;
   avanza;


   este;
   deja-zumbador;
   ponerPostes(a);
   deja-zumbador;
   fijar;
   oeste;
   avanza;
   norte;
   avanza;
   este;
   resolver(0);
 fin;




 inicia-ejecucion

   este;
   avanza;
   norte;
   poste(0);


        apagate;
    termina-ejecucion
finalizar-programa
 