iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;
define-nueva-instruccion avanza-muro como mientras frente-libre hacer avanza;


define-nueva-instruccion retroceder como
inicio
    si frente-bloqueado y no-junto-a-zumbador entonces
    inicio
    sur;
    avanza-muro;
    norte;
    mientras junto-a-zumbador hacer
    inicio
        coge-zumbador;
        avanza-muro;
        deja-zumbador;
        sur;
        avanza-muro;
        norte;
    fin;
    oeste;
    si frente-libre entonces avanza;
    sur;
    si frente-libre entonces avanza-muro;
    norte;
    fin sino
    inicio
    sur;
    si frente-bloqueado entonces
    inicio
        mientras junto-a-zumbador hacer
        inicio
            coge-zumbador;
            norte;
            si frente-libre entonces avanza;
            este;
            avanza;
            sur;
            si frente-libre entonces avanza;
            deja-zumbador;
            oeste;
            avanza;
            sur;
            avanza-muro;
            norte;
        fin;
    fin sino
    inicio
    mientras junto-a-zumbador hacer
        inicio
            coge-zumbador;
            sur;
            avanza;
            deja-zumbador;
            norte;
            avanza;
        fin;
    fin;
    fin;
fin;

define-nueva-instruccion pares como
inicio
si orientado-al-norte entonces sur;
si orientado-al-oeste entonces este;
avanza;
mientras junto-a-zumbador hacer coge-zumbador;
oeste;
avanza-muro;
sur;
avanza-muro;
este;
repetir 3 veces avanza;
mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
oeste;
avanza-muro;
norte;
avanza-muro;
este;
avanza-muro;
sur;
avanza-muro;
norte;
fin;

define-nueva-instruccion impares como
inicio
norte;
si frente-libre o izquierda-libre entonces
inicio
sur;
si frente-libre entonces
inicio
avanza;
fin sino
inicio
este;
avanza;
fin;
mientras junto-a-zumbador hacer
inicio
    repetir 2 veces coge-zumbador;
    repetir 2 veces gira-izquierda;
    avanza;
    deja-zumbador;
    repetir 2 veces gira-izquierda;
    avanza;
fin;
si orientado-al-este entonces
inicio
    oeste;
    avanza;
fin;
norte;
si no junto-a-zumbador entonces avanza;
retroceder;
si no-junto-a-zumbador entonces
inicio
    si frente-libre entonces
    inicio
    avanza;
    fin sino
    inicio
    retroceder;
    fin;
fin;
fin;
si frente-bloqueado y izquierda-bloqueada entonces
inicio
    si no-junto-a-zumbador entonces
    inicio
    sur;
    avanza;
    mientras junto-a-zumbador hacer
    inicio
        repetir 2 veces coge-zumbador;
        norte;
        avanza;
        deja-zumbador;
        sur;
        avanza;
    fin;
    avanza-muro;
    este;
    repetir 2 veces avanza;
    deja-zumbador;
    avanza;
    mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
    oeste;
    avanza-muro;
    norte;
    avanza;
    este;
    avanza-muro;
    norte;
    fin sino
    inicio
    sur;
    avanza;
    mientras junto-a-zumbador hacer
    inicio
        repetir 2 veces coge-zumbador;
        norte;
        avanza;
        deja-zumbador;
        sur;
        avanza;
        fin;
        norte;
        avanza;
    retroceder;
    fin;
fin;
fin;


define-nueva-instruccion comparar como
inicio
    mientras junto-a-zumbador y algun-zumbador-en-la-mochila hacer
    inicio
        coge-zumbador;
        sur;
        si frente-libre entonces
        inicio
        avanza;
        fin sino
        inicio
        este;
        avanza;
        fin;
        repetir 2 veces deja-zumbador;
        repetir 2 veces gira-izquierda;
        avanza;
    fin;
    si no-junto-a-zumbador y ningun-zumbador-en-la-mochila entonces
    inicio
    pares;
    fin sino
    inicio
    si junto-a-zumbador o algun-zumbador-en-la-mochila entonces impares;
    fin;
fin;

define-nueva-instruccion buscar como
inicio
    mientras no-junto-a-zumbador y (izquierda-libre o frente-libre) hacer
    inicio
        si frente-libre entonces
        inicio avanza;
        fin sino
        inicio
        retroceder;
        fin;
    fin;
    si junto-a-zumbador entonces comparar;
fin;

define-nueva-instruccion coge-num como
inicio
    mientras no junto-a-zumbador y (izquierda-libre o frente-libre) hacer
    inicio
        si frente-libre entonces
        inicio avanza;
        fin sino
        inicio
        oeste;
        avanza;
        sur;
        avanza-muro;
        norte;
        fin;
    fin;
    mientras junto-a-zumbador hacer coge-zumbador;
fin;

    inicia-ejecucion
    norte;
    avanza;
    este;
    avanza-muro;
    norte;
    mientras izquierda-libre o frente-libre hacer
    inicio
        coge-num;
        mientras algun-zumbador-en-la-mochila hacer
        inicio
        norte;
        buscar;
        si frente-bloqueado y izquierda-bloqueada y no-junto-a-zumbador entonces
        inicio
            sur;
            avanza-muro;
            este;
            repetir 2 veces avanza;
            deja-zumbador;
            avanza;
            mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
            oeste;
            avanza-muro;
            norte;
            avanza-muro;
            este;
            avanza-muro;
            sur;
            avanza-muro;
            norte;
        fin;
        fin;
    fin;
    sur;
    avanza-muro;
    este;
    repetir 2 veces avanza;
    mientras junto-a-zumbador hacer coge-zumbador;
    oeste;
    avanza-muro;
    mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
        apagate;
    termina-ejecucion
finalizar-programa
