iniciar-programa
 define-nueva-instruccion inv como
  inicio
   gira-izquierda;
   gira-izquierda;
  fin;
 define-nueva-instruccion der como
  inicio
   repetir 3 veces
    gira-izquierda;
  fin;
 define-nueva-instruccion rec como
  inicio
   mientras frente-libre hacer
    avanza;
  fin;
 define-nueva-instruccion cop(n) como
  inicio
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     cop(sucede(n));
    fin
   sino
    inicio
     repetir n veces
      deja-zumbador;
     avanza;
     repetir n veces
      deja-zumbador;
    fin;
  fin;
 define-nueva-instruccion mov(n) como
  inicio
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     mov(n);
     deja-zumbador;
    fin
   sino
    inicio
     repetir n veces
      avanza;
    fin;
  fin;
 define-nueva-instruccion div(m) como
  inicio
   si junto-a-zumbador entonces
    inicio
     repetir m veces
      coge-zumbador;
     div(m);
     deja-zumbador;
    fin;
  fin;
 define-nueva-instruccion p(m) como
  inicio
   repetir precede(m) veces
    inicio
     si junto-a-zumbador entonces
      coge-zumbador;
    fin;
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     si junto-a-zumbador entonces
      inicio
       p(m);
      fin;
    fin
   sino
    inicio
     inv;
    fin;
  fin;
 define-nueva-instruccion rev(m) como
  inicio
   cop(0);
   inv;
   avanza;
   gira-izquierda;
   avanza;
   gira-izquierda;
   cop(0);
   p(m);
   si orientado-al-norte entonces
    inicio
     gira-izquierda;
     avanza;
     der;
     p(m);
     si orientado-al-norte entonces
      inicio
       inv;
       avanza;
       inv;
       div(m);
      fin
     sino
      inicio
       avanza;
       inv;
      fin;
    fin
   sino
    inicio
     der;
     avanza;
     mientras junto-a-zumbador hacer
      coge-zumbador;
     gira-izquierda;
     avanza;
     inv;
    fin;
  fin;
 define-nueva-instruccion pr(b) como
  inicio
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     pr(b);
     repetir b veces
      deja-zumbador;
    fin
   sino
    inicio
     avanza;
    fin;
  fin;
 define-nueva-instruccion mul(b) como
  inicio
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     mul(sucede(b));
    fin
   sino
    inicio
     avanza;
     pr(b);
    fin;
  fin;
 define-nueva-instruccion torneos como
  inicio
   mientras no-orientado-al-sur hacer
    gira-izquierda;
   rec;
   der;
   rec;
   der;
   cop(0);
   mov(1);
   inv;
   rec;
   gira-izquierda;
   avanza;
   gira-izquierda;
   cop(0);
   mov(1);
   gira-izquierda;
   rec;
   gira-izquierda;
   rec;
   inv;
   rev(2);
   rev(2);
   rev(2);
   rev(3);
   rev(3);
   rev(5);
   rev(5);
   rev(7);
   rev(11);
   der;
   mul(0);
   gira-izquierda;
   avanza;
   avanza;
   gira-izquierda;
   avanza;
   gira-izquierda;
   mov(2);
   inv;
   avanza;
   avanza;
   gira-izquierda;
   avanza;
   gira-izquierda;
   mov(2);
   inv;
  fin;
    inicia-ejecucion
     torneos;
        apagate;
    termina-ejecucion
finalizar-programa
