iniciar-programa
define-nueva-instruccion g(n) como repetir n veces gira-izquierda;
define-nueva-instruccion lml(n) como
inicio
si junto-a-zumbador entonces inicio
coge-zumbador;
lml(sucede(n));
fin
sino inicio
si no-junto-a-zumbador entonces inicio
mientras frente-libre y orientado-al-este y no-junto-a-zumbador hacer avanza;
si junto-a-zumbador entonces inicio
repetir n veces inicio
si junto-a-zumbador entonces inicio
coge-zumbador;
fin
sino
si frente-libre entonces inicio
avanza;
lml(n);
fin
sino
si frente-bloqueado entonces inicio
g(2);
mientras frente-libre y orientado-al-oeste hacer avanza;
g(1);
mientras frente-libre y orientado-al-sur hacer avanza;
repetir n veces deja-zumbador;
apagate;
fin;
fin;
fin;
fin;
fin;
si no-junto-a-zumbador entonces inicio
si frente-libre entonces inicio
avanza;
fin
sino
si frente-bloqueado entonces inicio
g(2);
mientras frente-libre y orientado-al-oeste hacer avanza;
g(1);
mientras frente-libre y orientado-al-sur hacer avanza;
repetir n veces deja-zumbador;
apagate;
fin;
lml(n);
fin;
si junto-a-zumbador entonces inicio
repetir n veces deja-zumbador;
lml(0);
fin;
 fin;

define-nueva-instruccion junta(n) como inicio
 si junto-a-zumbador entonces inicio
 coge-zumbador;
 si frente-libre entonces avanza;
 junta(sucede(n));
 fin
 sino inicio
 si algun-zumbador-en-la-mochila entonces inicio
 mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
 si frente-libre entonces inicio
 avanza;
 junta(0);
 fin
 sino
 si frente-bloqueado entonces inicio
 g(2);
 lml(0);
 fin;
 fin
 sino
 si frente-libre y ningun-zumbador-en-la-mochila entonces inicio
 avanza;
 junta(0);
 fin;
 fin;
 si frente-bloqueado entonces inicio
 g(2);
 lml(0);
 fin;
fin;
define-nueva-instruccion paso como inicio
 si frente-libre entonces inicio
  avanza;
 fin
 sino inicio
  si frente-bloqueado entonces inicio
   g(1);
   avanza;
   avanza;
   mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
   g(2);
   avanza;
   g(3);
   junta(0);
  fin;
 fin;
fin;
define-nueva-instruccion cuenta(n) como inicio
 si orientado-al-este entonces inicio
  repetir n veces inicio
   si junto-a-zumbador entonces inicio
   coge-zumbador;
   fin
 sino inicio
  si no-junto-a-zumbador y orientado-al-este entonces inicio
   paso;
   cuenta(n);
  fin;
 fin;
 fin;
  si junto-a-zumbador entonces inicio
  paso;
  fin;
 si no-junto-a-zumbador entonces inicio
  g(1);
  avanza;
  deja-zumbador;
  g(2);
  avanza;
  g(1);
  paso;
  fin;
  cuenta(n);
  fin;
fin;

define-nueva-instruccion lol(n) como inicio
si junto-a-zumbador y orientado-al-norte entonces inicio
coge-zumbador;
lol(sucede(n));
fin
sino inicio
mientras no-junto-a-zumbador hacer avanza;
g(3);
cuenta(n);
fin;
fin;
    inicia-ejecucion
    mientras no-orientado-al-norte hacer
    gira-izquierda;
    avanza;
    lol(0);
        apagate;
    termina-ejecucion
finalizar-programa
