iniciar-programa
define-nueva-instruccion iniciar como inicio
        mientras no-orientado-al-norte hacer gira-izquierda;
        mientras frente-libre hacer avanza;
        repetir 3 veces gira-izquierda;
        repetir 2 veces avanza;
        repetir 3 veces gira-izquierda;
        mientras frente-libre hacer avanza;(*saltar*)
        repetir 1000 veces coge-zumbador;
        repetir 2 veces gira-izquierda;
        mientras frente-libre hacer avanza;
        gira-izquierda;
        repetir 2 veces avanza;
        gira-izquierda;
        mientras frente-libre hacer avanza;
        repetir 2 veces gira-izquierda;
        mientras no-junto-a-zumbador hacer avanza;
fin;
define-nueva-instruccion juntar (j) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        juntar(sucede(j));
    fin sino inicio
        mientras no-junto-a-zumbador y frente-libre hacer avanza;
        si junto-a-zumbador entonces inicio
            repetir j veces inicio
                si junto-a-zumbador entonces coge-zumbador;
            fin;
            juntar (j);
        fin;
        si frente-bloqueado entonces inicio
            repetir 2 veces gira-izquierda;
            mientras frente-libre hacer avanza;
            gira-izquierda;
            mientras frente-libre hacer avanza;
            repetir j veces deja-zumbador;
            apagate;
        fin;
    fin;
fin;
define-nueva-instruccion pasos (p) como inicio
    si junto-a-zumbador entonces inicio
        repetir p veces deja-zumbador;
        si frente-libre entonces inicio
            avanza;
        fin sino inicio
            repetir 2 veces gira-izquierda;
            juntar(0);
        fin;
        pasos(sucede(p));
    fin sino inicio
        mientras no-junto-a-zumbador y frente-libre hacer avanza;
        si frente-bloqueado entonces inicio
            repetir 2 veces gira-izquierda;
            juntar(0);
        fin;
        pasos(0);
    fin;
fin;
define-nueva-instruccion comparar (c) como inicio
    si no si-es-cero (C) entonces inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            comparar(precede(c));
        fin sino inicio
        fin;
    fin sino inicio
    si junto-a-zumbador entonces inicio
        mientras junto-a-zumbador hacer coge-zumbador;
        si frente-libre entonces avanza;
    fin sino inicio
        deja-zumbador;
        si frente-libre entonces avanzA;
    fin;
    fin;
fin;
define-nueva-instruccion cuenta (m) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        cuenta (sucede(m));
    fin sino inicio
        mientras no-junto-a-zumbador hacer avanza;
        repetir 3 veces gira-izquierda;
        mientras frente-libre hacer inicio
            comparar(m);
            si no-junto-a-zumbador entonces inicio
                si frente-libre entonces avanzA;
            fin;
        fin;
        si frente-bloqueado entonces inicio
            comparar(m);
            repetir 2 veces gira-izquierda;
        fin;
    fin;
fin;
    inicia-ejecucion
        iniciar;
        cuenta (0);
        pasos(0);
        apagate;
    termina-ejecucion
finalizar-programa
