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 norte como
  inicio
   mientras no-orientado-al-norte hacer
    gira-izquierda;
  fin;
 define-nueva-instruccion sur como
  inicio
   mientras no-orientado-al-sur hacer
    gira-izquierda;
  fin;
  define-nueva-instruccion prepprep como
  inicio
   si izquierda-bloqueada y derecha-bloqueada entonces
    inicio
     sur;
     rec;
     der;
     rec;
     si junto-a-zumbador entonces
      inicio
       mientras junto-a-zumbador hacer
        coge-zumbador;
      fin;
     inv;
     si frente-libre entonces
      avanza;
     apagate;
    fin;
   si frente-bloqueado entonces
    inicio
     inv;
     si frente-bloqueado entonces
      inicio
       inv;
       sur;
       rec;
       der;
       rec;
       si junto-a-zumbador entonces
        inicio
         mientras junto-a-zumbador hacer
          coge-zumbador;
        fin;
       inv;
       si frente-libre entonces
        avanza;
       apagate;
      fin
     sino
      inicio
       inv;
      fin;
    fin;
  fin;
 define-nueva-instruccion prepint como
  inicio
   rec;
   gira-izquierda;
   repetir 4 veces
    inicio
     si junto-a-zumbador entonces
      inicio
       mientras junto-a-zumbador hacer
        coge-zumbador;
      fin;
     mientras frente-libre hacer
      inicio
       avanza;
       si junto-a-zumbador entonces
        inicio
         mientras junto-a-zumbador hacer
          coge-zumbador;
        fin;
      fin;
     gira-izquierda;
    fin;
  fin;
 define-nueva-instruccion dej como
  inicio
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     si junto-a-zumbador entonces
      inicio
       mientras junto-a-zumbador hacer
        coge-zumbador;
      fin
     sino
      inicio
       deja-zumbador;
      fin;
    fin;
  fin;
 define-nueva-instruccion fill como
  inicio
   deja-zumbador;
   deja-zumbador;
   repetir 4 veces
    inicio
     si frente-libre entonces
      inicio
       avanza;
       si no-junto-a-zumbador entonces
        inicio
         fill;
        fin;
       inv;
       avanza;
       inv;
      fin;
     gira-izquierda;
    fin;
  fin;
 define-nueva-instruccion prep como
  inicio
   sur;
   rec;
   der;
   rec;
   der;
   dej;
   mientras frente-libre hacer
    inicio
     avanza;
     dej;
    fin;
   inv;
   rec;
   inv;
   mientras derecha-libre hacer
    inicio
     der;
     avanza;
     gira-izquierda;
     dej;
     mientras frente-libre hacer
      inicio
       avanza;
       dej;
      fin;
     inv;
     rec;
     inv;
    fin;
   gira-izquierda;
   rec;
   der;
  fin;
 define-nueva-instruccion mar como
  inicio
   mientras frente-libre hacer
    inicio
     avanza;
     si no-junto-a-zumbador entonces
      inicio
       repetir 3 veces
        deja-zumbador;
      fin;
    fin;
   inv;
   rec;
   inv;
   mientras derecha-libre hacer
    inicio
     der;
     avanza;
     gira-izquierda;
     mientras frente-libre hacer
      inicio
       avanza;
       si no-junto-a-zumbador entonces
        inicio
         repetir 3 veces
          deja-zumbador;
        fin;
      fin;
     inv;
     rec;
     inv;
    fin;
  fin;
 define-nueva-instruccion lim como
  inicio
   coge-zumbador;
   coge-zumbador;
   repetir 4 veces
    inicio
     si frente-libre entonces
      inicio
       avanza;
       si junto-a-zumbador entonces
        inicio
         coge-zumbador;
         si junto-a-zumbador entonces
          inicio
           coge-zumbador;
           si junto-a-zumbador entonces
            inicio
             deja-zumbador;
             deja-zumbador;
            fin
           sino
            inicio
             deja-zumbador;
             deja-zumbador;
             lim;
            fin;
          fin
         sino
          inicio
           deja-zumbador;
          fin;
        fin;
       inv;
       avanza;
       inv;
      fin;
     gira-izquierda;
    fin;
  fin;
 define-nueva-instruccion pre como
  inicio
   norte;
   rec;
   inv;
   avanza;
   gira-izquierda;
   rec;
   inv;
   avanza;
  fin;
 define-nueva-instruccion des como
  inicio
   coge-zumbador;
   coge-zumbador;
   coge-zumbador;
   repetir 4 veces
    inicio
     si frente-libre entonces
      inicio
       avanza;
       si junto-a-zumbador entonces
        inicio
         coge-zumbador;
         si junto-a-zumbador entonces
          inicio
           deja-zumbador;
           des;
          fin
         sino
          inicio
           deja-zumbador;
          fin;
        fin;
       inv;
       avanza;
       inv;
      fin;
     gira-izquierda;
    fin;
  fin;
 define-nueva-instruccion baj como
  inicio
   si frente-libre entonces
    inicio
     avanza;
     baj;
     avanza;
    fin
   sino
    inicio
     deja-zumbador;
     inv;
    fin;
  fin;
 define-nueva-instruccion izq como
  inicio
   si frente-libre entonces
    inicio
     avanza;
     izq;
     avanza;
    fin
   sino
    inicio
     gira-izquierda;
     baj;
     der;
    fin;
  fin;
 define-nueva-instruccion cou como
  inicio
   pre;
   mientras izquierda-libre hacer
    inicio
     mientras frente-libre hacer
      inicio
       avanza;
       si junto-a-zumbador entonces
        inicio
         coge-zumbador;
         si junto-a-zumbador entonces
          inicio
           deja-zumbador;
           des;
           izq;
           inv;
          fin
         sino
          inicio
           deja-zumbador;
          fin;
        fin;
      fin;
     gira-izquierda;
     avanza;
     gira-izquierda;
     rec;
     inv;
     avanza;
    fin;
  fin;
 define-nueva-instruccion count como
  inicio
   prepprep;
   prepint;
   prep;
   fill;
   mar;
   lim;
   cou;
   rec;
   inv;
   avanza;
  fin;
    inicia-ejecucion
     count;
        apagate;
    termina-ejecucion
finalizar-programa
