iniciar-programa

define-nueva-instruccion medir2(a) como inicio
 si no si-es-cero (a) entonces inicio
   si frente-libre entonces inicio
        avanza;
        medir2(precede(a));
    fin sino inicio
     repetir 2 veces gira-izquierda;
     mientras frente-libre hacer avanza;
     repetir 2 veces gira-izquierda;
   fin;
 fin sino inicio
     repetir 2 veces gira-izquierda;
     mientras frente-libre hacer avanza;
     repetir 3 veces gira-izquierda;
 fin;
fin;

define-nueva-instruccion medir(x) como inicio
    si frente-libre entonces inicio
        avanza;
        medir(sucede(x));
    fin sino inicio
        repetir 2 veces gira-izquierda;
        repetir x veces avanza;
        gira-izquierda;
        medir2(x);
    fin;
fin;

define-nueva-instruccion mitad(z) como inicio
    si frente-libre entonces inicio
        avanza;
        si frente-libre entonces inicio
            avanza;
            mitad(sucede(z));
        fin sino inicio
            repetir 2 veces gira-izquierda;
            avanza;
            repetir z veces avanza;
            si orientado-al-sur entonces inicio
                gira-izquierda;
            fin sino inicio
                repetir 3 veces gira-izquierda;
            fin;
            repetir z veces avanza;
            repetir 2 veces gira-izquierda;
        fin;
    fin sino inicio
        repetir 2 veces gira-izquierda;
        repetir z veces avanza;
            si orientado-al-sur entonces inicio
                gira-izquierda;
            fin sino inicio
                repetir 3 veces gira-izquierda;
            fin;
            repetir z veces avanza;
            repetir 2 veces gira-izquierda;
    fin;
fin;

define-nueva-instruccion numeros(x) como inicio
    si frente-libre entonces inicio
        avanza;
        gira-izquierda;
        repetir precede(x) veces inicio
            avanza;
            repetir x veces deja-zumbador;
        fin;
        gira-izquierda;
        repetir 2 veces inicio
            repetir precede(x) veces inicio
                avanza;
                repetir x veces deja-zumbador;
            fin;
        fin;
        gira-izquierda;
        repetir 2 veces inicio
            repetir precede(x) veces inicio
                avanza;
                repetir x veces deja-zumbador;
            fin;
        fin;
        gira-izquierda;
        repetir 2 veces inicio
            repetir precede(x) veces inicio
                avanza;
                repetir x veces deja-zumbador;
            fin;
        fin;
        gira-izquierda;
        repetir precede(x) veces inicio
            avanza;
            repetir x veces deja-zumbador;
        fin;
     repetir 3 veces gira-izquierda;
     numeros(sucede(x));
    fin;
fin;


    inicia-ejecucion
    mientras no-orientado-al-norte hacer gira-izquierda;
    medir(0);
    mitad(0);
    deja-zumbador;
    numeros(2);

        apagate;
    termina-ejecucion
finalizar-programa
