iniciar-programa

    define-nueva-instruccion norte como
        mientras no-orientado-al-norte hacer
            gira-izquierda;

    define-nueva-instruccion sur como
        mientras no-orientado-al-sur hacer
            gira-izquierda;

    define-nueva-instruccion este como
        mientras no-orientado-al-este hacer
            gira-izquierda;

    define-nueva-instruccion oeste como
        mientras no-orientado-al-oeste hacer
            gira-izquierda;

    define-nueva-instruccion deja (n) como inicio
        mientras junto-a-zumbador hacer
            coge-zumbador;
        repetir n veces
            deja-zumbador;
    fin;

    define-nueva-instruccion determina como inicio
        norte;
        si frente-libre entonces inicio
            avanza;
            si no-junto-a-zumbador entonces inicio
                sur;
                avanza;
                deja (3);
            fin
            sino inicio
                sur;
                avanza;
            fin;
        fin
        sino inicio
            deja(3);
        fin;
        sur;
        si frente-libre entonces inicio
            avanza;
            si no-junto-a-zumbador entonces inicio
                norte;
                avanza;
                deja (3);
            fin
            sino inicio
                norte;
                avanza;
            fin;
        fin
        sino inicio
            deja(3);
        fin;
        este;
        si frente-libre entonces inicio
            avanza;
            si no-junto-a-zumbador entonces inicio
                oeste;
                avanza;
                deja (3);
            fin
            sino inicio
                oeste;
                avanza;
            fin;
        fin
        sino inicio
            deja(3);
        fin;
        oeste;
        si frente-libre entonces inicio
            avanza;
            si no-junto-a-zumbador entonces inicio
                este;
                avanza;
                deja (3);
            fin
            sino inicio
                este;
                avanza;
            fin;
        fin
        sino inicio
            deja(3);
        fin;
    fin;

    define-nueva-instruccion perimetro como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            si no-junto-a-zumbador entonces inicio
                deja (2);
                determina;
                norte;
                si frente-libre entonces inicio
                    avanza;
                    si junto-a-zumbador entonces
                        perimetro;
                    sur;
                    avanza;
                fin;
                sur;
                si frente-libre entonces inicio
                    avanza;
                    si junto-a-zumbador entonces
                        perimetro;
                    norte;
                    avanza;
                fin;
                este;
                si frente-libre entonces inicio
                    avanza;
                    si junto-a-zumbador entonces
                        perimetro;
                    oeste;
                    avanza;
                fin;
                oeste;
                si frente-libre entonces inicio
                    avanza;
                    si junto-a-zumbador entonces
                        perimetro;
                    este;
                    avanza;
                fin;
            fin
            sino inicio
                deja-zumbador;
            fin;
        fin;
    fin;

    define-nueva-instruccion come_relleno como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            si junto-a-zumbador entonces inicio
                coge-zumbador;
                norte;
                si frente-libre entonces inicio
                    avanza;
                    si junto-a-zumbador entonces
                        come_relleno;
                    sur;
                    avanza;
                fin;
                sur;
                si frente-libre entonces inicio
                    avanza;
                    si junto-a-zumbador entonces
                        come_relleno;
                    norte;
                    avanza;
                fin;
                este;
                si frente-libre entonces inicio
                    avanza;
                    si junto-a-zumbador entonces
                        come_relleno;
                    oeste;
                    avanza;
                fin;
                oeste;
                si frente-libre entonces inicio
                    avanza;
                    si junto-a-zumbador entonces
                        come_relleno;
                    este;
                    avanza;
                fin;
            fin
            sino inicio
                deja-zumbador;
            fin;
        fin;
    fin;

    inicia-ejecucion
        perimetro;
        come_relleno;
        apagate;
    termina-ejecucion
finalizar-programa
