iniciar-programa

define-nueva-instruccion menor(c) como inicio
    si no si-es-cero(c) y junto-a-zumbador entonces inicio
        coge-zumbador;
        menor(precede(c));
        deja-zumbador;
    fin sino inicio
        si si-es-cero(c) entonces inicio
            mientras junto-a-zumbador hacer coge-zumbador;
        fin;
    fin;
fin;

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


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

    fin;
fin;

define-nueva-instruccion mayor(w) como inicio
    si no si-es-cero (w) y junto-a-zumbador entonces inicio
        coge-zumbador;
        mayor(precede(w));
        deja-zumbador;
    fin sino inicio
        si no-junto-a-zumbador entonces inicio
            repetir 2 veces gira-izquierda;
            avanza;
            repetir 2 veces gira-izquierda;
            repetir w veces coge-zumbador;
            avanza;
            repetir w veces deja-zumbador;
        fin;
    fin;
fin;

define-nueva-instruccion compara(q) como inicio
  si frente-libre y junto-a-zumbador entonces inicio
       coge-zumbador;
       compara(sucede(q));
  fin sino inicio
      repetir q veces deja-zumbador;
      avanza;
      mayor(q);
  fin;
fin;

define-nueva-instruccion ordena(z) como inicio
    repetir z veces inicio
        mientras no-orientado-al-oeste hacer gira-izquierda;
        mientras frente-libre hacer avanza;
        repetir 2 veces gira-izquierda;
        repetir z veces inicio
           compara(0);
        fin;
        mientras no-orientado-al-oeste hacer gira-izquierda;
        mientras frente-libre hacer avanza;
        repetir 2 veces gira-izquierda;                                                                                    
    fin;
    repetir z veces distanzia(0);
fin;

define-nueva-instruccion acomoda(x) como inicio
    si frente-libre y junto-a-zumbador entonces inicio
        avanza;
        acomoda(sucede(x));
    fin sino inicio
        si junto-a-zumbador entonces inicio
            ordena(x);
        fin sino inicio
            ordena(precede(x));
        fin;
    fin;
fin;

    inicia-ejecucion
    si junto-a-zumbador entonces inicio
        repetir 3 veces gira-izquierda;
       acomoda(0);
       mientras junto-a-zumbador hacer coge-zumbador;
       repetir 2 veces gira-izquierda;
       mientras frente-libre hacer avanza;
    fin;
        apagate;
    termina-ejecucion
finalizar-programa
