iniciar-programa
define-nueva-instruccion mv como
inicio
repetir 2 veces gira-izquierda;
fin;

define-nueva-instruccion gd como
inicio
repetir 3 veces gira-izquierda;
fin;

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


define-nueva-instruccion divide2(N) como
  inicio
   si (no(si-es-cero(N))) y junto-a-zumbador entonces
   inicio
    coge-zumbador;
    divide2(precede(N));
   fin
   sino
   inicio
    si si-es-cero(N) y junto-a-zumbador entonces
    inicio
     gd;
     avanza;
     repetir 2 veces
     inicio
     gira-izquierda;
     avanza;
     fin;
     deja-zumbador;
     avanza;
     gira-izquierda;
     avanza;
    fin
    sino
    inicio
     si si-es-cero(N) y no junto-a-zumbador entonces
     inicio
      gd;
      avanza;
      gira-izquierda;
      avanza;
      gira-izquierda;
      avanza;
      deja-zumbador;
      apagate;
     fin
     sino
     inicio
      si no si-es-cero(N) y no junto-a-zumbador entonces
      inicio
      mv;
      avanza;
      gd;
      avanza;
      gd;
      avanza;
      repetir N veces
      coge-zumbador;
      mientras junto-a-zumbador hacer
      inicio
       coge-zumbador;
       mv;
       avanza;
       gira-izquierda;
       avanza;
       deja-zumbador;
       mv;
       avanza;
       gd;
       avanza;
      fin;
      apagate;
      fin;
     fin;
    fin;
   fin;
  fin;
  define-nueva-instruccion p(N) como
  inicio
   si junto-a-zumbador entonces
   inicio
    coge-zumbador;
    p(sucede(N));
   fin
   sino
   inicio
    repetir N veces deja-zumbador;
    avanza;
    repetir 2 veces
    inicio
    gira-izquierda;
    avanza;
    fin;
    divide2(N);
   fin;
  fin;

 inicia-ejecucion
    mientras no-orientado-al-este hacer gira-izquierda;
    avanza;
    gira-izquierda;
    repetir 3 veces avanza;
    gira-izquierda;
    avanza;
   gira-izquierda;
    s(0);
    mv;
    avanza;
    avanza;
    gira-izquierda;
    avanza;
    mv;
 mientras junto-a-zumbador hacer
    inicio
   p(0);
    fin;

        apagate;
    termina-ejecucion
finalizar-programa
