Autor Tema: Quiero que produzca números distantes pero sólo produce 0 y 9.

0 Usuarios y 1 Visitante están viendo este tema.

08 Octubre, 2023, 01:52 am
Leído 607 veces

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
El resultado (N) quisiera que fuese: 0, 9, 5, 3, 7, 2, 1, 4, 6, 8, o algo similar, es decir, la idea es que produzca números del 0 al 9, enteros, sin repetir, en un orden tal que sean lo más distantes posibles a los anteriores:
Teniendo estos disponibles: x12345678x
se elige el 5 porque es el que está en el medio (el 4 también pero por ahora se elige el mayor en caso de iguales).
Teniendo: x1234x678x
se elige 3 porque entre 0 y 5 hay 4 números y entre 5 y 9 hay 3, el más distante está en el medio de donde haya más números entre los ya elegidos. De nuevo hay un empate, esta vez entre 2 y 3, y de nuevo se elige el mayor.
Y así sucesivamente.

Pero lo que estoy obteniendo es 0, 9, 9, 9... y siempre 9.

¿Qué debo modificar?

Código: (actionscript) [Seleccionar]
Escena 1
   actions for fotograma 1
      N = 0;
      C = String(N).charat(N);
      trace (N+", "+C);
      if (C == 0) {
         trace ("para que C sea 0 usar N: "+N);
      } else if (C == -9) {
         trace ("para que C sea -9 usar N: "+N);
      } else if (C == 4.5) {
         trace ("para que C sea 4.5 usar N: "+N);
      } else if (C == -7.2) {
         trace ("para que C sea -7.2 usar N: "+N);
      }
   actions for fotograma 2
      N = 9;
      C = String(N).charat(N);
      trace (N+", "+C);
      if (C == 0) {
         trace ("para que C sea 0 usar N: "+N);
      } else if (C == -9) {
         trace ("para que C sea -9 usar N: "+N);
      } else if (C == 4.5) {
         trace ("para que C sea 4.5 usar N: "+N);
      } else if (C == -7.2) {
         trace ("para que C sea -7.2 usar N: "+N);
      }
   actions for fotograma 3
      ListPart1 = 0;
      ListPart2 = 9;
      ListParts = 2;
   actions for fotograma 4
      Mayordistancia = 0;
      Puntero = ListParts;
   actions for fotograma 5
      Distancia = eval("ListPart"+Puntero)-eval("ListPart"+(Puntero-1));
      if (Distancia>Mayordistancia) {
         Mayordistancia = Distancia;
         NElegido = Puntero;
      }
      Puntero = Puntero-1;
   actions for fotograma 6
      if (Puntero>1) {
         gotoAndPlay (5);
      } else {
         N = Math.ceil(eval("ListPart"+NElegido)-eval("ListPart"+(NElegido-1))/2);
         C = String(N).charat(N);
         trace (N+", "+C);
         if (C == 0) {
            trace ("para que C sea 0 usar N: "+N);
         } else if (C == -9) {
            trace ("para que C sea -9 usar N: "+N);
         } else if (C == 4.5) {
            trace ("para que C sea 4.5 usar N: "+N);
         } else if (C == -7.2) {
            trace ("para que C sea -7.2 usar N: "+N);
         }
      }
   actions for fotograma 8
      // Agregar N en el lugar que le corresponde en la lista.
      if (N<eval("ListPart"+Puntero)) {
         Saver = eval("ListPart"+Puntero);
         set ("ListPart"+Puntero, N);
         N = Saver;
      } else {
         Puntero = Puntero+1;
         if (Puntero>ListParts) {
            // Agregar N al final de la lista.
            set ("ListPart"+Puntero, N);
            ListParts = ListParts+1;
            // Producir nuevo N.
            gotoAndPlay (4);
         } else {
            // Ver si al nuevo N le corresponde estar en la siguiente parte.
            gotoAndPlay (7);
         }
      }
   actions for fotograma 9
      Puntero = Puntero+1;
      // Correr hacia atrás a los elementos de la lista.
      Saver = eval("ListPart"+Puntero);
      set ("ListPart"+Puntero, N);
      N = Saver;
   actions for fotograma 10
      if (Puntero == ListParts) {
         ListParts = ListParts+1;
         // Sólo falta correr al último elemento.
         set ("ListPart"+ListParts, N);
         gotoAndPlay (4);
      } else {
         gotoAndPlay (9);
      }

