iniciar-programa

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

define-nueva-instruccion compara(q) como inicio
    si 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 2 veces gira-izquierda;
         mientras junto-a-zumbador y frente-libre hacer avanza;
         repetir 2 veces gira-izquierda;
         si no-junto-a-zumbador entonces avanza;
  repetir z veces inicio
      repetir z veces inicio
          compara(0);
      fin;
      repetir 2 veces gira-izquierda;
      mientras junto-a-zumbador y frente-libre hacer avanza;
      repetir 2 veces gira-izquierda;
      si no-junto-a-zumbador entonces avanza;
  fin;

fin;

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

define-nueva-instruccion suma como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        suma;
        deja-zumbador;
    fin sino inicio
        si frente-bloqueado entonces apagate;
        avanza;
    fin;
fin;

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

    inicia-ejecucion

            mientras junto-a-zumbador hacer inicio
                mientras junto-a-zumbador y frente-libre hacer avanza;
                repetir 2 veces gira-izquierda;
                si no-junto-a-zumbador entonces avanza;
                mide(0);
                suma;
                acumulado(0);
                avanza;
                gira-izquierda;

            fin;
        apagate;
    termina-ejecucion
finalizar-programa
