iniciar-programa
define-nueva-instruccion a como si frente-libre entonces avanza;
define-nueva-instruccion gi como gira-izquierda;
define-nueva-instruccion mv como repetir 2 veces gi;
define-nueva-instruccion gd como repetir 3 veces gi;
define-nueva-instruccion dejar(x) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        dejar(precede(x));
    fin
    sino
    repetir x veces deja-zumbador;
fin;
define-nueva-instruccion eliminar(x) como
inicio
    si si-es-cero (x) y junto-a-zumbador entonces inicio gi;  sal-de-instruccion; fin
    sino
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        eliminar(precede(x));
    fin
    sino repetir x veces deja-zumbador;
fin;
define-nueva-instruccion contar(x) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        contar(sucede(x));
    fin
    sino
    mientras frente-libre hacer
    inicio
        a;
        si junto-a-zumbador entonces eliminar(x);
        si junto-a-zumbador entonces
        inicio
            si orientado-al-norte entonces inicio repetir x veces deja-zumbador; gd; fin
            sino
            dejar(x);
        fin;
    fin;
    mv;
    mientras frente-libre hacer a;
    deja-zumbador;
    mv;
    a;
    mientras no-junto-a-zumbador hacer si frente-libre entonces a sino inicio mv; mientras frente-libre hacer a; apagate; fin;
    contar(0);
fin;
    inicia-ejecucion
    contar(0);
        apagate;
    termina-ejecucion
finalizar-programa
