iniciar-programa
    define-nueva-instruccion gira-derecha como
        repetir 3 veces gira-izquierda;

    define-nueva-instruccion vuelta como
        repetir 2 veces gira-izquierda;

        define-nueva-instruccion deja-zumbadores(t) como
    si no-junto-a-zumbador entonces
        repetir t veces deja-zumbador;


    define-nueva-instruccion avanzarCub(t) como
        repetir t veces si frente-libre entonces inicio
            avanza;
            si no junto-a-zumbador entonces
                repetir t veces deja-zumbador;
        fin;

    define-nueva-instruccion avanzar(t) como inicio
        repetir t veces avanza;
    fin;

    define-nueva-instruccion divide(f) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            si no si-es-cero(f) entonces inicio
                si junto-a-zumbador entonces coge-zumbador;
                divide(sucede(f));
            fin sino divide(sucede(f));
            avanza;
        fin
        sino inicio
            mientras no-orientado-al-sur hacer gira-izquierda;
            avanzar(f);
            gira-derecha;
            fin;
    fin;


    define-nueva-instruccion enmedio(i) como inicio
        si derecha-libre entonces inicio
            si frente-libre entonces inicio
                avanza;
                gira-derecha;
                avanza;
                si frente-libre entonces inicio
                    gira-izquierda;
                    si frente-libre entonces inicio
                        enmedio(sucede(i));
                        deja-zumbador;
                    fin;
                fin sino
                si si-es-cero(i) entonces inicio
                    gira-derecha;
                    avanza;
                    gira-derecha;
                    avanza;
                fin;
            fin sino vuelta;
        fin;
    fin;

    define-nueva-instruccion llena-cub(j) como inicio
       repetir 4 veces inicio
           mientras no-junto-a-zumbador hacer inicio
               deja-zumbadores(sucede(j));
               avanza;
           fin;
        gira-derecha;
        avanza;
        fin;
    fin;

    define-nueva-instruccion esquina(u) como inicio
       repetir 4 veces
       si junto-a-zumbador y derecha-libre y frente-libre entonces inicio
            avanza;
            gira-derecha;
            avanza;
            deja-zumbadores(sucede(u));
            gira-derecha;
            avanza;
            gira-derecha;
            avanza;
            gira-izquierda;
            mientras junto-a-zumbador y frente-libre hacer avanza;
            vuelta;
            avanza;
            vuelta;
            gira-izquierda;
        fin sino sal-de-instruccion;
        avanza;
        gira-derecha;
        avanza;
        gira-derecha;
        avanza;
        llena-cub(u);
        vuelta;
        avanza;
        esquina(sucede(u));
    fin;


    define-nueva-instruccion cuenta(t) como inicio
        si junto-a-zumbador y frente-libre entonces inicio
            avanza;
            gira-derecha;
            si frente-libre entonces inicio
                avanza;
                repetir 4 veces inicio
                    gira-derecha;
                    deja-zumbadores(sucede(t));
                    avanzarCub(sucede(t));
                fin;
            fin;
            mientras no-orientado-al-sur hacer gira-izquierda;
        fin;
    fin;

    inicia-ejecucion
        mientras no-orientado-al-norte hacer gira-izquierda;
        enmedio(0);
        divide(0);
        deja-zumbador;
        mientras no-orientado-al-sur hacer gira-izquierda;
        cuenta(1);
        esquina(2);
        apagate;
    termina-ejecucion
finalizar-programa
