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

define-nueva-instruccion lleva(b) como
si junto-a-zumbador entonces
inicio
    coge-zumbador;
    lleva(sucede(b));
fin
sino
inicio
    avanza;
    repetir b veces deja-zumbador;
fin;

define-nueva-instruccion baja(a) como
si junto-a-zumbador entonces
inicio
    coge-zumbador;
    baja(sucede(a));
fin
sino
inicio
    repetir a veces deja-zumbador;
    avanza;
    repetir a veces deja-zumbador;
fin;

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

    inicia-ejecucion
    mientras junto-a-zumbador hacer coge-zumbador;
    avanza;
    mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
    mientras frente-libre hacer
    inicio
        gira(1);
        avanza;
        gira(2);
        baja(0);
        avanza;
        gira(2);
        sube;
        avanza;
        gira(3);
        lleva(0);
    fin;
    gira(2);
    lleva(0);
    gira(2);
    avanza;
    mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
    gira(2);
    mientras frente-libre hacer
    inicio
        avanza;
        mientras junto-a-zumbador hacer coge-zumbador;
        si frente-bloqueado entonces
        inicio
            gira(2);
            mientras frente-libre hacer avanza;
            gira(1);
            avanza;
            mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
            avanza;
            gira(1);
            mientras frente-libre hacer
            inicio
                avanza;
                si junto-a-zumbador entonces
                inicio
                     gira(1);
                     mientras junto-a-zumbador hacer coge-zumbador;
                     repetir 3 veces avanza;
                     mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                     gira(2);
                     repetir 3 veces avanza;
                     gira(1);
                fin;
            fin;
        fin;
    fin;
    gira(1);
    repetir 2 veces avanza;
    gira(1);
    mientras frente-libre hacer avanza;
    gira(1);
    avanza;
    mientras junto-a-zumbador hacer coge-zumbador;
    gira(2);
    avanza;
    gira(1);
        apagate;
    termina-ejecucion
finalizar-programa
