iniciar-programa
define-nueva-instruccion gira(n) como
inicio
    repetir n veces gira-izquierda;
fin;

define-nueva-instruccion blass como
inicio
    mientras no-junto-a-zumbador hacer avanza;
        repetir 51 veces
        inicio
            si no-junto-a-zumbador entonces
            inicio
                repetir 51 veces deja-zumbador;
            fin;
            si junto-a-zumbador entonces coge-zumbador;
        fin;
        si junto-a-zumbador entonces
        inicio
            mientras junto-a-zumbador hacer coge-zumbador;
            deja-zumbador;
            avanza;
            blass;
        fin
        sino
        inicio
            gira(3);
            sal-de-instruccion;
        fin;
fin;

define-nueva-instruccion plat(z) como
inicio
    si frente-libre entonces
     inicio
         avanza;
         plat(z);
     fin;
     mientras no-orientado-al-norte hacer gira(1);
     repetir z veces avanza;
fin;

define-nueva-instruccion plot(p) como
inicio
     si frente-libre entonces
     inicio
         avanza;
         plot(p);
     fin;
     mientras no-orientado-al-este hacer gira(1);
     repetir p veces avanza;
fin;

define-nueva-instruccion comida(x) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        comida(sucede(x));
    fin
    sino
    inicio
        gira(2);
        si frente-libre entonces
        inicio
            avanza;
            plot(x);
        fin
        sino
        inicio
            gira(2);
        fin;
        gira(3);
        si frente-libre entonces
        inicio
           repetir 51 veces deja-zumbador;
           avanza;
           plat(x);
        fin
        sino
        inicio
            gira(2);

        fin;
        mientras no-orientado-al-este hacer gira(1);
        repetir x veces
        inicio
            repetir x veces
            inicio
                si no-junto-a-zumbador entonces deja-zumbador;
                si frente-libre entonces avanza;
            fin;

            gira(2);
            repetir x veces avanza;
            si no-junto-a-zumbador entonces
            inicio
                gira(2);
                avanza;
                gira(2);
            fin;
            gira(3);
            si frente-libre entonces avanza;
            gira(3);
        fin;
        mientras no-orientado-al-sur hacer gira(1);
        repetir x veces
        inicio
            si frente-libre entonces avanza;
        fin;
        si frente-libre entonces blass;
        mientras no-orientado-al-oeste hacer gira(1);

        sal-de-instruccion;
    fin;
fin;

define-nueva-instruccion kop como
inicio
    mientras no-junto-a-zumbador y frente-libre hacer avanza;
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        si junto-a-zumbador entonces
        inicio
            deja-zumbador;
            gira(2);
            comida(0);
        fin
        sino
        inicio
            deja-zumbador;
            si frente-libre entonces
            inicio
                avanza;
                kop;
            fin
            sino
            inicio
                si izquierda-bloqueada entonces apagate;
                gira(1);
                avanza;
                gira(1);
                mientras frente-libre hacer avanza;
                gira(2);
            fin;
        fin;

    fin
    sino
    inicio
        gira(1);
        si frente-bloqueado entonces apagate;
        avanza;
        gira(1);
        mientras frente-libre hacer avanza;
        gira(2);
    fin;
    kop;

fin;

    inicia-ejecucion
    mientras frente-libre hacer avanza;
    gira(3);
    mientras frente-libre hacer avanza;
    gira(2);
    kop;
        apagate;
    termina-ejecucion
finalizar-programa