08 Octubre, 2023, 03:18 pm
Respuesta #1

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada
Hola, es difícil analizar y encontrar justo lo que te equivocas , debería conocer mejor el lenguaje en el que programas, pero revisa si en alguno de los pasos que te propongo tienes alguna diferencia de criterio.

Yo primero crearía una variable donde alojaría cada conjunto o seguidilla de números que quieres analizar, al principio tienes 0-9  luego de un ciclo tienes 0-8 luego dos grupos 1-4 y 6-8 , casa alojando los diferentes grupos y los recorres por bucles.

Ahora lo que sigue  es discernir cual es el mas distante de cada grupo, o bien sobre el grupo original, puesto que en tu segundo paso escoges al cero , pero el  extremo entre 0-8, según el mismo criterio que elegiste el 9 entre 0-9 te volverá a dar el 8 y  no el 0, así que interpreto que lo que tomás de referencia es la distancia a cada extremo osea has considerado en tu segundo calculo la distancia al 9 aunque  ya lo separaste del grupo.

Ahora que criterio usas para evaluar distancia ?
La máxima longitud entre elementos del grupo, no es el criterio ya que ,entre 1-8 escojes 5  que está al medio y no en uno de los extremos como hiciste en 0-9, osea  el maximo lo descartas...
y tambien no es la máxima distancia como el sumatorio del cuadrado de la diferencia entre dos elementos del grupo eso te debe generar 9-0-8-1-7-2-6-3-5-4.

Así que porque escojes el 5?  porque esta alejado de los que ya elegiste? Aver si ponemos una fórmula  para cada número n dentro del grupo si evaluas $$(n-n_{min})+(n_{max}-n)$$ donde el mínimo y el máximo son 0 y 9,  entonces te da lo mismo para cualquier n , entonces lo que hace es esto  $$\sqrt{(n-n_{min})^2+(n_{max}-n)^2}$$ y eso si evalúa una distancia pero te escogerá 8 y 1, no 5 y 4 que es lo que speras

Así que lo que tienes que imponerte es que la diferencia de distancias entre cada número que evalúas y cada uno de los extremos sea mínima  esto es $$\sqrt{((n-n_{min})-(n_{max}-n))^2}=\sqrt{(2n-(n_{min}+n_{max}))^2}$$ eso si te da como resultado o bien 5 o bien 4 y escojes el 5 por ser el mayor de los dos.

Pero luego tienes otro problema  si te fijas en el número 7 es el que te debe seguir en la lista y no el número 3 por ser mayor que el 2 dentro del grupo, así que tienes que imponer otro criterio, que si bien el número tiene la mínima diferencia de distancia entre los extremos debe tener la mayor distancia a los extremos entre todos los grupos, 7 tiene distancia 2 respecto de 5 y 9, pero 3 tiene distancia 3 respecto al 0, y como ésta es mayor será el siguiente de la lista, así el orden será

9-0-5-3-7-2-8-6-4-1

los últimos 4 tienen todos la misma distancia a los extremos y se ordenan de mayor a menor

Si es que entendí lo que quieres hacer, claro, esos serían los criterios a programar

Los criterios que te dí sirven para cualquier conjunto de datos, no solo de 0 a 9 ,   osea desde el número x hasta el número y te los podrá discernir , luego e queda armar una lista con los que te van saliendo.

PD, en definitiva no sé por qué escoges el orden  0-9 cuando abiertamente dices que ante igualdad de distancia escoges el mayor y debería ser 9-0

Saludos
Saludos  \(\mathbb {R}^3\)

17 Octubre, 2023, 02:01 pm
Respuesta #2

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Creo que ya logré hacer que funcione básicamente bien, ahora intentaré que funcione mejor y mejorar el código en varios aspectos.

