iniciar-programa
define-nueva-instruccion gira-derecha como
inicio
  repetir 3 veces
    gira-izquierda;
fin;
define-nueva-instruccion mira-este como
inicio
  mientras no-orientado-al-este hacer
    gira-izquierdA;
fin;
define-nueva-instruccion mira-oeste como
inicio
  mientras no-orientado-al-oeste hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-sur como
inicio
  mientras no-orientado-al-sur hacer
    gira-izquierda;
fin;
define-nueva-instruccion mira-norte como
inicio
  mientras no-orientado-al-norte hacer
    gira-izquierdA;
fin;
define-nueva-instruccion ubicate como
inicio
  mira-oeste;
  mientras frente-libre hacer
    avanza;
  mira-sur;
  mientras frente-libre hacer
    avanza;
  mira-norte;
fin;
define-nueva-instruccion paso-atras como
inicio
  repetir 2 veces
    gira-izquierda;
  avanza;
  repetir 2 veces
    gira-izquierda;
fin;
define-nueva-instruccion busca(n) como
inicio
  si no(si-es-cero(n)) y junto-a-zumbador entonces
  inicio
    coge-zumbador;
    busca(precede(n));
    deja-zumbador;
  fin
  sino
  inicio
    si si-es-cero(n) y junto-a-zumbador entonces
    inicio
      mira-norte;
    fin
    sino
      mira-sur;
  fin;
fin;
define-nueva-instruccion minas como
inicio
  si frente-libre entonces
  inicio
    avanza;
    busca(8);
    si orientado-al-norte entonces
    inicio
      paso-atras;
      deja-zumbador;
    fin
    sino
    inicio
      mira-norte;
      paso-atras;
    fin;
    avanza;
    si derecha-libre entonces
    inicio
      gira-derecha;
      avanza;
      busca(8);
      si orientado-al-norte entonces
    inicio
      mira-este;
      paso-atras;
      mira-norte;
      paso-atras;
      deja-zumbador;
    fin
    sino
    inicio
      mira-este;
      paso-atraS;
      mira-norte;
      paso-atras;
    fin;

    fin
    sino
      paso-atras;
    avanza;
    si izquierda-libre entonces
    inicio
      gira-izquierda;
      avanza;
      busca(8);
      si orientado-al-norte entonces
      inicio
        mira-oeste;
        paso-atras;
        mira-norte;
        paso-atras;
        deja-zumbador;
      fin
      sino
      inicio
        mira-oeste;
        paso-atras;
        mira-norte;
        paso-atras;
      fin;
    fin
    sino
      paso-atraS;
 fin;

  si izquierda-libre entonces
  inicio
    gira-izquierda;
    avanza;
    busca(8);
    si orientado-al-norte entonces
    inicio
      mira-oeste;
      paso-atras;
      deja-zumbador;
      mira-norte;
    fin
    sino
    inicio
      mira-oeste;
      paso-atras;
      mira-nortE;
    fin;
  fin;
  si derecha-libre entonces
  inicio
    gira-derecha;
    avanza;
    busca(8);
    si orientado-al-norte entonces
    inicio
      mira-este;
      paso-atras;
      deja-zumbador;
      mira-norte;
    fin
    sino
    inicio
      mira-este;
      paso-atraS;
      mira-norte;
    fin;
  fin;
  repetir 2 veces
    gira-izquierda;
  si frente-libre entonces
  inicio
     avanza;
     busca(8);
     si orientado-al-norte entonces
     inicio
       mira-sur;
       paso-atras;
       deja-zumbador;
     fin
     sino
     inicio
       mira-sur;
       paso-atras;
     fin;
    avanza;
    si derecha-libre entonces
    inicio
      gira-derecha;
      avanza;
      busca(8);
      si orientado-al-norte entonces
    inicio
      mira-oeste;
      paso-atras;
      mira-sur;
      paso-atras;
      deja-zumbador;
    fin
    sino
    inicio
      mira-oeste;
      paso-atraS;
      mira-sur;
      paso-atras;
    fin;

  fin
  sino
    paso-atraS;
  avanza;
  si izquierda-libre entonces
  inicio
    gira-izquierda;
    avanza;
    busca(8);
    si orientado-al-norte entonces
    inicio
      mira-este;
      paso-atras;
      mira-sur;
      paso-atraS;
      deja-zumbador;
    fin
    sino
    inicio
      mira-este;
      paso-atras;
      mira-sur;
      paso-atras;
    fin;
  fin
  sino
    paso-atraS;
  fin
  sino
    repetir 2 veces
      gira-izquierdA;
  mira-norte;
 fin;
    inicia-ejecucion
    ubicate;
    mientras derecha-libre hacer
    inicio
      busca(8);
      si orientado-al-norte entonces
      inicio
        si frente-libre entonces
          avanza
        sino
        inicio
          gira-derecha;
          avanza;
          mira-sur;
          mientras frente-libre hacer
            avanza;
          mira-norte;
        fin;
      fin
      sino
      inicio
        mira-norte;
        minas;
        si frente-libre entonces
          avanzA
        sino
        inicio
          gira-derecha;
          avanza;
          gira-derecha;
          mientras frente-libre hacer
            avanza;
          mira-norte;
        fin;
      fin;
    fin;
    mientras frente-libre hacer
    inicio
      busca(8);
      si orientado-al-norte entonces
      inicio
        si frente-libre entonces
        inicio
          avanzA;
        fin
        sino
          apagate;
      fin
      sino
      inicio
        mira-norte;
        minas;
        si frente-libre entonces
          avanza;
      fin;
    fin;
    busca(8);
    si orientado-al-norte entonces
      apagate
    sino
    inicio
      mira-norte;
      minas;
    fin;
        apagate;
    termina-ejecucion
finalizar-programa
