iniciar-programa
define-nueva-instruccion mira-norte como
inicio
  mientras no-orientado-al-norte hacer
    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 gira-derecha como
inicio
  repetir 3 veces
    gira-izquierDA;
fin;
define-nueva-instruccion paso-atras como
inicio
  repetir 2 veces
    gira-izquierda;
  avanza;
  repetir 2 veces
    gira-izquierdA;
fin;
define-nueva-instruccion oaxaca(m) como
inicio
   si junto-a-zumbador entonces
   inicio
     coge-zumbador;
     oaxaca(sucede(m));
   fin
   sino
   inicio
     repetir m veces
     inicio
       si frente-libre y no-junto-a-zumbador entonces
         avanza
       sino
       inicio
         mira-norte;
         mientras junto-a-zumbador hacer
           coge-zumbador;
        sal-de-instruccion;
       fin;
     fin;
     si frente-bloqueado y no-junto-a-zumbador entonces
       apagate;
     si no-junto-a-zumbador entonces
     inicio
       repetir m veces
         deja-zumbador;
       avanza;
       mientras no-junto-a-zumbador y frente-libre hacer
         avanza;
       si no-junto-a-zumbador entonces
       inicio
         paso-atraS;
         si no-junto-a-zumbador entonces
           apagate;
       fin;
     fin
     sino
     inicio
       si junto-a-zumbador entonces
       inicio
         repetir m veces
           deja-zumbador;
         repetir m veces
           coge-zumbador;
         si junto-a-zumbador entonces
         inicio
           mientras junto-a-zumbador hacer
             coge-zumbador;
         fin
         sino
         repetir m veces
           deja-zumbador;
       fin;
     fin;
    fin;
    fin;


define-nueva-instruccion df(n) como
inicio
  si junto-a-zumbador entonces
  inicio
    coge-zumbador;
    df(sucede(n));
  fin
  sino
  inicio
    repetir n veces
    inicio
      si frente-libre y no-junto-a-zumbador entonces
      avanza;
      si junto-a-zumbador entonces
      inicio
        mira-norte;
        mientras junto-a-zumbador hacer
         coge-zumbador;
        sal-de-instruccion;
      fin;
    fin;
    si junto-a-zumbador entonces
    inicio
      mientras junto-a-zumbador hacer
        coge-zumbador;
    fin
    sino
    inicio

    si frente-bloqueado y no-junto-a-zumbador entonces
     apagate;
    si no-junto-a-zumbador entonces
    inicio
      repetir n veces
        deja-zumbador;
      avanza;
      mientras no-junto-a-zumbador y frente-libre  hacer
     avanzA;

   si no-junto-a-zumbador entonces
     paso-atras;
   mira-oeste;
      oaxaca(0);

    fin
    sino
    inicio
      sal-de-instruccion;
    fin;
  fin;
  fin;

fin;

define-nueva-instruccion primer(n) como
inicio
  si junto-a-zumbador entonces
  inicio
   coge-zumbador;
   primer(Sucede(n));
  fin
  sino                                 
  inicio
    repetir precede(N) veces
    inicio
      si frente-libre y no-junto-a-zumbador entonces
      avanza
      sino
      inicio
        si junto-a-zumbador entonces
        inicio
          mira-norte;
          mientras junto-a-zumbador hacer
            coge-zumbador;
         sal-de-instruccion;
        fin;
      fin;
    fin;
    si no-junto-a-zumbador y frente-libre entonces
    inicio
      repetir n veces
        deja-zumbador;
      avanza;
      mientras no-junto-a-zumbador y frente-libre hacer
        avanza;
      mira-oeste;
      oaxaca(0);
    fin
    sino
    inicio
      si no-junto-a-zumbador y frente-bloqueado entonces
        apagate
      sino
      inicio
        mientras junto-a-zumbador hacer
          coge-zumbador;
      fin;
    fin;

  fin;
fin;
define-nueva-instruccion distancia(n) como
inicio
  si frente-libre entonces
  inicio
    avanza;
    distancia(sucede(n));
  fin
  sino
  inicio
    repetir n veces
      deja-zumbador;
    deja-zumbador;
  fin;
fin;
    inicia-ejecucion
    mira-este;
    primer(0);
    mientras junto-a-zumbador hacer
    inicio
      mira-estE;
      df(0);
    fin;
    mira-oeste;
    distancia(0);

        apagate;
    termina-ejecucion
finalizar-programa