Código: [Seleccionar]
Escena 1
   actions for fotograma 1
      trace ("F1");
      N = 0;
      C = String(N).charat(N);
      trace (N+" resulta "+C);
      if (C == 0) {
         trace ("para que C sea 0 usar N: "+N);
      } else if (C == -9) {
         trace ("para que C sea -9 usar N: "+N);
      } else if (C == 4.5) {
         trace ("para que C sea 4.5 usar N: "+N);
      } else if (C == -7.2) {
         trace ("para que C sea -7.2 usar N: "+N);
      }
   actions for fotograma 2
      trace ("F2");
      N = 9;
      C = String(N).charat(N);
      trace (N+" resulta "+C);
      if (C == 0) {
         trace ("para que C sea 0 usar N: "+N);
      } else if (C == -9) {
         trace ("para que C sea -9 usar N: "+N);
      } else if (C == 4.5) {
         trace ("para que C sea 4.5 usar N: "+N);
      } else if (C == -7.2) {
         trace ("para que C sea -7.2 usar N: "+N);
      }
   actions for fotograma 3
      trace ("F3");
      ListPart1 = 0;
      ListPart2 = 9;
      ListParts = 2;
   actions for fotograma 4
      trace ("F4");
      Mayordistancia = 0;
      Puntero = ListParts;
      trace ("Produciendo un nuevo N...");
      trace ("Puntero se ubica al final de la lista, en "+Puntero);
   actions for fotograma 5
      trace ("F5");
      trace ("Buscando la mayor distancia entre las partes de la lista...");
      Distancia = eval("ListPart"+Puntero)-eval("ListPart"+(Puntero-1));
      trace ("Distancia entre la parte "+Puntero+" y "+(Puntero-1)+" es "+Distancia);
      trace ("Son "+eval("ListPart"+Puntero)+" y "+eval("ListPart"+(Puntero-1)));
      if (Distancia>Mayordistancia) {
         trace ("Es la mayor por ahora en esta búsqueda");
         Mayordistancia = Distancia;
         NElegido = Puntero;
         trace ("NElegido por ahora es "+Puntero);
      }
      Puntero = Puntero-1;
   actions for fotograma 6
      trace ("F6");
      if (Puntero>1) {
         trace ("Aún hay partes en la lista, seguir revisando.");
         gotoAndPlay (5);
      } else {
         // N = Math.ceil((eval("ListPart"+NElegido)+eval("ListPart"+(NElegido-1))/2);
         Parte1delaOperacion = eval("ListPart"+NElegido);
         trace ("Parte1delaOperacion es "+Parte1delaOperacion);
         Parte2delaOperacion = eval("ListPart"+(NElegido-1));
         trace ("Parte2delaOperacion es "+Parte2delaOperacion);
         N = Math.ceil((Parte1delaOperacion+Parte2delaOperacion)/2);
         C = String(N).charat(N);
         trace (N+" resulta "+C);
         if (C == 0) {
            trace ("para que C sea 0 usar N: "+N);
         } else if (C == -9) {
            trace ("para que C sea -9 usar N: "+N);
         } else if (C == 4.5) {
            trace ("para que C sea 4.5 usar N: "+N);
         } else if (C == -7.2) {
            trace ("para que C sea -7.2 usar N: "+N);
         }
         Lista = "";
      }
   actions for fotograma 7
      trace ("F7");
   actions for fotograma 8
      trace ("F8");
      trace ("Agregando N en el lugar que le corresponde en la lista...");
      if (N<eval("ListPart"+Puntero)) {
         Saver = eval("ListPart"+Puntero);
         set ("ListPart"+Puntero, N);
         trace ("N agregado en la parte "+Puntero);
         trace ("Es "+N+" y sustituyó a "+Saver);
         Lista = Lista+", "+N;
         trace ("La lista por ahora es: "+Lista);
         N = Saver;
      } else {
         Puntero = Puntero+1;
         if (Puntero>ListParts) {
            // Agregar N al final de la lista.
            set ("ListPart"+Puntero, N);
            trace ("N agregado en la última parte: "+Puntero);
            ListParts = ListParts+1;
            trace ("La lista completa es: "+Lista+", "+N);
            // Producir nuevo N.
            gotoAndPlay (4);
         } else {
            trace ("Ver si al nuevo N le corresponde estar en la siguiente parte.");
            if (Puntero == 2) {
               Lista = eval("ListPart1");
            } else {
               Lista = Lista+", "+eval("ListPart"+(Puntero-1));
            }
            trace ("La lista por ahora es: "+Lista);
            gotoAndPlay (7);
         }
      }
   actions for fotograma 9
      trace ("F9");
   actions for fotograma 10
      trace ("F10");
      trace ("Corriendo partes hacia el final...");
      if (Puntero == ListParts) {
         ListParts = ListParts+1;
         // Sólo falta correr al último elemento.
         set ("ListPart"+ListParts, N);
         trace ("Última parte movida.");
         trace ("La lista completa es: "+Lista+", "+N);
         gotoAndPlay (4);
      } else {
         Puntero = Puntero+1;
         // Correr hacia el final a las partes de la lista.
         Saver = eval("ListPart"+Puntero);
         set ("ListPart"+Puntero, N);
         trace ("La parte "+Puntero+" que es "+Saver+" fue sustituída por "+N);
         Lista = Lista+", "+N;
         trace ("La lista por ahora es: "+Lista);
         N = Saver;
         trace ("Aún faltan partes que mover.");
         gotoAndPlay (9);
      }

