Autor
|
Tema: Quiero que produzca números distantes pero sólo produce 0 y 9. (Leído 2,949 veces)
|
Tachikomaia
Desconectado
Mensajes: 1.470
Hackentifiko!
|
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? 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); }
|
|
|
En línea
|
|
|
|
jca1
Desconectado
Mensajes: 59
|
No entiendo bien la consigna pero si lo que quieres es que el numero a ingresar sea lo mas distante al anterior, una solución en c+ seria: int n=10,i; int num[n]; for (i=0;i<n;i++){ if (i%2==0){ num[i]=i/2; } else{ num[i]=n-(i+1)/2; }
El vector resultante es la solución. Saludos!
|
|
|
En línea
|
|
|
|
Tachikomaia
Desconectado
Mensajes: 1.470
Hackentifiko!
|
¿Qué salida da eso? Este asunto ya lo resolví, no recuerdo cual era el error exacto pero te muestro una de las últimas veriones que tengo (a la posterior le quité la mayoría de los traces, ya sabiendo que funciona bien): Escena 1 actions for fotograma 1 trace ("F1"); MaxN = 33; MaxNplus1 = MaxN+1; N = 0; C = String(N).charat(N); trace (N+" resulta "+C); if (C == 0) { if (Solfor0 == undefined) { Solfor0 = N; } } else if (C == -9) { if (Solfor9 == undefined) { Solfor9 = N; } } else if (C == 4.5) { if (Solfor4 == undefined) { Solfor4 = N; } } else if (C == -7.2) { if (Solfor7 == undefined) { Solfor7 = N; } } actions for fotograma 2 trace ("F2"); N = MaxN; C = String(N).charat(N); trace (N+" resulta "+C); if (C == 0) { if (Solfor0 == undefined) { Solfor0 = N; } } else if (C == -9) { if (Solfor9 == undefined) { Solfor9 = N; } } else if (C == 4.5) { if (Solfor4 == undefined) { Solfor4 = N; } } else if (C == -7.2) { if (Solfor7 == undefined) { Solfor7 = N; } } actions for fotograma 3 trace ("F3"); ListPart1 = 0; ListPart2 = MaxN; 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) { if (Solfor0 == undefined) { Solfor0 = N; } } else if (C == -9) { if (Solfor9 == undefined) { Solfor9 = N; } } else if (C == 4.5) { if (Solfor4 == undefined) { Solfor4 = N; } } else if (C == -7.2) { if (Solfor7 == undefined) { Solfor7 = 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); // ¿Se analizaron todos los números del rango? if (MaxNplus1 == ListParts) { // Sí, mostrar los Ns que cumplen la condición y finalizar. if (Solfor0 != undefined) { trace ("Para que C sea 0 usar N: "+Solfor0); } if (Solfor9 != undefined) { trace ("Para que C sea -9 usar N: "+Solfor9); } if (Solfor4 != undefined) { trace ("Para que C sea 4.5 usar N: "+Solfor4); } if (Solfor7 != undefined) { trace ("Para que C sea -7.2 usar N: "+Solfor7); } stop (); } else { // Analizar otro 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 (la corté porque es muy larga): F1 0 resulta 0 F2 33 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 33 Son 33 y 0 Es la mayor por ahora en esta búsqueda NElegido por ahora es 2 F6 Parte1delaOperacion es 33 Parte2delaOperacion es 0 17 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 17 y sustituyó a 33 La lista por ahora es: 0, 17 F9 F10 Corriendo partes hacia el final... Última parte movida. La lista completa es: 0, 17, 33 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 16 Son 33 y 17 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 17 Son 17 y 0 Es la mayor por ahora en esta búsqueda NElegido por ahora es 2 F6 Parte1delaOperacion es 17 Parte2delaOperacion es 0 9 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 9 y sustituyó a 17 La lista por ahora es: 0, 9 F9 F10 Corriendo partes hacia el final... La parte 3 que es 33 fue sustituída por 17 La lista por ahora es: 0, 9, 17 Aún faltan partes que mover. F9 F10 Corriendo partes hacia el final... Última parte movida. La lista completa es: 0, 9, 17, 33 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 16 Son 33 y 17 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 8 Son 17 y 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 2 y 1 es 9 Son 9 y 0 F6 Parte1delaOperacion es 33 Parte2delaOperacion es 17 25 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, 9 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, 9, 17 F7 F8 Agregando N en el lugar que le corresponde en la lista... N agregado en la parte 4 Es 25 y sustituyó a 33 La lista por ahora es: 0, 9, 17, 25 F9 F10 Corriendo partes hacia el final... Última parte movida. La lista completa es: 0, 9, 17, 25, 33 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 8 Son 33 y 25 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 8 Son 25 y 17 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 8 Son 17 y 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 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... La parte 3 que es 17 fue sustituída por 9 La lista por ahora es: 0, 5, 9 Aún faltan partes que mover. F9 F10 Corriendo partes hacia el final... La parte 4 que es 25 fue sustituída por 17 La lista por ahora es: 0, 5, 9, 17 Aún faltan partes que mover. F9 F10 Corriendo partes hacia el final... La parte 5 que es 33 fue sustituída por 25 La lista por ahora es: 0, 5, 9, 17, 25 Aún faltan partes que mover. F9 F10 Corriendo partes hacia el final... Última parte movida. La lista completa es: 0, 5, 9, 17, 25, 33 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 8 Son 33 y 25 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 8 Son 25 y 17 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 8 Son 17 y 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 3 y 2 es 4 Son 9 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 2 y 1 es 5 Son 5 y 0 F6 Parte1delaOperacion es 33 Parte2delaOperacion es 25 29 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, 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, 5, 9 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, 5, 9, 17 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, 5, 9, 17, 25 F7 F8 Agregando N en el lugar que le corresponde en la lista... N agregado en la parte 6 Es 29 y sustituyó a 33 La lista por ahora es: 0, 5, 9, 17, 25, 29 F9 F10 Corriendo partes hacia el final... Última parte movida. La lista completa es: 0, 5, 9, 17, 25, 29, 33 F4 Produciendo un nuevo N... (...) La lista completa es: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33 Para que C sea 0 usar N: 0 En la versión más nueva que esa hay un poquito de random y una posible salida es: 0 resulta 0 33 resulta 17 resulta 8 resulta 25 resulta 12 resulta 29 resulta 21 resulta 4 resulta 14 resulta 31 resulta 27 resulta 23 resulta 19 resulta 10 resulta 6 resulta 2 resulta 15 resulta 32 resulta 30 resulta 28 resulta 26 resulta 24 resulta 22 resulta 20 resulta 18 resulta 16 resulta 13 resulta 11 resulta 9 resulta 7 resulta 5 resulta 3 resulta 1 resulta
Ignora lo de "resulta", eso es que al aplicar el número en cierto proceso da resultado nulo. Aún sigo mejorando este programa, pero como ves, sobretodo al inicio, elige números distantes entre sí, como yo quería.
|
|
|
En línea
|
|
|
|
jca1
Desconectado
Mensajes: 59
|
Primero no es tan difícil calcular la salida de mi programa viendo todo lo que hiciste vos.
Segundo el programa que hice es eficaz y eficiente.
Tercero no hay necesidad de poner todo el código de nuevo y todo el desorden de resultados.
Cuarto el resultado que da en ese caso es 0,9,1,8,2,7,3,6,4,5.
Sino no es lo que queres explicate bien en la pregunta.
|
|
|
En línea
|
|
|
|
Tachikomaia
Desconectado
Mensajes: 1.470
Hackentifiko!
|
1: Hay muchas cosas que me cuesta entenderlas. int n=10,i; ¿Estás diciendo que i es una variable de tipo entero pero sin valor definido? Supongo, no sé, nunca defino el tipo de las variables ni más de una en una misma línea y siempre que la defino les doy valor (Actionscript lo exige, aunque sea ""), no estoy acostumbrado a eso que haces. int num[n]; No sé qué es eso ¿un array? Nunca uso arrays, no sé entonces. ¿O es otro modo de definir una variable? Dice int, pero en vez de un = has puesto esos paréntesis cuadrados que casi nunca usé y por lo que sé sólo se usan en arrays, por eso pensé que era uno. Ah ¿es una variable cuyo nombre está compuesto por una variable? Ok, es que nunca lo había visto en un lenguaje distinto al que uso. for (i=0;i<n;i++){ Casi nunca en mi vida usé un for, ergo en ese caso no sé si lo 1ero que hace la repetición es i++ o eso lo hace antes del fin. num=i/2; i en la 1er repetición es 0 o 1, y lo divides entre 2 así que te da 0 o 0,5, pero sólo aplicas esto si al dividirla entre 2 te da resto 0, así que imposible que se obtenga un decimal. num=n-(i+1)/2; Esto lo aplicas con números impares. La 1er vez es 10-(1+1)/2 10-2/2 10-1 9 A ver, cuando i es 0, el n producido es 0/2, o sea 0. Cuando i es 1, n es 9. Si i es 2, n es 1. Si i es 3, n es 10-(3+1)/2 10-4/2 10-2 8 Parece que haces lo que llamo péndulo frenándose (porque va de un extremo a otro, cada vez menos, hasta quedar en el centro), no es lo que buscaba, desde el inicio dije que era algo como 0, 9, 5, 3, 7, 2, 1, 4, 6, 8 Primero los extremos, pero luego los que estén entre medio de pares cercanos ya elegidos. Tú haces 0, 9, 1... pero entre el 0 y el 1 la distancia es sólo 1, la idea es elegir un número cuya mínima distancia a los otros sea la mayor posible, ese sería el 4 o el 5. El 4 tiene 4 de distancia al 0 y 5 al 9. El 5 tiene 5 al 0 y 4 al 9. Lo que haces: Los colores marcan la distancia al anterior elegido más cercano, la idea es evitar que aparezca rojo, ahí aparece siempre, porque el número está al lado de uno antes elegido. Lo que quiero: Pero ya lo que me falta creo que es fácil, así que ya no es necesario que hagas un code. Tercero no hay necesidad de poner todo el código de nuevo y todo el desorden de resultados. ¿Lo dices por lo que yo hice? El código que puse al responderte es distinto del 1ero que puse. Y no sé qué desorden ves...
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ejecutar una accion, pero cuando se produzca un cambio(una especie de simulacion
Programación Visual Basic
|
renga73
|
1
|
1,351
|
17 Marzo 2006, 12:39 pm
por _Sergi_
|
|
|
ASesoria ¿? [quiero que me arroje 3 numeros aleatorios pero...]
PHP
|
~V
|
1
|
2,963
|
12 Junio 2010, 09:05 am
por jdc
|
|
|
cambie la contraseña de de mi computadora pero se me olvido solo quiero entrar
Dudas Generales
|
rafeso
|
7
|
6,373
|
19 Julio 2010, 23:11 pm
por __Alvaro 2015__
|
|
|
Tengo el XSS, pero con solo numeros
« 1 2 »
Nivel Web
|
Skeletron
|
18
|
8,602
|
3 Agosto 2010, 15:14 pm
por winroot
|
|
|
ayuda el codigo deberia mostrar el mayor de 3 numeros pero solo crashe CMD es en batch
Dudas Generales
|
TekoKZ
|
2
|
3,000
|
16 Noviembre 2022, 15:27 pm
por Elektro Enjuto
|
|