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 mid como
  inicio
   si frente-libre entonces
    inicio
     avanza;
     mid;
     deja-zumbador;
    fin
   sino
    inicio
     gira-izquierda;
     rec;
     gira-izquierda;
     repetir 8 veces
      avanza;
    fin;
  fin;
 define-nueva-instruccion pas(n) como
  inicio
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     pas(sucede(n));
     deja-zumbador;
    fin
   sino
    inicio
     repetir n veces
      deja-zumbador;
     coge-zumbador;
     avanza;
     avanza;
    fin;
  fin;
 define-nueva-instruccion res como
  inicio
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     avanza;
     coge-zumbador;
     inv;
     avanza;
     inv;
     res;
    fin;
  fin;
 define-nueva-instruccion uno como
  inicio
   mientras no-orientado-al-oeste hacer
    gira-izquierda;
   rec;
   der;
   rec;
   der;
   mientras frente-libre y izquierda-bloqueada hacer
    avanza;
   si frente-libre entonces
    inicio
     inv;
     avanza;
     inv;
    fin;
   der;
   rec;
   gira-izquierda;
   avanza;
   mientras junto-a-zumbador hacer
    coge-zumbador;
   deja-zumbador;
   apagate;
  fin;
 define-nueva-instruccion cou como
  inicio
   si frente-libre entonces
    inicio
     avanza;
     cou;
     deja-zumbador;
    fin
   sino
    inicio
     inv;
     mientras frente-libre y izquierda-bloqueada hacer
      avanza;
     si frente-libre entonces
      inicio
       inv;
       avanza;
       inv;
      fin;
     der;
     rec;
     gira-izquierda;
     avanza;
     mientras junto-a-zumbador hacer
      coge-zumbador;
     deja-zumbador;
    fin;
  fin;
 define-nueva-instruccion mdu como
  inicio
   mientras no-orientado-al-oeste hacer
    gira-izquierda;
   rec;
   der;
   rec;
   der;
   mientras frente-libre y izquierda-bloqueada hacer
    avanza;
   si frente-libre entonces
    inicio
     inv;
     avanza;
     inv;
    fin;
   inv;
   cou;
  fin;
 define-nueva-instruccion mov como
  inicio
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     mov;
     deja-zumbador;
    fin
   sino
    inicio
     avanza;
     avanza;
    fin;
  fin;
 define-nueva-instruccion com como
  inicio
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     avanza;
     inv;
     com;
    fin;
  fin;
 define-nueva-instruccion KG como
  inicio
   gira-izquierda;
   rec;
   der;
   rec;
   der;
   mientras frente-libre y izquierda-bloqueada hacer
    avanza;
   inv;
   si derecha-libre entonces
    avanza;
   mid;
   deja-zumbador;
   inv;
   repetir 3 veces
    avanza;
   inv;
   coge-zumbador;
   si junto-a-zumbador entonces
    inicio
     pas(1);
    fin
   sino
    inicio
     avanza;
     avanza;
    fin;
   res;
   avanza;
   si no-junto-a-zumbador entonces
    inicio
     uno;
    fin;
   inv;
   avanza;
   avanza;
   inv;
   mientras junto-a-zumbador hacer
    coge-zumbador;
   avanza;
   avanza;
   inv;
   mov;
   avanza;
   inv;
   com;
   si orientado-al-este entonces
    inicio
     mdu;
    fin
   sino
    inicio
     uno;
    fin;
  fin;
    inicia-ejecucion
     KG;
        apagate;
    termina-ejecucion
finalizar-programa