Salida (cortada porque aún no le puse fin al programa):
Spoiler
F1
0 resulta 0
para que C sea 0 usar N: 0
F2
9 resulta
F3
F4
Produciendo un nuevo N...
Puntero se ubica al final de la lista, en 2
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 2 y 1 es 9
Son 9 y 0
Es la mayor por ahora en esta búsqueda
NElegido por ahora es 2
F6
Parte1delaOperacion es 9
Parte2delaOperacion es 0
5 resulta
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0
F7
F8
Agregando N en el lugar que le corresponde en la lista...
N agregado en la parte 2
Es 5 y sustituyó a 9
La lista por ahora es: 0, 5
F9
F10
Corriendo partes hacia el final...
Última parte movida.
La lista completa es: 0, 5, 9
F4
Produciendo un nuevo N...
Puntero se ubica al final de la lista, en 3
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 3 y 2 es 4
Son 9 y 5
Es la mayor por ahora en esta búsqueda
NElegido por ahora es 3
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 2 y 1 es 5
Son 5 y 0
Es la mayor por ahora en esta búsqueda
NElegido por ahora es 2
F6
Parte1delaOperacion es 5
Parte2delaOperacion es 0
3 resulta
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0
F7
F8
Agregando N en el lugar que le corresponde en la lista...
N agregado en la parte 2
Es 3 y sustituyó a 5
La lista por ahora es: 0, 3
F9
F10
Corriendo partes hacia el final...
La parte 3 que es 9 fue sustituída por 5
La lista por ahora es: 0, 3, 5
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
Última parte movida.
La lista completa es: 0, 3, 5, 9
F4
Produciendo un nuevo N...
Puntero se ubica al final de la lista, en 4
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 4 y 3 es 4
Son 9 y 5
Es la mayor por ahora en esta búsqueda
NElegido por ahora es 4
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 3 y 2 es 2
Son 5 y 3
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 2 y 1 es 3
Son 3 y 0
F6
Parte1delaOperacion es 9
Parte2delaOperacion es 5
7 resulta
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0, 3
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0, 3, 5
F7
F8
Agregando N en el lugar que le corresponde en la lista...
N agregado en la parte 4
Es 7 y sustituyó a 9
La lista por ahora es: 0, 3, 5, 7
F9
F10
Corriendo partes hacia el final...
Última parte movida.
La lista completa es: 0, 3, 5, 7, 9
F4
Produciendo un nuevo N...
Puntero se ubica al final de la lista, en 5
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 5 y 4 es 2
Son 9 y 7
Es la mayor por ahora en esta búsqueda
NElegido por ahora es 5
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 4 y 3 es 2
Son 7 y 5
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 3 y 2 es 2
Son 5 y 3
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 2 y 1 es 3
Son 3 y 0
Es la mayor por ahora en esta búsqueda
NElegido por ahora es 2
F6
Parte1delaOperacion es 3
Parte2delaOperacion es 0
2 resulta
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0
F7
F8
Agregando N en el lugar que le corresponde en la lista...
N agregado en la parte 2
Es 2 y sustituyó a 3
La lista por ahora es: 0, 2
F9
F10
Corriendo partes hacia el final...
La parte 3 que es 5 fue sustituída por 3
La lista por ahora es: 0, 2, 3
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
La parte 4 que es 7 fue sustituída por 5
La lista por ahora es: 0, 2, 3, 5
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
La parte 5 que es 9 fue sustituída por 7
La lista por ahora es: 0, 2, 3, 5, 7
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
Última parte movida.
La lista completa es: 0, 2, 3, 5, 7, 9
F4
Produciendo un nuevo N...
Puntero se ubica al final de la lista, en 6
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 6 y 5 es 2
Son 9 y 7
Es la mayor por ahora en esta búsqueda
NElegido por ahora es 6
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 5 y 4 es 2
Son 7 y 5
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 4 y 3 es 2
Son 5 y 3
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 3 y 2 es 1
Son 3 y 2
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 2 y 1 es 2
Son 2 y 0
F6
Parte1delaOperacion es 9
Parte2delaOperacion es 7
8 resulta
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0, 2
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0, 2, 3
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0, 2, 3, 5
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0, 2, 3, 5, 7
F7
F8
Agregando N en el lugar que le corresponde en la lista...
N agregado en la parte 6
Es 8 y sustituyó a 9
La lista por ahora es: 0, 2, 3, 5, 7, 8
F9
F10
Corriendo partes hacia el final...
Última parte movida.
La lista completa es: 0, 2, 3, 5, 7, 8, 9
F4
Produciendo un nuevo N...
Puntero se ubica al final de la lista, en 7
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 7 y 6 es 1
Son 9 y 8
Es la mayor por ahora en esta búsqueda
NElegido por ahora es 7
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 6 y 5 es 1
Son 8 y 7
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 5 y 4 es 2
Son 7 y 5
Es la mayor por ahora en esta búsqueda
NElegido por ahora es 5
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 4 y 3 es 2
Son 5 y 3
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 3 y 2 es 1
Son 3 y 2
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 2 y 1 es 2
Son 2 y 0
F6
Parte1delaOperacion es 7
Parte2delaOperacion es 5
6 resulta
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0, 2
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0, 2, 3
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0, 2, 3, 5
F7
F8
Agregando N en el lugar que le corresponde en la lista...
N agregado en la parte 5
Es 6 y sustituyó a 7
La lista por ahora es: 0, 2, 3, 5, 6
F9
F10
Corriendo partes hacia el final...
La parte 6 que es 8 fue sustituída por 7
La lista por ahora es: 0, 2, 3, 5, 6, 7
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
La parte 7 que es 9 fue sustituída por 8
La lista por ahora es: 0, 2, 3, 5, 6, 7, 8
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
Última parte movida.
La lista completa es: 0, 2, 3, 5, 6, 7, 8, 9
F4
Produciendo un nuevo N...
Puntero se ubica al final de la lista, en 8
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 8 y 7 es 1
Son 9 y 8
Es la mayor por ahora en esta búsqueda
NElegido por ahora es 8
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 7 y 6 es 1
Son 8 y 7
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 6 y 5 es 1
Son 7 y 6
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 5 y 4 es 1
Son 6 y 5
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 4 y 3 es 2
Son 5 y 3
Es la mayor por ahora en esta búsqueda
NElegido por ahora es 4
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 3 y 2 es 1
Son 3 y 2
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 2 y 1 es 2
Son 2 y 0
F6
Parte1delaOperacion es 5
Parte2delaOperacion es 3
4 resulta
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0, 2
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0, 2, 3
F7
F8
Agregando N en el lugar que le corresponde en la lista...
N agregado en la parte 4
Es 4 y sustituyó a 5
La lista por ahora es: 0, 2, 3, 4
F9
F10
Corriendo partes hacia el final...
La parte 5 que es 6 fue sustituída por 5
La lista por ahora es: 0, 2, 3, 4, 5
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
La parte 6 que es 7 fue sustituída por 6
La lista por ahora es: 0, 2, 3, 4, 5, 6
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
La parte 7 que es 8 fue sustituída por 7
La lista por ahora es: 0, 2, 3, 4, 5, 6, 7
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
La parte 8 que es 9 fue sustituída por 8
La lista por ahora es: 0, 2, 3, 4, 5, 6, 7, 8
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
Última parte movida.
La lista completa es: 0, 2, 3, 4, 5, 6, 7, 8, 9
F4
Produciendo un nuevo N...
Puntero se ubica al final de la lista, en 9
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 9 y 8 es 1
Son 9 y 8
Es la mayor por ahora en esta búsqueda
NElegido por ahora es 9
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 8 y 7 es 1
Son 8 y 7
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 7 y 6 es 1
Son 7 y 6
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 6 y 5 es 1
Son 6 y 5
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 5 y 4 es 1
Son 5 y 4
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 4 y 3 es 1
Son 4 y 3
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 3 y 2 es 1
Son 3 y 2
F6
Aún hay partes en la lista, seguir revisando.
F5
Buscando la mayor distancia entre las partes de la lista...
Distancia entre la parte 2 y 1 es 2
Son 2 y 0
Es la mayor por ahora en esta búsqueda
NElegido por ahora es 2
F6
Parte1delaOperacion es 2
Parte2delaOperacion es 0
1 resulta
F7
F8
Agregando N en el lugar que le corresponde en la lista...
Ver si al nuevo N le corresponde estar en la siguiente parte.
La lista por ahora es: 0
F7
F8
Agregando N en el lugar que le corresponde en la lista...
N agregado en la parte 2
Es 1 y sustituyó a 2
La lista por ahora es: 0, 1
F9
F10
Corriendo partes hacia el final...
La parte 3 que es 3 fue sustituída por 2
La lista por ahora es: 0, 1, 2
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
La parte 4 que es 4 fue sustituída por 3
La lista por ahora es: 0, 1, 2, 3
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
La parte 5 que es 5 fue sustituída por 4
La lista por ahora es: 0, 1, 2, 3, 4
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
La parte 6 que es 6 fue sustituída por 5
La lista por ahora es: 0, 1, 2, 3, 4, 5
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
La parte 7 que es 7 fue sustituída por 6
La lista por ahora es: 0, 1, 2, 3, 4, 5, 6
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
La parte 8 que es 8 fue sustituída por 7
La lista por ahora es: 0, 1, 2, 3, 4, 5, 6, 7
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
La parte 9 que es 9 fue sustituída por 8
La lista por ahora es: 0, 1, 2, 3, 4, 5, 6, 7, 8
Aún faltan partes que mover.
F9
F10
Corriendo partes hacia el final...
Última parte movida.
La lista completa es: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
[cerrar]

