iniciar-programa
define-nueva-instruccion gira-derecha como
inicio
    repetir 3 veces
       gira-izquierda;
fin;
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-sur como
inicio
    mientras no-orientado-al-sur hacer
       gira-izquierda;
fin;
define-nueva-instruccion mira-oeste como
inicio
   mientras no-orientado-al-oeste hacer
      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 ubicate como
inicio
    mira-oeste;
    mientras frente-libre hacer
       avanza;
    mira-sur;
    mientras frente-libre hacer
       avanza;
fin;
define-nueva-instruccion mayor(n) como
inicio
    si no(si-es-cero(n)) y junto-a-zumbador entonces
    inicio
        coge-zumbador;
        mayor(precede(n));
        deja-zumbador;
    fin
    sino
    inicio
        si no(si-es-cero(n)) y no-junto-a-zumbador entonces
        inicio
            paso-atras;
            deja-zumbador;
            avanza;
        fin;
    fin;
fin;
define-nueva-instruccion mayizq(n) como
inicio
   si no(si-es-cero(n)) y junto-a-zumbador entonces
   inicio
       coge-zumbador;
       mayizq(precede(n));
       deja-zumbador;
   fin
   sino
   inicio
      si no(si-es-cero(n)) y no-junto-a-zumbador entonces
      inicio
         paso-atras;
         gira-derecha;
         paso-atras;
         deja-zumbador;
         avanza;
         gira-izquierda;
         avanza;
      fin;
   fin;
fin;
define-nueva-instruccion mayder(n) como
inicio
    si no(si-es-cero(n)) y junto-a-zumbador entonces
    inicio
        coge-zumbador;
        mayder(precede(n));
        deja-zumbador;
    fin
    sino
    inicio
       si no(si-es-cero(n)) y no-junto-a-zumbador entonces
       inicio
       paso-atras;
       gira-izquierda;
       paso-atras;
       deja-zumbador;
       avanza;
       gira-derecha;
       avanza;
       fin;
    fin;
fin;
define-nueva-instruccion  revisa(n) como
inicio
        si frente-libre entonces
        inicio
            avanza;
            mayor(n);
            si izquierda-libre entonces
            inicio
               gira-izquierda;
               avanza;
               mayizq(n);
               paso-atras;
               gira-derecha;
            fin;
            si derecha-libre entonces
            inicio
               gira-derecha;
               avanza;
               mayder(n);
               paso-atras;
               gira-izquierda;
            fin;
            paso-atras;
        fin;
        si derecha-libre entonces
        inicio
            gira-derecha;
            avanza;
            mayor(n);
            paso-atraS;
            gira-izquierda;
        fin;
        si izquierda-libre entonces
        inicio
            gira-izquierda;
            avanza;
            mayor(n);
            paso-atras;
            gira-derecha;
        fin;
        repetir 2 veces
           gira-izquierda;
        si frente-libre entonces
        inicio
            avanza;
            mayor(n);
            si izquierda-libre entonces
            inicio
                gira-izquierda;
                avanza;
                mayizq(n);
                paso-atras;
                gira-derecha;
            fin;
            si derecha-libre entonces
            inicio
               gira-derecha;
               avanza;
               mayder(n);
               paso-atras;
               gira-izquierda;
            fin;
            paso-atras;
        fin;
        repetir 2 veces
           gira-izquierda;
fin;
define-nueva-instruccion condiciones(n) como
inicio
si junto-a-zumbador entonces
inicio
    coge-zumbador;
    condiciones(sucede(n));
    deja-zumbador;
