iniciar-programa
define-nueva-instruccion gira(n) como
inicio
    repetir n veces gira-izquierda;
fin;

define-nueva-instruccion vit(f) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        vit(sucede(f));
    fin
    sino
    inicio
        gira(3);
        avanza;
        gira(1);
        mientras junto-a-zumbador hacer avanza;
        repetir f veces deja-zumbador;
        gira(1);
        avanza;
        gira(1);
        mientras frente-libre hacer avanza;
        gira(2);
    fin;
fin;

define-nueva-instruccion pek como
inicio
    mientras no junto-a-zumbador y frente-libre hacer avanza;
    si junto-a-zumbador entonces
    inicio
        vit(0);
        pek;
    fin
    sino
    inicio
        apagate;
    fin;
fin;

define-nueva-instruccion cuent(v) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        cuent(sucede(v));
    fin
    sino
    inicio
        gira(2);
        mientras no-junto-a-zumbador y frente-libre hacer avanza;
        si junto-a-zumbador entonces
        inicio
            gira(2);
            avanza;
        fin
        sino
        inicio
            gira(2);
        fin;
        repetir v veces deja-zumbador;
        avanza;
        sal-de-instruccion;
    fin;
fin;
define-nueva-instruccion rec como
inicio
    mientras no-orientado-al-este hacer gira(1);
    mientras frente-libre y no-junto-a-zumbador hacer avanza;
    si junto-a-zumbador entonces
    inicio
        cuent(0);
        rec;
    fin
    sino
    inicio
        gira(1);
        avanza;
        gira(1);
        mientras frente-libre hacer avanza;
        gira(2);
        pek;
    fin;
fin;

define-nueva-instruccion pep(h) como
inicio
    repetir h veces
    inicio
        avanza;
        mientras junto-a-zumbador hacer
        inicio
            coge-zumbador;
            gira(3);
            avanza;
            deja-zumbador;
            gira(2);
            avanza;
            gira(3);
        fin;
    fin;
    rec;

fin;



define-nueva-instruccion gente(k) como
inicio
    si junto-a-zumbador y orientado-al-este entonces
    inicio
        coge-zumbador;
        gente(sucede(k));
    fin
    sino
    inicio
        si orientado-al-este entonces
        inicio
           gira(2);
           avanza;
           gira(3);
           avanza;
           gira(3);
           mientras no-junto-a-zumbador hacer avanza;
           gira(3);
           repetir 2 veces avanza;
           gira(3);
           pep(k);
           apagate;

       fin
       sino
       inicio
           mientras no-orientado-al-oeste hacer gira(1);
           repetir k veces avanza;


           gente(k);
       fin;
    fin;
fin;


define-nueva-instruccion fil(x) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        fil(sucede(x));
    fin
    sino
    inicio
        avanza;
        gira(3);
        repetir x veces avanza;
        deja-zumbador;
        gira(2);
        mientras frente-libre hacer avanza;
        gira(1);
        avanza;
        gira(1);
        avanza;
    fin;
fin;

    inicia-ejecucion
    mientras no-orientado-al-norte hacer gira(1);
    avanza;
    coge-zumbador;
    fil(0);
    gente(0);
    mientras no-orientado-al-este hacer gira(1);
    apagate;
        apagate;
    termina-ejecucion
finalizar-programa