En resumen:
0123456789
x12345678x
x1234x678x
x12x4x678x
x12x4x6x8x
x1xx4x6x8x
x1xx4x6xxx
x1xx4xxxxx
x1xxxxxxxx
0, 9, 5, 3, 7, 2, 8, 6, 4, 1.

Sería una pérdida de tiempo buscar dónde estaba el error, para arreglarlo lo que hice fue poner muchos traces (print) e hice más cambios de los que recuerdo.
Dos que recuerdo fueron que yo hacía:
N = Math.ceil(eval("ListPart"+NElegido)-eval("ListPart"+(NElegido-1))/2);
y ahora:
Parte1delaOperacion = eval("ListPart"+NElegido);
Parte2delaOperacion = eval("ListPart"+(NElegido-1));
N = Math.ceil((Parte1delaOperacion+Parte2delaOperacion)/2);
Que creo que es lo mismo pero en vez de una resta es una suma. Calculaba la distancia cuando necesitaba el promedio xD
Lo separé en partes porque en la nueva versión me decía que había un error en la expresión, como que faltaba un paréntesis o algo así y no lo encontraba, así que simplifiqué.

Otro error es que en cierto punto el programa debía regresar a otro pero yo no lo había especificado, no recuerdo los detalles.

debería conocer mejor el lenguaje en el que programas
¡No existe uno más sencillo! Por eso lo uso 8^)
¿Qué parte no entiendes? Lo relevante en este tema es la producción de Ns, otras cosas como esto:
Código: [Seleccionar]
      C = String(N).charat(N);
      trace (N+", "+C);
      if (C == 0) {
         trace ("para que C sea 0 usar N: "+N);
      } else if (C == -9) {
         trace ("para que C sea -9 usar N: "+N);
      } else if (C == 4.5) {
         trace ("para que C sea 4.5 usar N: "+N);
      } else if (C == -7.2) {
         trace ("para que C sea -7.2 usar N: "+N);
      }
