iniciar-programa
define-nueva-instruccion g(n) como repetir n veces gira-izquierda;
define-prototipo-instruccion par(n);
define-prototipo-instruccion lol;
define-nueva-instruccion paso como inicio
 si frente-libre entonces inicio
 avanza;
 fin
 sino inicio
  si frente-bloqueado entonces inicio
  g(2);
  mientras frente-libre y orientado-al-sur hacer
   avanza;
   g(3);
   si frente-libre entonces inicio
    avanza;
    g(3);
   fin
   sino inicio
   deja-zumbador;
   g(3);
   avanza;
   g(3);
   mientras frente-libre y orientado-al-este hacer avanza;
   g(1);
   lol;
   fin;
  fin;
 fin;
fin;

define-nueva-instruccion devuelve(n) como inicio
repetir n veces inicio
 si junto-a-zumbador y orientado-al-oeste entonces inicio
 coge-zumbador;
 fin
 sino
 si no-junto-a-zumbador entonces inicio
 g(3);
 deja-zumbador;
 fin
 sino
 si orientado-al-norte entonces inicio
 deja-zumbador;
 fin;
fin;
fin;
 define-nueva-instruccion regresa como inicio
 g(3);
 mientras frente-libre y orientado-al-este hacer avanza;
 g(3);
 mientras frente-libre y orientado-al-sur hacer avanza;
 g(2);
 fin;
define-nueva-instruccion cuenta(n) como
inicio
 si junto-a-zumbador entonces inicio
 repetir n veces inicio
   si orientado-al-norte entonces inicio
    si junto-a-zumbador entonces inicio
    coge-zumbador;
    fin
    sino inicio
    gira-izquierda;
    deja-zumbador;
    fin;
   fin
   sino inicio
   si orientado-al-oeste entonces inicio
    deja-zumbador;
   fin;
   fin;
  fin;
  si orientado-al-oeste entonces inicio
  devuelve(n);
  paso;
  par(n);
  fin;

 fin;
 si no-junto-a-zumbador entonces inicio
   regresa;
   si frente-libre entonces inicio
   lol;
   fin
   sino
   si frente-bloqueado entonces inicio
    g(1);
    mientras frente-libre hacer avanza;
    g(3);
    avanza;
    g(3);
    mientras frente-libre hacer avanza;
    g(1);
    lol;
   fin;
 fin;
 si junto-a-zumbador entonces inicio
  repetir n veces deja-zumbador;
  paso;

  par(n);
  fin;
fin;

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

