iniciar-programa
define-nueva-instruccion sombra como inicio
    mientras no-junto-a-zumbador hacer inicio
        deja-zumbador;
        avanza;
    fin;
    apagate;
fin;
define-nueva-instruccion cactus como inicio
    mientras no-orientado-al-este hacer gira-izquierda;
    mientras no-junto-a-zumbador hacer avanza;
    gira-izquierda;
    mientras junto-a-zumbador hacer inicio
        coge-zumbador;
        si junto-a-zumbador entonces inicio
            deja-zumbador;
            apagate;
        fin;
        si no-junto-a-zumbador entonces inicio
            deja-zumbador;
            avanza;
        fin;
     fin;
fin;
define-nueva-instruccion recorred como inicio
    repetir 3 veces gira-izquierda;
    avanza;
    mientras frente-libre y no-junto-a-zumbador hacer avanza;
    si junto-a-zumbador entonces inicio
        repetir 2 veces gira-izquierda;
    fin;
    si frente-bloqueado y no-junto-a-zumbador entonces inicio
        repetir 2 veces gira-izquierda;
        mientras no-junto-a-zumbador hacer avanza;
        repetir 3 veces gira-izquierda;
    fin;
fin;
define-nueva-instruccion recorrei como inicio
    gira-izquierda;
    avanza;
    mientras frente-libre y no-junto-a-zumbador hacer avanza;
    si junto-a-zumbador entonces inicio
        repetir 2 veces gira-izquierda;
    fin;
    si frente-bloqueado y no-junto-a-zumbador entonces inicio
        repetir 2 veces gira-izquierda;
        mientras no-junto-a-zumbador hacer avanza;
        coge-zumbador;
        gira-izquierda;
        avanza;
        si junto-a-zumbador entonces apagate;
        deja-zumbador;
    fin;
fin;
define-nueva-instruccion cuentaizq(a) como inicio
    mientras no-orientado-al-sur y no-orientado-al-norte hacer inicio
        avanza;
        si junto-a-zumbador entonces inicio
            mientras no-orientado-al-sur hacer gira-izquierda;
            cuentaizq(sucede(a));
        fin;
        si no-junto-a-zumbador entonces cuentaizq(sucede(a));
    fin;
    si orientado-al-sur entonces inicio
        avanza;
        mientras no-junto-a-zumbador hacer avanza;
        gira-izquierda;
        repetir a veces avanza;
        repetir a veces deja-zumbador;
        mientras no-orientado-al-norte hacer gira-izquierda;
    fin;
fin;
define-nueva-instruccion cuentader(b) como inicio
    mientras no-orientado-al-sur y no-orientado-al-norte hacer inicio
        avanza;
        si junto-a-zumbador entonces inicio
            mientras no-orientado-al-sur hacer gira-izquierda;
            cuentader(sucede(b));
        fin;
        si no-junto-a-zumbador entonces cuentader(sucede(b));
    fin;
    si orientado-al-sur entonces inicio
        avanza;
        mientras no-junto-a-zumbador hacer avanza;
        repetir 3 veces gira-izquierda;
        repetir b veces avanza;
        repetir b veces deja-zumbador;
        mientras no-orientado-al-norte hacer gira-izquierda;
    fin;
fin;
define-nueva-instruccion abajo(c) como inicio
    mientras no-orientado-al-este y no-orientado-al-norte hacer inicio
        avanza;
        si junto-a-zumbador entonces inicio
            mientras no-orientado-al-este hacer gira-izquierda;
            abajo(sucede(c));
        fin;
        si no-junto-a-zumbador entonces abajo(sucede(c));
    fin;
    si orientado-al-este entonces inicio
        avanza;
        mientras no-junto-a-zumbador hacer avanza;
        repetir 3 veces gira-izquierda;
        repetir c veces inicio
            si frente-bloqueado entonces inicio
                repetir 2 veces gira-izquierda;
                avanza;
                mientras no-junto-a-zumbador hacer avanza;
                mientras junto-a-zumbador hacer coge-zumbador;
                repetir 2 veces gira-izquierda;
                avanza;
                mientras frente-libre hacer avanza;
                repetir 3 veces gira-izquierda;
                avanza;
                sombra;
            fin;
            si frente-libre entonces avanza;
        fin;
        repetir c veces deja-zumbador;
        mientras no-orientado-al-norte hacer gira-izquierda;
    fin;
fin;
define-nueva-instruccion abajoo(d) como inicio
    mientras no-orientado-al-oeste y no-orientado-al-norte hacer inicio
        avanza;
        si junto-a-zumbador entonces inicio
            mientras no-orientado-al-oeste hacer gira-izquierda;
            abajoo(sucede(d));
        fin;
        si no-junto-a-zumbador entonces abajoo(sucede(d));
    fin;
    si orientado-al-oeste entonces inicio
        avanza;
        mientras no-junto-a-zumbador hacer avanza;
        gira-izquierda;
        repetir d veces inicio
            si frente-bloqueado entonces inicio
                repetir 2 veces gira-izquierda;
                avanza;
                mientras no-junto-a-zumbador hacer avanza;
                mientras junto-a-zumbador hacer coge-zumbador;
                repetir 2 veces gira-izquierda;
                avanza;
                mientras frente-libre hacer avanza;
                gira-izquierda;
                avanza;
                sombra;
            fin;
            si frente-libre entonces avanza;
        fin;
        repetir d veces deja-zumbador;
        mientras no-orientado-al-norte hacer gira-izquierda;
    fin;
