iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;

define-nueva-instruccion ir-11 como
inicio
   oeste;
   mientras frente-libre hacer avanza;
   sur;
   mientras frente-libre hacer avanza;
   norte;
fin;
define-nueva-instruccion cambia como
inicio
   sur;
   mientras frente-libre hacer avanza;
   este;
   si frente-libre entonces
     inicio
        avanza;
        norte;
     fin;
fin;
define-nueva-instruccion llenamina como
inicio
   norte;
   si frente-libre entonces
     inicio
        avanza;
        deja-zumbador;
        este;
        si frente-libre entonces
          inicio
             avanza;
             deja-zumbador;
             oeste;
             avanza;
          fin;
        oeste;
        si frente-libre entonces
          inicio
             avanza;
             deja-zumbador;
             este;
             avanza;
          fin;
        sur;
        avanza;
     fin;
   este;
   si frente-libre entonces
     inicio
        avanza;
        deja-zumbador;
        oeste;
        avanza;
     fin;
   oeste;
   si frente-libre entonces
     inicio
        avanza;
        deja-zumbador;
        este;
        avanza;
     fin;
   sur;
   si frente-libre entonces
     inicio
        avanza;
        deja-zumbador;
        este;
        si frente-libre entonces
          inicio
             avanza;
             deja-zumbador;
             oeste;
             avanza;
          fin;
        oeste;
        si frente-libre entonces
          inicio
             avanza;
             deja-zumbador;
             este;
             avanza;
          fin;
        norte;
        avanza;
     fin;
   norte;
   si frente-libre entonces avanza
   sino cambia;
fin;
define-nueva-instruccion compara(z) como
inicio
   si junto-a-zumbador entonces
     inicio
        si no si-es-cero(z) entonces
          inicio
             coge-zumbador;
             compara(precede(z));

          fin
        sino
          inicio
             si junto-a-zumbador entonces
               inicio
                  llenamina;
               fin;
          fin;
     fin
   sino
     inicio
        si si-es-cero(z) entonces
          inicio
             llenamina;
          fin
        sino
          inicio
             repetir 9 veces deja-zumbador;
             repetir z veces coge-zumbador;
             si frente-libre entonces
               inicio
                  avanza;
               fin
             sino
               inicio
                  cambia;
               fin;
          fin;
     fin;
fin;
define-nueva-instruccion buscamin como
inicio
   si frente-libre entonces
     inicio
        mientras no-junto-a-zumbador y frente-libre hacer avanza;
        si junto-a-zumbador entonces
          inicio
             compara(9);
          fin
        sino
          inicio
             cambia;
             buscamin;
         fin;
     fin
   sino
     inicio
        si junto-a-zumbador y orientado-al-norte entonces compara(9)
        sino
          inicio
            si orientado-al-norte entonces cambia;
          fin;
     fin;
fin;
    inicia-ejecucion
    ir-11;
    buscamin;
     mientras derecha-libre y no-orientado-al-este hacer
       inicio
          si frente-libre entonces
          inicio
          norte;
          si junto-a-zumbador entonces
            inicio
               compara(9);
            fin
          sino
            inicio
               avanza;
            fin;
          fin
        sino
          inicio
             si junto-a-zumbador entonces compara(9)
             sino cambia;
             buscamin;
          fin;
          buscamin;
       fin;
       norte;
       si frente-bloqueado entonces cambia;
      mientras frente-libre y orientado-al-norte hacer buscamin;
      si junto-a-zumbador y orientado-al-norte entonces compara(9);
        apagate;
    termina-ejecucion
finalizar-programa