fin
sino
inicio
    si frente-libre y izquierda-libre entonces
    inicio
        repetir 2 veces
           gira-izquierda;
        si frente-libre entonces
        inicio
            repetir 2 veces
               gira-izquierda;
            revisa(n);
            repetir 7 veces
            inicio
                si junto-a-zumbador entonces
                   coge-zumbador;
            fin;
            si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                mira-este;
            fin
            sino
               mira-norte;
        fin
        sino
        inicio
           repetir 2 veces
              gira-izquierda;
           revisa(n);
           repetir 4 veces
           inicio
               si junto-a-zumbador entonces
                  coge-zumbador;
           fin;
           si junto-a-zumbador entonces
           inicio
               coge-zumbador;
               mira-este;
           fin
           sino
              mira-norte;
        fin;
        sal-de-instruccion;
    fin;
    si izquierda-libre y frente-bloqueado entonces
    inicio
        repetir 2 veces
          gira-izquierda;
        si frente-libre entonces
        inicio
           repetir 2 veces
             gira-izquierda;
           revisa(n);
           repetir 4 veces
           inicio
               si junto-a-zumbador entonces
                  coge-zumbador;
           fin;
           si junto-a-zumbador entonces
           inicio
               coge-zumbador;
               mira-este;
           fin
           sino
              mira-norte;
        fin;
        sal-de-instruccion;
    fin;
    si izquierda-bloqueada y frente-bloqueado entonces
    inicio
        revisa(n);
        repetir 2 veces
        inicio
            si junto-a-zumbador entonces
               coge-zumbador;
        fin;
        si junto-a-zumbador entonces
         inicio
            coge-zumbador;
            mira-este;
         fin
         sino
            mira-norte;
        sal-de-instruccion;
    fin;
    si izquierda-bloqueada y frente-libre entonces
    inicio
        repetir 2 veces
            gira-izquierda;
        si frente-libre entonces
        inicio
           repetir 2 veces
              gira-izquierda;
           revisa(n);
           repetir 4 veces
           inicio
               si junto-a-zumbador entonces
               inicio
                   coge-zumbador;
               fin;
           fin;
           si junto-a-zumbador entonces
           inicio
               coge-zumbador;
               mira-este;
           fin
           sino
              mira-norte;
        fin
        sino
        inicio
            repetir 2 veces
               gira-izquierda;
            revisa(n);
            repetir 2 veces
            inicio
               si junto-a-zumbador entonces
                  coge-zumbador;
            fin;
            si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                mira-este;
            fin
            sino
               mira-norte;
        fin;
        sal-de-instruccion;
    fin;

fin;
fin;
define-nueva-instruccion arriba(n) como
inicio
    si derecha-libre entonces
    inicio
        condiciones(0);
        si orientado-al-este entonces
        inicio
            mira-norte;
            si frente-libre entonces
               avanza
            sino
            inicio
                gira-derecha;
                avanza;
                mira-sur;
                mientras frente-libre hacer
                  avanza;
                mira-norte;
            fin;
            arriba(sucede(n));
        fin
        sino
        inicio
            si frente-libre entonces
                avanza
            sino
            inicio
               gira-derecha;
               avanza;
               mira-sur;
               mientras frente-libre hacer
                  avanza;
               mira-norte;
            fin;
            arriba(n);
        fin;
    fin
    sino
    inicio
       ubicate;
       mientras junto-a-zumbador hacer
         coge-zumbador;
       repetir n veces
          deja-zumbador;
    fin;
fin;
define-nueva-instruccion condiciones2(n) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        condiciones2(sucede(n));
        deja-zumbador;
    fin
    sino
    inicio
    si frente-bloqueado y derecha-bloqueada entonces
    inicio
       revisa(n);
       repetir 2 veces
       inicio
          si junto-a-zumbador entonces
             coge-zumbador;
       fin;
       si junto-a-zumbador entonces
       inicio
           coge-zumbador;
           mira-este;
       fin
       sino
          mira-norte;
       sal-de-instruccion;
    fin;
    si derecha-bloqueada entonces
    inicio
        repetir 2 veces
          gira-izquierda;
        si frente-libre entonces
        inicio
            repetir 2 veces
               gira-izquierda;
            revisa(n);
            repetir 4 veces
            inicio
                si junto-a-zumbador entonces
                    coge-zumbador;
            fin;
            si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                mira-este;
            fin
            sino
               mira-norte;
        fin
        sino
        inicio
           repetir 2 veces
              gira-izquierda;
           revisa(n);
           repetir 2 veces
           inicio
               si junto-a-zumbador entonces
                  coge-zumbador;
           fin;
           si junto-a-zumbador entonces
           inicio
               coge-zumbador;
               mira-este;
           fin
           sino
              mira-norte;
        fin;
    fin;
    fin;
fin;
define-nueva-instruccion derecha(n) como
inicio
   si frente-libre entonces
   inicio
      condiciones2(0);
      si orientado-al-este entonces
      inicio
          mira-norte;
          avanza;
          derecha(sucede(n));
      fin
      sino
      inicio
          mira-norte;
          avanza;
          derecha(n);
      fin;
   fin
   sino
   inicio
      ubicate;
      repetir n veces
         deja-zumbador;
   fin;
fin;
    inicia-ejecucion
      ubicate;
      mira-norte;
      arriba(0);
      mira-este;
      mientras frente-libre hacer
         avanza;
      mira-norte;
      derecha(0);
      mira-este;
      mientras frente-libre hacer
          avanza;
      mira-norte;
      mientras frente-libre hacer
         avanza;
      condiciones2(0);
      si orientado-al-este entonces
      inicio
          ubicate;
          deja-zumbador;
      fin;
        apagate;
    termina-ejecucion
finalizar-programa