fin;
define-nueva-instruccion paso(e) como inicio
    mientras junto-a-zumbador y no-orientado-al-este hacer inicio
        coge-zumbador;
        paso(sucede(e));
    fin;
    si no-junto-a-zumbador entonces inicio
        repetir 2 veces gira-izquierda;
        mientras no-junto-a-zumbador hacer avanza;
        gira-izquierda;
        repetir e veces avanza;
        repetir e veces deja-zumbador;
    fin;
fin;
define-nueva-instruccion baja(f) como inicio
    mientras junto-a-zumbador y no-orientado-al-sur hacer inicio
        coge-zumbador;
        baja(sucede(f));
    fin;
    si no-junto-a-zumbador entonces inicio
        repetir 2 veces gira-izquierda;
        mientras no-junto-a-zumbador hacer avanza;
        repetir 3 veces gira-izquierda;
        repetir f veces inicio
            si frente-bloqueado entonces inicio
                repetir 2 veces gira-izquierda;
                avanza;
                mientras no-junto-a-zumbador hacer avanza;
                mientras junto-a-zumbador hacer coge-zumbador;
                repetir 2 veces gira-izquierda;
                avanza;
                mientras frente-libre hacer avanza;
                repetir 3 veces gira-izquierda;
                avanza;
                sombra;
            fin;
            si frente-libre entonces avanza;
        fin;
        repetir f veces deja-zumbador;
    fin;
fin;
define-nueva-instruccion pasoo(g) como inicio
    mientras junto-a-zumbador y no-orientado-al-oeste hacer inicio
        coge-zumbador;
        pasoo(sucede(g));
    fin;
    si no-junto-a-zumbador entonces inicio
        repetir 2 veces gira-izquierda;
        mientras no-junto-a-zumbador hacer avanza;
        repetir 3 veces gira-izquierda;
        repetir g veces avanza;
        repetir g veces deja-zumbador;
    fin;
fin;
define-nueva-instruccion bajaa(i) como inicio
    mientras junto-a-zumbador y no-orientado-al-sur hacer inicio
        coge-zumbador;
        bajaa(sucede(i));
    fin;
    si no-junto-a-zumbador entonces inicio
        repetir 2 veces gira-izquierda;
        mientras no-junto-a-zumbador hacer avanza;
        gira-izquierda;
        repetir i veces inicio
            si frente-bloqueado entonces inicio
                repetir 2 veces gira-izquierda;
                avanza;
                mientras no-junto-a-zumbador hacer avanza;
                mientras junto-a-zumbador hacer coge-zumbador;
                repetir 2 veces gira-izquierda;
                avanza;
                mientras frente-libre hacer avanza;
                gira-izquierda;
                avanza;
                sombra;
            fin;
            si frente-libre entonces avanza;
        fin;
        repetir i veces deja-zumbador;
    fin;
fin;
    inicia-ejecucion
        cactus;
        deja-zumbador;
        mientras orientado-al-norte hacer inicio
            recorred;
            si orientado-al-norte entonces recorrei;
        fin;
        si orientado-al-este entonces inicio
            cuentaizq(0);
            gira-izquierda;
            avanza;
            mientras no-junto-a-zumbador hacer avanza;
            repetir 3 veces gira-izquierda;
            avanza;
            mientras no-junto-a-zumbador hacer avanza;
            coge-zumbador;
            repetir 2 veces gira-izquierda;
            abajo(0);
            repetir 2 veces gira-izquierda;
            mientras frente-libre hacer inicio
                repetir 2 veces gira-izquierda;
                avanza;
                mientras no-junto-a-zumbador hacer avanza;
                paso(0);
                repetir 2 veces gira-izquierda;
                avanza;
                mientras no-junto-a-zumbador hacer avanza;
                baja(0);
            fin;
            si frente-bloqueado entonces inicio
                repetir 2 veces gira-izquierda;
                avanza;
                mientras no-junto-a-zumbador hacer avanza;
                mientras junto-a-zumbador hacer coge-zumbador;
                repetir 2 veces gira-izquierda;
                avanza;
                mientras no-junto-a-zumbador hacer avanza;
                repetir 3 veces gira-izquierda;
                mientras junto-a-zumbador hacer coge-zumbador;
                sombra;
            fin;
        fin;
        si orientado-al-oeste entonces inicio
            cuentader(0);
            repetir 3 veces gira-izquierda;
            avanza;
            mientras no-junto-a-zumbador hacer avanza;
            gira-izquierda;
            avanza;
            mientras no-junto-a-zumbador hacer avanza;
            repetir 2 veces gira-izquierda;
            coge-zumbador;
            abajoo(0);
            repetir 2 veces gira-izquierda;
            mientras frente-libre hacer inicio
                repetir 2 veces gira-izquierda;
                avanza;
                mientras no-junto-a-zumbador hacer avanza;
                pasoo(0);
                repetir 2 veces gira-izquierda;
                avanza;
                mientras no-junto-a-zumbador hacer avanza;
                bajaa(0);
            fin;
            si frente-bloqueado entonces inicio
                repetir 2 veces gira-izquierda;
                avanza;
                mientras no-junto-a-zumbador hacer avanza;
                mientras junto-a-zumbador hacer coge-zumbador;
                repetir 2 veces gira-izquierda;
                avanza;
                mientras no-junto-a-zumbador hacer avanza;
                gira-izquierda;
                mientras junto-a-zumbador hacer coge-zumbador;
                sombra;
            fin;
        fin;
        apagate;
    termina-ejecucion
finalizar-programa
