iniciar-programa
    define-nueva-instruccion gira (n) como inicio
        repetir n veces inicio
            gira-izquierda;
        fin;
    fin;
    define-nueva-instruccion deja (a) como inicio
        repetir a veces inicio
            deja-zumbador;
        fin;
    fin;
    define-nueva-instruccion NS (d) como inicio (* Para ir al norte dejar algo *)
        si si-es-cero (d) entonces inicio       (* asi como NS (1); y (0) para *)
            mientras no-orientado-al-sur hacer inicio      (* ir al sur *)
                gira-izquierda;
            fin;
        fin
        sino inicio
            mientras no-orientado-al-norte hacer inicio
                gira-izquierda;
            fin;
        fin;
    fin;
    define-nueva-instruccion EO (h) como inicio  (* Para ir al este: EO (1); *)
        si si-es-cero (h) entonces inicio
            mientras no-orientado-al-oeste hacer inicio
                gira-izquierda;
            fin;
        fin
        sino inicio
            mientras no-orientado-al-este hacer inicio
                gira-izquierda;
            fin;
        fin;
    fin;
    define-nueva-instruccion diagonal como inicio
        avanza;
        gira (3);
        avanza;
        gira-izquierda;
    fin;
    define-nueva-instruccion diagonall (s) como inicio
        si frente-libre y derecha-libre entonces inicio
            diagonal;
            si frente-libre y derecha-libre entonces inicio
                deja-zumbador;
                diagonal;
                deja-zumbador;
                diagonall (sucede (sucede (s)));
                NS (0);
                diagonal;
            fin
            sino inicio
                gira (2);
                diagonal;
                gira (2);
            fin;
        fin;
    fin;
    define-nueva-instruccion marcas (f) como inicio
        si junto-a-zumbador entonces inicio
            si frente-libre y derecha-libre entonces inicio
                diagonal;
                si junto-a-zumbador entonces inicio
                    deja (sucede (f));
                    marcas (sucede (f));
                    si orientado-al-norte entonces inicio
                        gira (2);
                        repetir sucede (f) veces inicio
                            diagonal;
                        fin;
                        marcas (0);
                    fin;
                fin
                sino inicio
                    gira (2);
                    diagonal;
                    gira (2);
                fin;
            fin;
        fin;
    fin;
    define-nueva-instruccion ubica1 como inicio
        NS (0);
        mientras frente-libre hacer inicio
            avanza;
        fin;
        EO (0);
        mientras frente-libre hacer inicio
            avanza;
        fin;
        NS (1);
    fin;
    define-nueva-instruccion reubica como inicio
        mientras orientado-al-norte hacer inicio
            si frente-libre y junto-a-zumbador entonces inicio
                avanza;
            fin
            sino inicio
                gira (3);
            fin;
            si no-junto-a-zumbador entonces inicio
                NS (0);
                avanza;
                gira-izquierda;
            fin;
        fin;
        mientras orientado-al-este hacer inicio
            si frente-libre y junto-a-zumbador entonces inicio
                avanza;
            fin
            sino inicio
                gira (3);
            fin;
            si no-junto-a-zumbador entonces inicio
                EO (0);
                avanza;
                gira-izquierda;
            fin;
        fin;
    fin;
    define-nueva-instruccion contorno (g) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            contorno (sucede (g));
        fin
        sino inicio
            deja (g);
            mientras frente-libre hacer inicio
                avanza;
                deja (g);
            fin;
            gira-izquierda;
            mientras frente-libre hacer inicio
                avanza;
                si no-junto-a-zumbador entonces inicio
                    deja (g);
                fin;
            fin;
            gira (2);
            reubica;
            mientras frente-libre hacer inicio
                avanza;
                deja (g);
            fin;
            gira (3);
            mientras frente-libre hacer inicio
                avanza;
                si no-junto-a-zumbador entonces inicio
                    deja (g);
                fin;
            fin;
        fin;
    fin;
    define-nueva-instruccion llena (j) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            llena (sucede (j));
        fin
        sino inicio
            si si-es-cero (precede (j)) entonces inicio
                deja-zumbador;
                apagate;
            fin;
            repetir 2 veces inicio
                mientras no-junto-a-zumbador hacer inicio
                    deja (j);
                    avanza;
                    si junto-a-zumbador entonces inicio
                        gira (2);
                        avanza;
                        gira-izquierda;
                        avanza;
                    fin;
                fin;
                gira (2);
                diagonal;
                gira (2);
                avanza;
            fin;
        fin;
    fin;
    inicia-ejecucion
        ubica1;
        deja-zumbador;
        si frente-bloqueado y izquierda-bloqueada y derecha-bloqueada entonces inicio
            apagate;
        fin;
        diagonall (0);
        NS (1);
        marcas (0);
        NS (1);
        mientras junto-a-zumbador y frente-libre y derecha-libre hacer inicio
            diagonal;
        fin;
        si no-junto-a-zumbador entonces inicio
            gira (2);
            diagonal;
            gira (2);
        fin;
        gira-izquierda;
        contorno (0);
        NS (1);
        diagonal;
        mientras junto-a-zumbador hacer inicio
            llena (0);
            gira (3);
            avanza;
            NS (1);
        fin;
        apagate;
    termina-ejecucion
finalizar-programa