No, lo que pasa que en aquél momento no tenía tiempo como para quitar ese tipo de cosas. El programa es para buscar Ns que cumplan ciertas condiciones. Lo complejo es que quiero que la producción de Ns no sea 0, 1, 2... sino la que ya expliqué.

Otra cosa que puede parecer compleja es eval y cosas como esta:
set ("ListPart"+ListParts, N);

eval evalúa una expresión y la convierte en otra, sirve para poner expresiones variables. Por ejemlplo eval("ListPart"+Puntero) se transforma en ListPart1 si Puntero es 1, ListPart2 si es 2, etc.

set ("ListPart"+ListParts, N); crea una variable de nombre variable, es similar a eval. En este caso el nombre será ListPart1 si ListParts es 1, ListPart2 si es 2, etc. N es el valor que se le da a la variable creada.

Y bueno, uso "variables sueltas" en vez de arrays porque hace tiempo cuando quise que los arrays se guardaran en archivos externos no pude o no los pude cargar, así que me empecé a acostumbrar a hacerlo de este modo, además nunca me gustaron esos corchetes raros que se usa con los arrays, que yo sepa ninguna otra función los usa.

Citar
luego de un ciclo tienes 0-8 luego dos grupos 1-4 y 6-8 , casa alojando los diferentes grupos y los recorres por bucles.
No sé bien cómo hacer eso, lo pensaré.

