iniciar-programa
define-nueva-instruccion g(n) como
inicio
repetir n veces
inicio
gira-izquierda;
fin;
fin;

define-nueva-instruccion gira como
inicio
si orientado-al-norte entonces
inicio
si derecha-libre entonces
inicio
g(3);
avanza;
g(3);
fin
sino
inicio
 g(2);
 mientras frente-libre hacer
 inicio
 avanza;
 fin;
fin;

fin
sino
inicio
si orientado-al-sur entonces
inicio
si izquierda-libre entonces
inicio
gira-izquierda;
avanza;
gira-izquierda;
fin;
fin;
fin;
fin;

define-nueva-instruccion deja(n) como
inicio
 g(3);
 mientras frente-libre hacer
 inicio
 avanza;
 fin;
 repetir n veces
 inicio
 deja-zumbador;
 fin;
 apagate;
fin;

define-nueva-instruccion cuenta(n) como
inicio
si orientado-al-sur y izquierda-bloqueada y frente-bloqueado entonces
inicio
si junto-a-zumbador entonces
inicio
coge-zumbador;
si junto-a-zumbador entonces
inicio
coge-zumbador;
cuenta(sucede(n));
fin;
fin;
deja(n)
fin;
 si junto-a-zumbador entonces
 inicio
  coge-zumbador;
    si junto-a-zumbador entonces
     inicio
     coge-zumbador;
     si frente-libre entonces
     inicio
     avanza;
     fin
     sino
     inicio
       gira;
       fin;

      cuenta(sucede(n));
     fin
     sino
     inicio
      si frente-libre entonces
      inicio
      avanza;
      fin
      sino
      inicio
      gira;
      fin;
      cuenta(n);
     fin;
 fin
 sino
 inicio
  si frente-libre entonces
  inicio
  avanza;
  cuenta(n);
  fin
  sino
  inicio
     gira;
     cuenta(n);
  fin;
 fin;
 fin;

define-nueva-instruccion busca(n) como
inicio
repetir 4 veces
inicio
   gira-izquierda;
   si frente-libre entonces
   inicio
   avanza;
   si junto-a-zumbador entonces
   inicio
     coge-zumbador;
     si junto-a-zumbador entonces
     inicio
     deja-zumbador;
      fin
     sino
     inicio
     deja-zumbador;
     deja-zumbador;
     busca(sucede(n));
     fin;
   fin;


   g(2);
   si frente-libre entonces
   inicio
   avanza;
   fin;
   g(2);

   fin;

fin;

fin;
    inicia-ejecucion
    deja-zumbador;
     busca(0);
      si orientado-al-norte entonces
      inicio
      g(2);
      fin;
      si orientado-al-este entonces
      inicio
      g(3);
      fin;
      si orientado-al-oeste entonces
      inicio
      gira-izquierda;
      fin;
      mientras frente-libre hacer
      inicio
      avanza;
      fin;
      g(3);
      mientras frente-libre hacer
      inicio
      avanza;
      fin;
      g(3);
      cuenta(0);
        apagate;
    termina-ejecucion
finalizar-programa
