iniciar-programa
    define-prototipo-instruccion cambio;
    define-prototipo-instruccion ir2(i);
    define-nueva-instruccion g(g) como
    inicio
        repetir g veces
        gira-izquierda;
    fin;
    define-nueva-instruccion dejar(d) como
    inicio
        si frente-libre entonces
            inicio
                avanza;
                dejar(sucede(d));
            fin
        sino
            inicio
            deja-zumbador;
            g(2);
            repetir d veces
            avanza;
            g(1);
            fin;
    fin;
    define-nueva-instruccion cargar(c) como
    inicio
        si junto-a-zumbador entonces
            inicio
            coge-zumbador;
            si frente-libre entonces
            avanza;
            cargar(sucede(c));
            fin
        sino
           inicio
            g(3);
            dejar(0);
            repetir precede(c) veces
            avanza;
            g(3);
           fin;

    fin;
    define-nueva-instruccion ir3 como
    inicio
         mientras frente-libre y no-junto-a-zumbador hacer
         avanza;
         si junto-a-zumbador entonces
         inicio
             g(3);
             ir2(0);
         fin
         sino
         cambio;

    fin;
    define-nueva-instruccion ir2(i) como
    inicio
            si junto-a-zumbador entonces
            inicio
            coge-zumbador;
            si frente-libre entonces
            avanza;
            ir2(sucede(i));
            fin
        sino
           inicio
            g(2);
            repetir precede(i) veces
            avanza;
            g(3);
           fin;
         fin;
    define-nueva-instruccion ir1 como
    inicio
       si junto-a-zumbador entonces
        inicio
        g(3);
        cargar(0);
    fin;
    fin;
    define-nueva-instruccion viga como
    inicio
        mientras frente-libre y no-junto-a-zumbador hacer
        avanza;
        ir1;
        mientras frente-libre hacer
        ir3;
        si frente-bloqueado entonces
        cambio;

    fin;
    define-nueva-instruccion cambio como
    inicio
    g(2);
    mientras frente-libre hacer
    avanza;
    g(1);
    si frente-libre entonces
    avanza
    sino
        inicio
        mientras no-orientado-al-oeste hacer
        g(1);
        apagate;
        fin;
    g(1);
    viga;
    fin;
    define-nueva-instruccion taswey como
    inicio
        avanza;
        g(1);
        mientras frente-libre hacer avanza;
        g(3);
    fin;
    inicia-ejecucion
    taswey;
    si frente-bloqueado entonces
    viga
    sino
    mientras frente-libre hacer
    viga;
    apagate;
    termina-ejecucion
finalizar-programa