Citar
Ahora lo que sigue  es discernir cual es el mas distante de cada grupo, o bien sobre el grupo original, puesto que en tu segundo paso escoges al cero , pero el  extremo entre 0-8, según el mismo criterio que elegiste el 9 entre 0-9 te volverá a dar el 8 y  no el 0, así que interpreto que lo que tomás de referencia es la distancia a cada extremo osea has considerado en tu segundo calculo la distancia al 9 aunque  ya lo separaste del grupo.
No entendí bien @.@
1ero establezco un rango de números, un mínimo y un máximo, sin eso esto no se puede hacer. En este caso el rango es 10, el mínimo es 0 y el máximo 9.
En 2ndo lugar se producen esos 2 números, 1ero el mínimo y luego el máximo, pero no es muy relevante el orden.
Luego empieza lo que debe repetirse (quizá con algunos pequeños cambios pero, en general): Se elige el número que esté más alejado de los que antes se eligieron. Es lo que intenté mostrar con letra negrita y x arriba: Es como que se elige el que está entre medio, el promedio, del par de números "contiguos" elegidos más lejanos entre si. Contiguos se refiere a que habiendo sido ordenados son los más cercanos. Cuando se tiene 0, 5 y 9, entonces 0 y 5 son "contiguos", y 5 y 9 también.

Citar
Ahora que criterio usas para evaluar distancia ?
La máxima longitud entre elementos del grupo, no es el criterio ya que ,entre 1-8 escojes 5  que está al medio y no en uno de los extremos como hiciste en 0-9, osea  el maximo lo descartas...
y tambien no es la máxima distancia como el sumatorio del cuadrado de la diferencia entre dos elementos del grupo eso te debe generar 9-0-8-1-7-2-6-3-5-4.
No entiendo bien lo que dices en la 1era parte, pero la secuencia que pones al final es lo que llamo "Péndulo frenando" (porque va de extremo a extremo pero cada vez menos, hasta quedar en el centro), no es lo que quiero, eso es fácil, es algo como:
Código: [Seleccionar]
N1 = 0
N2 = 9
2:
N = N1
// Probar si cumple las condiciones buscadas.
N = N2
// Probar si cumple las condiciones buscadas.
3:
Si N1 < 4
  N1++
  N2--
  Ir a 2.
sino
  fin

Citar
Así que porque escojes el 5?  porque esta alejado de los que ya elegiste?
Sí:
0123456789
4 y 5 son los más alejados de 0 y 9, la fórmula es \( (0+9)/2 \)
Yo elijo el 5 porque para simplificar por ahora en caso de empate elijo el mayor, pero es algo que voy a pulir del código, para que si en el empate anterior eligió el mayor ahora sea al menor, y viceversa.

Citar
en definitiva no sé por qué escoges el orden  0-9 cuando abiertamente dices que ante igualdad de distancia escoges el mayor y debería ser 9-0
Porque me refierí a en caso de empate entre 2 números contiguos (esta vez literal) entre un par de números antes elegidos, es decir cuando el promedio entre ellos da 2,5 por ejemplo. El 2 y 3 empatan en cuanto a la distancia hasta el 0 y 5, el promedio entre 0 y 5 es 2,5, pero ese número no es admisible, sólo el 2 y el 3.
Cuando hay empate porque varios números no contiguos tienen la misma distancia hasta pares "contiguos" antes elegidos, entonces la idea en principio es que se eligieran 1ero los menores, pero es irrelevante, en el código que hice ahora se eligieron 1ero los mayores. Lo ideal en este caso no sé qué sería porque depende de qué se haga en el otro tipo de empates, debo pensarlo.