iniciar-programa
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 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 distancia como
inicio
   si frente-libre entonces
   inicio
       avanza;
       distancia;
       deja-zumbador;
   fin
   sino
   inicio
      mientras junto-a-zumbador hacer
         coge-zumbador;
     deja-zumbador;
   fin;
fin;
define-nueva-instruccion mueve como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      mueve;
      deja-zumbador;
   fin
   sino
   inicio
     si derecha-libre entonces
     inicio
         gira-derecha;
         si frente-libre entonces
           avanza;
         mira-norte;
     fin
     sino
     inicio
        mira-sur;
        mientras frente-libre hacer
           avanza;
        mira-oeste;
        distancia;
        apagate;
     fin;
   fin;
fin;
define-nueva-instruccion cuenta(n) como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      cuenta(sucede(n));
   fin
   sino
   inicio
      repetir n veces
      inicio
         si no-junto-a-zumbador entonces
         inicio
            repetir n veces
              deja-zumbador;
         fin;
         si frente-libre entonces
            avanza;
      fin;
      mira-sur;
      repetir n veces
      inicio
         si frente-libre y orientado-al-sur entonces
            avanza
         sino
            mira-este;
      fin;

      si junto-a-zumbador y orientado-al-sur entonces
      inicio
         mira-norte;
         repetir precede(n) veces
         inicio
            si junto-a-zumbador entonces
               coge-zumbador;
         fin;
         si no-junto-a-zumbador entonces
         inicio
            mira-norte;
            mientras junto-a-zumbador y frente-libre hacer
              avanza;
            mira-sur;
         fin
         sino
         inicio
             mira-norte;
             repetir precede(n) veces
                deja-zumbador;
             mientras junto-a-zumbador y frente-libre hacer
               avanza;
             si no-junto-a-zumbador entonces
                paso-atras;
             coge-zumbador;
             mueve;
         fin;
      fin
      sino
      inicio
         mira-norte;
         mientras frente-libre hacer
           avanza;
         mira-sur;
      fin;
   fin;
fin;
define-nueva-instruccion primera como
inicio
   mientras no-orientado-al-sur y junto-a-zumbador hacer
   inicio
      si junto-a-zumbador entonces
         coge-zumbador;
      si junto-a-zumbador entonces
      inicio
          deja-zumbador;
          cuenta(0);
      fin
      sino
      inicio
         deja-zumbador;
         mira-sur;
      fin;
   fin;
fin;
define-nueva-instruccion mueve2 como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      mueve2;
      deja-zumbador;
   fin
   sino
   inicio
      si izquierda-libre entonces
      inicio
          gira-izquierda;
          avanza;
          mira-sur;
      fin
      sino
      inicio
          mira-sur;
          mientras frente-libre hacer
            avanza;
            mira-oeste;
          distancia;
          apagate;
      fin;
   fin;
fin;
define-nueva-instruccion cuenta2(n) como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      cuenta2(sucede(n));
   fin
   sino
   inicio
       repetir n veces
       inicio
          si no-junto-a-zumbador entonces
          inicio
              repetir n veces
                deja-zumbador;
          fin;
          si frente-libre entonces
             avanza;
       fin;
       mira-norte;
       si junto-a-zumbador entonces
       inicio
          repetir precede(n) veces
             si frente-libre entonces
               avanza;
          si junto-a-zumbador entonces
          inicio
             mira-sur;
             mientras junto-a-zumbador y frente-libre hacer
               avanza;
            si no-junto-a-zumbador entonces
               paso-atras;
            mira-norte;
          fin
          sino
          inicio
             mira-sur;
             mientras junto-a-zumbador y frente-libre hacer
               avanzA;
             si no-junto-a-zumbador entonces
                paso-atras;
             mira-norte;
          fin;
       fin
       sino
       inicio
           repetir n veces
             si frente-libre entonces
                avanza;
           si junto-a-zumbador entonces
          inicio
             mira-sur;
             mientras junto-a-zumbador hacer
               avanza;
            paso-atras;
          fin
          sino
          inicio
             mira-sur;
             mientras junto-a-zumbador hacer
               avanzA;
             paso-atras;
             mira-norte;
          fin;
       fin;
       si orientado-al-sur entonces
       inicio
          mueve2;
          deja-zumbador;
       fin
       sino
       inicio
          mira-sur;
          mientras frente-libre hacer
            avanzA;
          mira-norte;
       fin;
   fin;
fin;
define-nueva-instruccion segunda como
inicio
   mientras no-orientado-al-norte y junto-a-zumbador hacer
   inicio
      cuenta2(0);
   fin;
fin;
define-nueva-instruccion ultima como
inicio
   si frente-libre entonces
   inicio
      avanza;
      ultima;
      deja-zumbador;
   fin
   sino
   inicio
       mientras junto-a-zumbador hacer
         coge-zumbador;
   fin;
fin;
define-nueva-instruccion tres(n) como
inicio
   si junto-a-zumbador entonces
   inicio
      coge-zumbador;
      tres(sucede(n));
   fin
   sino
   inicio
      repetir n veces
        deja-zumbador;
      repetir 2 veces
      inicio
         si junto-a-zumbador entonces
         inicio
             coge-zumbador;
         fin;
      fin;
      si junto-a-zumbador entonces
      inicio
         coge-zumbador;
         si no-junto-a-zumbador y orientado-al-oeste y frente-bloqueado y izquierda-bloqueada entonces
         inicio
            repetir 6 veces
               deja-zumbador;
            apagate;
         fin;
      fin;
      mientras junto-a-zumbador hacer
        coge-zumbador;
      repetir n veces
        deja-zumbador;
   fin;
fin;
    inicia-ejecucion
    tres(0);
    mira-norte;
    primera;
    mira-sur;
    gira-izquierda;
    si frente-libre entonces
       avanza;
    mira-sur;
    mientras junto-a-zumbador hacer
       coge-zumbador;
    deja-zumbador;
    segunda;
    mira-oeste;
    ultima;
    deja-zumbador;
        apagate;
    termina-ejecucion
finalizar-programa
