iniciar-programa

define-nueva-instruccion g(n) como repetir n veces gira-izquierda;

define-nueva-instruccion az como mientras no-junto-a-zumbador hacer avanza;

define-nueva-instruccion contar como inicio
    si frente-libre entonces inicio
       avanza;
       contar;
       deja-zumbador;
    fin
    sino mientras junto-a-zumbador hacer coge-zumbador;
fin;

define-nueva-instruccion ceroc como inicio
    si frente-libre entonces inicio
       avanza;
       ceroc;
       deja-zumbador;
    fin
    sino inicio
       g(2);
       mientras frente-libre hacer  avanza;
       mientras junto-a-zumbador hacer coge-zumbador;
    fin;
fin;

define-nueva-instruccion moveri(n) como inicio
    si junto-a-zumbador entonces inicio
       coge-zumbador;
       moveri(sucede(n));
       deja-zumbador;
    fin
    sino inicio
       repetir precede(n) veces avanza;
       si junto-a-zumbador entonces inicio
           mientras no-orientado-al-este hacer g(1);
           contar;
       fin;
    fin;
fin;

define-nueva-instruccion mover(n) como inicio
    si junto-a-zumbador entonces inicio
       coge-zumbador;
       mover(sucede(n));
       deja-zumbador;
    fin
    sino inicio
       repetir n veces avanza;
       si junto-a-zumbador entonces inicio
           mientras no-orientado-al-oeste hacer g(1);
           contar;
           deja-zumbador;
           apagate;
       fin;
    fin;
fin;

    inicia-ejecucion
        g(3);

        si no-junto-a-zumbador entonces inicio
            ceroc;
            deja-zumbador;
            apagate;
        fin;
        mientras frente-libre hacer avanza;
        g(2);
        si no-junto-a-zumbador entonces inicio
            mientras frente-libre hacer avanza;
            g(2);
            ceroc;
            deja-zumbador;
            apagate;
        fin;
        mientras frente-libre hacer avanza;
        g(2);

        moveri(0);
        avanza;
        az;
        g(2);
        mientras algun-zumbador-en-la-mochila hacer inicio
            mover(0);
            avanza;
            az;
            g(2);
            mover(0);
            avanza;
            az;
            g(2);
        fin;
        apagate;
    termina-ejecucion
finalizar-programa
