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

define-nueva-instruccion fijate como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        si junto-a-zumbador entonces
        inicio
            coge-zumbador;
            fijate;
            repetir 2 veces deja-zumbador;
        fin
        sino
        inicio
            mientras no-orientado-al-sur hacer gira(1);
            deja-zumbador;
        fin;
    fin
    sino
    inicio
        mientras no-orientado-al-norte hacer gira(1);
    fin;
fin;

define-prototipo-instruccion cuenta(b);
define-nueva-instruccion par(k) como
inicio
    si orientado-al-norte y junto-a-zumbador entonces
    inicio
        coge-zumbador;
        par(precede(k));
    fin
    sino
    inicio
        si orientado-al-sur y junto-a-zumbador entonces
        inicio
            coge-zumbador;
            par(sucede(k));
        fin
        sino
        inicio

            cuenta(k);
        fin;
    fin;
fin;

define-nueva-instruccion bost(p) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        bost(sucede(p))
    fin
    sino
    inicio
        repetir p veces deja-zumbador;
        repetir 100 veces si junto-a-zumbador entonces coge-zumbador;
        si junto-a-zumbador entonces
        inicio
            sal-de-instruccion;
        fin
        sino
        inicio
            repetir p veces deja-zumbador;
            sal-de-instruccion;
        fin;
    fin;
fin;

define-nueva-instruccion cuenta(b) como
inicio
    si no-junto-a-zumbador entonces avanza;
    si junto-a-zumbador entonces
    inicio
        bost(0);
        fijate;
        par(b);
    fin
    sino
    inicio
        gira(2);
        avanza;
        gira(3);
        avanza;
        si junto-a-zumbador entonces
        inicio
            bost(0);
            fijate;
            par(b);
        fin
        sino
        inicio
            gira(2);
            avanza;
            gira(3);
            avanza;
            si junto-a-zumbador entonces
            inicio
                 bost(0);
                 fijate;
                 par(b);
            fin
            sino
            inicio
                 gira(2);
                 avanza;
                 gira(3);
                 avanza;
                 si junto-a-zumbador entonces
                 inicio
                     bost(0);
                     fijate;
                     par(b);
                 fin
                 sino
                 inicio
                      repetir 4 veces
                      inicio
                          si derecha-libre entonces gira(1);
                      fin;
                      si derecha-libre entonces
                      inicio
                      gira(2);
                      avanza;
                      gira(1);
                      avanza;
                      fin
                      sino
                      inicio

                      mientras derecha-libre hacer gira(1);
                      mientras derecha-bloqueada hacer
                      inicio
                          si frente-libre entonces avanza;
                          si frente-bloqueado entonces gira(1);
                      fin;
                      gira(2);
                      avanza;
                      fin;
                 fin;
                     repetir b veces deja-zumbador;
                     apagate;

            fin;
        fin;
    fin;

fin;

define-prototipo-instruccion final;

define-nueva-instruccion bass(x) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
       bass(sucede(x));
    fin
    sino
    inicio
        repetir x veces deja-zumbador;
        repetir 100 veces si junto-a-zumbador entonces coge-zumbador;
        si junto-a-zumbador entonces
        inicio
            repetir 100 veces deja-zumbador;
            gira(2);
            avanza;
            gira(2);
            cuenta(0);

        fin
        sino
        inicio
            repetir x veces deja-zumbador;
            repetir 100 veces deja-zumbador;
            gira(3);
            final;
        fin;
    fin;
fin;

define-nueva-instruccion final como
inicio
    avanza;
    si junto-a-zumbador entonces
    inicio
        bass(0);
    fin
    sino
    inicio
        gira(2);
        avanza;
        gira(3);
        avanza;
        si junto-a-zumbador entonces
        inicio
            bass(0);
        fin
        sino
        inicio
            gira(2);
            avanza;
            gira(3);
            avanza;
            si junto-a-zumbador entonces
            inicio
                bass(0);
            fin
            sino
            inicio
                gira(2);
                avanza;
                gira(3);
                avanza;
                si junto-a-zumbador entonces
                inicio
                    bass(0);
                fin
                sino
                inicio
                    deja-zumbador;
                    apagate;
                fin;
            fin;
        fin;
        final;
    fin;
fin;

    inicia-ejecucion

    final;
        apagate;
    termina-ejecucion
finalizar-programa
