iniciar-programa
define-nueva-instruccion gira(G) como repetir G veces gira-izquierda;
define-nueva-instruccion pan-totao como
inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        pan-totao;
        deja-zumbador;
    fin sino
    inicio
        gira(2);
        repetir 2 veces avanza;
    fin;
fin;
define-nueva-instruccion pan2 como
inicio
    si frente-libre entonces inicio
        avanza;
        pan2;
        si frente-libre entonces avanza;
    fin sino
    inicio
        gira(1);
        avanza;
        si junto-a-zumbador entonces inicio
           coge-zumbador;
           gira(2);
           avanza;
           deja-zumbador;
           mientras no-orientado-al-norte hacer gira-izquierda;
        fin sino
        inicio
            deja-zumbador;
            gira(2);
            avanza;
            gira(3);
        fin;

    fin;
fin;
define-nueva-instruccion pan como
inicio
    si frente-libre entonces inicio
        avanza;
        pan;
        si frente-libre entonces avanza;
    fin sino
    inicio
    mientras no-orientado-al-sur hacer gira-izquierda;
        pan2;
        si derecha-libre entonces inicio
        mientras no-orientado-al-este hacer gira-izquierda;
        fin;
    fin;
fin;
    inicia-ejecucion
    mientras no-orientado-al-norte hacer gira-izquierda;
    avanza;
    gira(3);
    repetir 99 veces inicio
       mientras frente-libre hacer inicio
           si no-junto-a-zumbador entonces avanza;
           si junto-a-zumbador entonces inicio
               coge-zumbador;
               si no-junto-a-zumbador entonces inicio
               si orientado-al-este entonces inicio
                       mientras no-orientado-al-oeste hacer gira-izquierda;
                       pan;
                   fin sino
                   inicio
                       pan;
                       gira(2);
                   fin;
               fin;
                              si frente-libre entonces inicio
               avanza;
               si junto-a-zumbador y frente-bloqueado entonces inicio
               coge-zumbador;
               si no-junto-a-zumbador entonces inicio

               si orientado-al-este entonces inicio
                       mientras no-orientado-al-oeste hacer gira-izquierda;
                       pan;
                   fin sino
                   inicio
                       pan;
                       gira(2);
                   fin;




               fin;
               fin;
               fin sino
               inicio
                   si derecha-libre y orientado-al-oeste entonces inicio
                      gira(3);
                      avanza;
                      gira(3);
                   fin sino
                   inicio
                       si izquierda-libre y orientado-al-este entonces inicio
                           gira(1);
                           avanza;
                           gira(1);
                       fin;
                   fin;
               fin;
           fin;
           si frente-bloqueado y izquierda-libre  y orientado-al-este entonces inicio
              gira(1);
              avanza;
              gira(1);
           fin sino
           inicio
               si frente-bloqueado y derecha-libre  y orientado-al-oeste entonces inicio
                   gira(3);
                   avanza;
                   gira(3);
               fin sino
               inicio
                   si frente-bloqueado y (derecha-bloqueada o izquierda-bloqueada) entonces inicio
                       mientras no-orientado-al-oeste hacer gira-izquierda;
                       mientras frente-libre hacer avanza;
                       mientras no-orientado-al-sur hacer gira-izquierda;
                       mientras frente-libre hacer avanza;
                       gira(1);
                       avanza;
                       si junto-a-zumbador entonces inicio
                       coge-zumbador;
                       avanza;
                       deja-zumbador;
                       gira(2);
                       repetir 2 veces avanza;
                       fin sino
                       inicio
                           gira(2);
                           avanza;
                       fin;
                       gira(3);
                       mientras frente-libre hacer avanza;
                       gira(1);
                   fin;
               fin;
           fin;
       fin;
       mientras no-orientado-al-sur hacer gira-izquierda;
       mientras frente-libre hacer avanza;
       gira(2);
       avanza;
       gira(3);
    fin;
    gira(3);
    avanza;
    gira(1);
    mientras junto-a-zumbador hacer coge-zumbador;
    repetir 2 veces avanza;
    si junto-a-zumbador entonces pan-totao;
        apagate;
    termina-ejecucion
finalizar-programa
