iniciar-programa

define-nueva-instruccion m(z) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        m(sucede(z));
    fin sino inicio
        si orientado-al-oeste entonces inicio
            repetir 2 veces avanza;
            mientras no-junto-a-zumbador hacer avanza;
            repetir 2 veces gira-izquierda;
        fin sino inicio
            repetir z veces deja-zumbador;
            avanza;
        fin;

        mientras no-orientado-al-norte hacer gira-izquierda;
        repetir z veces inicio
            mientras junto-a-zumbador hacer coge-zumbador;
            repetir z veces deja-zumbador;
            si frente-libre entonces avanza;
        fin;
        repetir 2 veces gira-izquierda;
        mientras frente-libre hacer avanza;
        mientras no-orientado-al-este hacer gira-izquierda;
    fin;
fin;

define-nueva-instruccion p(x) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        p(sucede(x));
        m(0);
    fin sino inicio
        avanza;

    fin;
fin;

define-nueva-instruccion reparte como inicio
    mientras no-junto-a-zumbador hacer avanza;
    avanza;
    repetir 2 veces gira-izquierda;
    p(0);
fin;

define-nueva-instruccion lugar como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        lugar;
        avanza;
    fin sino inicio
         mientras frente-libre hacer avanza;
         repetir 2 veces gira-izquierda;
    fin;
fin;

define-nueva-instruccion derecha(f) como inicio
   si frente-libre entonces inicio
       avanza;
       derecha(sucede(f));
   fin sino inicio
    repetir 2 veces gira-izquierda;
    repetir f veces avanza;
    mientras junto-a-zumbador hacer avanza;
    mientras no-junto-a-zumbador hacer avanza;
    avanza;
    repetir f veces deja-zumbador;
    repetir 2 veces gira-izquierda;
    repetir 2 veces avanza;
    mientras no-junto-a-zumbador hacer avanza;
   fin;
fin;

define-nueva-instruccion izq(q) como inicio
    si no-junto-a-zumbador entonces inicio
        avanza;
        izq(sucede(q));
    fin sino inicio
        repetir 2 veces avanza;
        repetir precede(q) veces deja-zumbador;
    fin;
fin;

define-nueva-instruccion mide como inicio
mientras no-orientado-al-oeste hacer gira-izquierda;
    mientras junto-a-zumbador y frente-libre hacer avanza;
    si no-junto-a-zumbador entonces inicio
         repetir 2 veces gira-izquierda;
         avanza;
         repetir 2 veces gira-izquierda;
        derecha(0);
    fin;
    mientras no-orientado-al-este hacer gira-izquierda;
    mientras junto-a-zumbador hacer avanza;
    izq(0);
fin;

define-nueva-instruccion cuenta(c) como inicio
    si frente-libre entonces inicio
        avanza;
        cuenta(sucede(c));
    fin sino inicio
        repetir 2 veces gira-izquierda;
        repetir c veces avanza;
        repetir c veces deja-zumbador;
    fin;
fin;


define-nueva-instruccion ver(b) como inicio
    si no si-es-cero (b) y junto-a-zumbador entonces inicio
        coge-zumbador;
        ver(precede(b));
    fin sino inicio
        si junto-a-zumbador entonces inicio
            repetir 2 veces avanza;
            deja-zumbador;
        fin sino inicio              
            repetir 2 veces avanza;
            cuenta(0);
        fin;
    fin;
fin;

define-nueva-instruccion compara(a) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        compara(sucede(a));
    fin sino inicio
        avanza;
        ver(a);
    fin;
fin;

define-nueva-instruccion final como inicio
    si izquierda-libre entonces inicio
        gira-izquierda;
        avanza;
        repetir 3 veces gira-izquierda;
        mientras frente-libre hacer avanza;
        repetir 3 veces gira-izquierda;
        avanza;
        gira-izquierda;
        repetir 2 veces avanza;
        deja-zumbador;
    fin sino inicio
        mientras izquierda-bloqueada hacer avanza;
        avanza;
        deja-zumbador;

    fin;
fin;

    inicia-ejecucion

    repetir 3 veces gira-izquierda;
    avanza;
    repetir 2 veces gira-izquierda;
    lugar;
    repetir 2 veces gira-izquierda;
    avanza;
    repetir 2 veces gira-izquierda;
    deja-zumbador;
    avanza;
    reparte;
     final;
     repetir 2 veces gira-izquierda;
     avanza;
     mientras no-junto-a-zumbador hacer avanza;
     mide;
    repetir 2 veces gira-izquierda;
    compara(0);



        apagate;
    termina-ejecucion
finalizar-programa
