iniciar-programa
define-nueva-instruccion g(n) como
repetir n veces gira-izquierda;
define-nueva-instruccion paso(n) como
inicio
    si junto-a-zumbador entonces
    inicio
        si junto-a-zumbador entonces
        inicio
           coge-zumbador;
           g(1);
           si junto-a-zumbador entonces
           inicio
               coge-zumbador;
               g(2);
               si junto-a-zumbador entonces
               inicio
                   mientras junto-a-zumbador hacer
                   coge-zumbador;
                   g(1);
               fin;
           fin;
        fin;
        repetir n veces
        avanza;
        si junto-a-zumbador entonces
        paso(n);
    fin;
fin;
define-nueva-instruccion llega(n) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        llega(sucede(n));
    fin
    sino
    inicio
        repetir n veces
        avanza;
        paso(n);
    fin;
fin;
define-nueva-instruccion checa(n) como
inicio
    si frente-libre entonces
    inicio
        avanza;
        si junto-a-zumbador entonces
        inicio
            mientras junto-a-zumbador hacer
            coge-zumbador;
        fin
        sino
        deja-zumbador;
        checa(sucede(n));
    fin
    sino
    inicio
        g(2);
        repetir n veces
        avanza;
        si orientado-al-sur entonces
        checa(0);
    fin;
fin;
define-nueva-instruccion cuentas(n) como
inicio
    si frente-libre entonces
    inicio
        avanza;
        si junto-a-zumbador entonces
        inicio
            mientras junto-a-zumbador hacer
            coge-zumbador;
            cuentas(n);
        fin
        sino
        inicio
            cuentas(sucede(n));
        fin;
    fin
    sino
    inicio
        g(2);
        mientras no-junto-a-zumbador hacer
        avanza;
        repetir n veces
        deja-zumbador;
        coge-zumbador;
    fin;
fin;
define-nueva-instruccion cuenta(n) como
inicio
    si frente-libre entonces
    inicio
        avanza;
        si junto-a-zumbador entonces
        inicio
            mientras junto-a-zumbador hacer
            coge-zumbador;
            cuenta(n);
        fin
        sino
        inicio
            cuenta(sucede(n));
        fin;
    fin
    sino
    inicio
        g(2);
        mientras no-junto-a-zumbador hacer
        avanza;
            repetir n veces
            deja-zumbador;
    fin;
fin;
define-nueva-instruccion acomoda(n) como
si frente-libre entonces
inicio
    avanza;
    g(1);
    si junto-a-zumbador entonces
    cuenta(0)
    sino
    inicio
        deja-zumbador;
        cuentas(0);
    fin;
    si junto-a-zumbador entonces
    cuenta(0)
    sino
    inicio
        deja-zumbador;
        cuentas(0);
    fin;
    g(3);
    si frente-libre entonces
    acomoda(sucede(n))
    sino
    inicio
        g(2);
        repetir n veces
        avanza;
    fin;
fin;
define-nueva-instruccion acaba(n) como
inicio
        si no-junto-a-zumbador entonces
        inicio
        si frente-libre entonces
        inicio
            avanza;
            acaba(n)
        fin
        sino
        inicio
            g(2);
            mientras no-junto-a-zumbador hacer
            avanza;
            repetir n veces
            deja-zumbador;
        fin;
        fin
        sino
        inicio
            coge-zumbador;
            acaba(sucede(n))
        fin;
fin;
inicia-ejecucion
    llega(0);
    mientras no-orientado-al-norte hacer
    g(1);
    checa(0);
    acomoda(1);
    acomoda(1);
    repetir 2 veces
    inicio
        si junto-a-zumbador entonces
        inicio
            si frente-libre entonces
            inicio
                avanza;
                acaba(0)
            fin
            sino
            g(2);
        fin
        sino
        inicio
            si frente-libre entonces
            inicio
                deja-zumbador;
                avanza;
                acaba(0);
                coge-zumbador;
            fin
            sino
            inicio
                g(2);
            fin;
        fin;
    fin;
    g(1);
    repetir 2 veces
    inicio
        si junto-a-zumbador entonces
        cuenta(0)
        sino
        inicio
            deja-zumbador;
            cuentas(0);
        fin;
    fin;
    g(3);
    deja-zumbador;
        apagate;
    termina-ejecucion
finalizar-programa
