iniciar-programa
define-nueva-instruccion gira(n) como
inicio
repetir n veces gira-izquierda;
fin;
define-nueva-instruccion dejap como
inicio
repetir 4 veces
inicio
si frente-libre entonces
inicio
avanza;
si junto-a-zumbador entonces
inicio
coge-zumbador;
apagate;
fin;
repetir 4 veces deja-zumbador;
gira(2);
avanza;
gira(1);
fin
sino
gira(3);
fin;
fin;
define-nueva-instruccion cuenta(n) como
inicio
si junto-a-zumbador entonces
inicio
coge-zumbador;
cuenta(sucede(n));
fin
sino
inicio
repetir 3 veces deja-zumbador;
repetir 4 veces
inicio
si frente-libre entonces
inicio
avanza;
si no-junto-a-zumbador entonces
inicio
repetir n veces deja-zumbador;
deja-zumbador;
fin
sino
inicio
repetir 2 veces coge-zumbador;
si no-junto-a-zumbador entonces
inicio
repetir n veces deja-zumbador;
repetir 2 veces coge-zumbador; apagate;
fin;
si junto-a-zumbador entonces
repetir 2 veces deja-zumbador;
fin;
gira(2);
avanza;
gira(1);
fin
sino
gira(3);
fin;
fin;
fin;

define-nueva-instruccion profundidad como
inicio
si frente-libre entonces
inicio
avanza;
repetir 3 veces coge-zumbador;
si no-junto-a-zumbador entonces
inicio
repetir 3 veces deja-zumbador;
profundidad;
gira(2);
si frente-libre entonces
avanza;
gira(2);
fin
sino
inicio
repetir 3 veces deja-zumbador;
cuenta(0);
gira(2);
si frente-libre entonces
avanza;
gira(2);
fin;
fin;

gira(1);
si frente-libre entonces
inicio
avanza;
repetir 3 veces coge-zumbador;
si no-junto-a-zumbador entonces
inicio
repetir 3 veces deja-zumbador;
profundidad;
gira(2);

si frente-libre entonces
avanza;
gira(2);
fin
sino
inicio
repetir 3 veces deja-zumbador;
cuenta(0);
gira(2);
si frente-libre entonces
avanza;
gira(2);
fin;
fin;


gira(2);

si frente-libre entonces
inicio
avanza;
repetir 3 veces coge-zumbador;
si no-junto-a-zumbador entonces
inicio
repetir 3 veces deja-zumbador;
profundidad;
gira(2);
si frente-libre entonces
avanza;
gira(2);
fin
sino
inicio
repetir 3 veces deja-zumbador;
cuenta(0);
gira(2);
si frente-libre entonces
avanza;
gira(2);
fin;
fin;

gira(3);
si frente-libre entonces
inicio
avanza;
repetir 3 veces coge-zumbador;
si no-junto-a-zumbador entonces
inicio
repetir 3 veces deja-zumbador;
profundidad;
gira(2);
si frente-libre entonces
avanza;
gira(2);
fin
sino
inicio
repetir 3 veces deja-zumbador;
cuenta(0);
gira(2);
si frente-libre entonces
avanza;
gira(2);
fin;
fin;


fin;


inicia-ejecucion
si junto-a-zumbador entonces
inicio
coge-zumbador;
coge-zumbador;
apagate;
fin;
si derecha-bloqueada y frente-libre entonces
inicio
    avanza;
    si derecha-libre entonces
    inicio
    gira(3);
    avanza;
    si frente-libre entonces
        inicio
        avanza;
        si derecha-libre entonces
            inicio
            gira(3);
            avanza;
            gira(3);
            si frente-libre entonces
              inicio
                avanza;
                si junto-a-zumbador entonces
                    inicio
                    repetir 3 veces deja-zumbador;
                    apagate;
                    fin
                sino
                inicio
                gira(2);
                avanza;
                gira(1);
                avanza;
                gira(1);
                avanza;
                avanza;
                gira(1);
                avanza;
                gira(2);
                fin;
              fin
            sino
            inicio
            gira(3);
            avanza;
            gira(1);
            avanza;
            gira(1);
            avanza;
            avanza;
            gira(1);
            avanza;
            gira(2);
            fin;
            fin
          sino
          inicio
          gira(2);
          avanza;
          avanza;
          gira(1);
          avanza;
          gira(2);
          fin;

            fin;
        fin
sino
inicio
gira(2);
avanza;
gira(2);
fin;
fin;
si frente-bloqueado y orientado-al-norte  y izquierda-libre entonces
inicio
gira(1);
avanza;
gira(3);
si frente-libre entonces
inicio
    avanza;
    si frente-libre entonces
    inicio
    avanza;
    si frente-bloqueado entonces
    inicio
    gira(1);
    avanza;
    gira(3);
    avanza;
    avanza;
    gira(1);
    mientras frente-libre hacer avanza;
    gira(3);
    mientras frente-libre hacer avanza;
    gira(3);
    mientras no-junto-a-zumbador hacer avanza;
    repetir  8 veces deja-zumbador;
    apagate;


    fin
    sino
    inicio
     gira(2);
    avanza;
    avanza;
    gira(1);
    avanza;
    gira(1);
    fin;
    fin
    sino
    inicio
    gira(2);
    avanza;
    gira(1);
    avanza;
    gira(1);
    fin;

fin
sino
inicio
gira(3);
avanza;
gira(1);
fin;
fin;

    repetir 3 veces deja-zumbador;
    dejap;
    mientras junto-a-zumbador hacer
    profundidad;
        apagate;
    termina-ejecucion
finalizar-programa
