iniciar-programa
define-nueva-instruccion gira-derecha como
inicio
    gira-izquierda;
    gira-izquierda;
    gira-izquierda;
fin;

define-nueva-instruccion media-vuelta como
inicio
    gira-izquierda;
    gira-izquierda;
fin;

define-nueva-instruccion ve-al-inicio como
inicio
    mientras no orientado-al-oeste hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    si frente-bloqueado entonces media-vuelta;
fin;
define-nueva-instruccion vas2(x)como
inicio
si junto-a-zumbador entonces
inicio
    coge-zumbador;
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        si junto-a-zumbador entonces
        inicio
            deja-zumbador;
            vas2(sucede(x));
        fin
        sino
        inicio
            repetir 2 veces deja-zumbador;
            si frente-libre entonces
            inicio
                avanza;
            fin
            sino
            inicio
                ve-al-inicio;
                repetir x veces
                inicio
                    deja-zumbador;
                    si frente-libre entonces avanza;
                fin;
                apagate;
            fin;
            vas2(x);
        fin;
    fin;
    vas2(sucede(x));
fin
sino
inicio
    si frente-libre entonces
    inicio
        avanza;
    fin
    sino
    inicio
        ve-al-inicio;
                repetir x veces
                inicio
                    deja-zumbador;
                    si frente-libre entonces avanza;
                fin;
                apagate;
    fin;
fin;
vas2(x);
fin;

define-nueva-instruccion vas(x) como
inicio
si junto-a-zumbador entonces
inicio
    coge-zumbador;
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        vas(sucede(x));
        si frente-libre entonces
        inicio
            avanza;
        fin
        sino
        inicio
            media-vuelta;
            repetir x veces
            inicio
                repetir 2 veces deja-zumbador;
                avanza;
            fin;
            ve-al-inicio;
            vas2(0);
        fin;
        (*vas(sucede(x)); *)

    fin
    sino
    inicio
        deja-zumbador;
        si frente-libre entonces
        inicio
            avanza;
        fin
        sino
        inicio
           media-vuelta;
            repetir x veces
            inicio
                repetir 2 veces deja-zumbador;
                avanza;
            fin;
            ve-al-inicio;
            vas2(0);
        fin;
    fin;
fin
sino
inicio
        si frente-libre entonces
        inicio
            avanza;
        fin
        sino
        inicio
            media-vuelta;
            repetir x veces
            inicio
                repetir 2 veces deja-zumbador;
                si frente-libre entonces avanza;
            fin;
            ve-al-inicio;
            vas2(0);
        fin;
fin;
vas(x);
fin;
    inicia-ejecucion
    ve-al-inicio;
    vas(0);
        apagate;
    termina-ejecucion
finalizar-programa
