iniciar-programa
define-nueva-instruccion gira(t) como
    repetir t veces
        gira-izquierda;
define-nueva-instruccion regresa como inicio
    gira(2);
    si frente-libre entonces avanza;
    mientras junto-a-zumbador y frente-libre hacer avanza;
    gira(2);
    si no-junto-a-zumbador entonces avanza;
fin;
define-nueva-instruccion linea-superior como inicio
    si junto-a-zumbador entonces inicio
        si frente-libre entonces inicio
            avanza;
            linea-superior;
            repetir 3 veces deja-zumbador;
        fin
        sino inicio
            regresa;
            repetir 3 veces deja-zumbador;
        fin;
    fin
    sino inicio
        regresa;
    fin;
fin;
define-nueva-instruccion linea-media como inicio
    si junto-a-zumbador entonces inicio
        si frente-libre entonces inicio
            avanza;
            linea-media;
            repetir 4 veces deja-zumbador;
        fin
        sino inicio
            regresa;
            repetir 4 veces deja-zumbador;
        fin;
    fin
    sino inicio
        regresa;
    fin;
fin;
define-nueva-instruccion linea-inferior como inicio
    si junto-a-zumbador entonces inicio
        si frente-libre entonces inicio
            avanza;
            linea-inferior;
            repetir 2 veces deja-zumbador;
        fin
        sino inicio
            regresa;
            repetir 2 veces deja-zumbador;
        fin;
    fin
    sino inicio
        regresa;
    fin;
fin;
define-nueva-instruccion cuenta(x) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        cuenta(sucede(x));
    fin
    sino inicio
        si frente-libre entonces inicio
            avanza;
            cuenta(x);
        fin
        sino inicio
            gira(3);
            mientras frente-libre hacer avanza;
            repetir x veces deja-zumbador;
            apagate;
        fin;
    fin;
fin;
define-nueva-instruccion busca como inicio
    gira(3);
            si frente-bloqueado entonces inicio
            si frente-bloqueado entonces inicio
                gira(1);
                linea-inferior;
                repetir 3 veces coge-zumbador;
                apagate;
            fin;
        fin;
    avanza;
    si junto-a-zumbador entonces inicio
        gira(2);
        avanza;
        gira(3);
        linea-superior;
        repetir 3 veces coge-zumbador;
        gira(3);
        avanza;
            si frente-bloqueado entonces inicio
                gira(1);
                linea-inferior;
                repetir 3 veces coge-zumbador;
                gira(1);
                mientras junto-a-zumbador y frente-libre hacer avanza;
                gira(2);
                si no-junto-a-zumbador entonces avanza;
                cuenta(0);
                apagate;
            fin;
        avanza;
        mientras junto-a-zumbador hacer inicio
            gira(2);
            avanza;
            gira(3);
            linea-media;
            repetir 4 veces coge-zumbador;
            gira(3);
            avanza;
            si frente-bloqueado entonces inicio
                gira(1);
                linea-inferior;
                repetir 3 veces coge-zumbador;
                gira(1);
                mientras junto-a-zumbador y frente-libre hacer avanza;
                gira(2);
                si no-junto-a-zumbador entonces avanza;
                cuenta(0);
                apagate;
            fin;
            avanza;
        fin;
        gira(2);
        avanza;
        gira(3);
    fin;
    linea-inferior;
    repetir 3 veces coge-zumbador;
    gira(1);
    mientras junto-a-zumbador y frente-libre hacer avanza;
    gira(2);
    si no-junto-a-zumbador entonces avanza;
    cuenta(0);
    apagate;
fin;
    inicia-ejecucion
    mientras no orientado-al-sur hacer gira(1);
    mientras frente-libre hacer avanza;
    gira(3);
    mientras frente-libre hacer avanza;
    gira(3);
    mientras no junto-a-zumbador hacer inicio
        si frente-libre entonces inicio
            avanza;
        fin
        sino inicio
            gira(2);
            mientras frente-libre hacer avanza;
            gira(1);
            si frente-bloqueado entonces apagate;
            avanza;
            gira(1);
        fin;
    fin;
    mientras junto-a-zumbador y frente-libre hacer avanza;
    gira(2);
    si no-junto-a-zumbador entonces avanza;
    gira(1);
    busca;
        apagate;
    termina-ejecucion
finalizar-programa
