elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Array no se genera bien.
chanchito82 y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Array no se genera bien.  (Leído 176 veces)
Tachikomaia


Conectado Conectado

Mensajes: 1.540


Hackentifiko!


Ver Perfil
Array no se genera bien.
« en: Ayer a las 07:08 »

Variable _level0.L2SaE10 está bien.
Variable _level0.L2SaE11 está bien.
Variable _level0.L2SaE12 no:
Citar
 Variable _level0.L2SaE10 = [object #30] [
    0:"0",
    1:"v",
    2:"v",
    3:"X"
  ]
  Variable _level0.S0vvXBestAction = "Desconocida"
  Variable _level0.S0vvXTurno = "X"
  Variable _level0.S0vvXFirstAPosible = 1
  Variable _level0.S0vvXLastAPosible = 2
  Variable _level0.L2SaE11 = [object #31] [
    0:"v",
    1:"0",
    2:"v",
    3:"X"
  ]
  Variable _level0.Sv0vXBestAction = "Desconocida"
  Variable _level0.Sv0vXTurno = "X"
  Variable _level0.Sv0vXFirstAPosible = 0
  Variable _level0.Sv0vXLastAPosible = 2
  Variable _level0.L2SaE12 = [object #15]
  Variable _level0.Svv0XBestAction = "Desconocida"
  Variable _level0.Svv0XTurno = "X"
  Variable _level0.Svv0XFirstAPosible = 0
  Variable _level0.Svv0XLastAPosible = 1

Ven que
  Variable _level0.L2SaE12 = [object #15]
es como un acceso directo a un array, no es uno independiente.

El error tiene que ver con EvaluarConocimientoSobreSEt1, la penúltima función:
Código
  1. // Signos en línea en tableros cuadrados:
  2. // Este programa tiene básicamente ?????????????????????????????????????? etapas,
  3. // que se pueden resumir así:
  4. // Nota: La situación inicial, en que hay 0 signos colocados,
  5. // estará guardada en la lista nro 0.
  6. // 1:
  7. // Probar acciones en cada situación de la lista,
  8. // guardando en una nueva lista las nuevas situaciones (que no...
  9. // sean victoria ni empate). Repetir con cada lista hasta la que...
  10. // tenga situaciones en que sólo 1 acción es posible (por...
  11. // ejemplo en el 3 en línea es 8).
  12. // 2: ACTUALIZAR ESTA
  13. // En las situaciones no resueltas, probar las acciones.
  14. // Si las consecuencias tienen RE, anotar cuantas de ellas...
  15. // son victoria de X, 0 o empate y anotar la acción que...
  16. // cause la RE más favorable, considerando secundariamente...
  17. // las cantidades.
  18. JuntosRequeridos = 2;
  19. CasillerosPorFila = 2;
  20. // Contando desde 0:
  21. MaxColumna = CasillerosPorFila-1;
  22. Casilleros = CasillerosPorFila*CasillerosPorFila;
  23. // Están numerados así:
  24. // 0 1
  25. // 2 3
  26. MaxCasillero = Casilleros-1;
  27. // En las listas L_SaE se irán poniendo las situaciones a...
  28. // experimentar que tengan _ signos colocados.
  29. // En la lista 0 agregar una situación, aún no se dice cual:
  30. L0SaE1 = [];
  31. // A continuación se especifica cómo es, agregando v
  32. // (que significa vacío) en lo que serían los casilleros,
  33. // los elementos del array:
  34. ValoraAgregar = -1;
  35. do {
  36. ValoraAgregar++;
  37. L0SaE1.push("v");
  38. } while (ValoraAgregar < MaxCasillero);
  39. delete ValoraAgregar;
  40. // Los datos de las situaciones no están en las listas,
  41. // se crean aparte. Con esta variable se evita repetidamente...
  42. // convertir en texto y concatenar:
  43. S_ = "S"+(L0SaE1.join(""));
  44. // Datos de la situación:
  45. // Usada para fácilmente saber de qué signo es turno:
  46. set (S_+"Turno", "X");
  47. // En otros casos usada para evitar probar acciones...
  48. // innecesarias y con LastAPosible para saber si sólo queda 1:
  49. set (S_+"FirstAPosible", 0);
  50. set (S_+"LastAPosible", MaxCasillero);
  51. NroDeListaRevisandose = -1;
  52. // Última lista que se revisará en la etapa 1:
  53. LastListaDeEt1 = MaxCasillero;
  54. // /////////////////////////////////////////////
  55. // /////////////////  Etapa 1  /////////////////
  56. // /////////////////////////////////////////////
  57. // Usada a continuación y durante la etapa 1 (Et1)...
  58. // cuando no hay más situaciones en la lista revisándose:
  59. function BuscarOtraListaEt1 () {
  60. trace("Ejecutando BuscarOtraListaEt1");
  61. NroDeListaRevisandose++;
  62. // Si las situaciones de la lista tienen más de 1 opción:
  63. if (NroDeListaRevisandose < LastListaDeEt1) {
  64. // Para evitar concatenar repetidamente:
  65. L_SaE = "L"+NroDeListaRevisandose+"SaE";
  66. NextL_SaE = "L"+(NroDeListaRevisandose+1)+"SaE";
  67. NroDeSExperimentandose = 1;
  68. // También para evitar concatenar repetidamente:
  69. // L_SaE_ = L_SaE+NroDeSExperimentandose;
  70. L_SaE_ = L_SaE+"1";
  71. // Usado en EvaluarConocimientoSobreSEt1 para...
  72. // nombrar las situaciones nuevas que se logren:
  73. SituacionesNuevas = 0;
  74. trace("Comienzan experimentos en una nueva lista, la "+NroDeListaRevisandose);
  75. PrepararSaE();
  76. } else {
  77. trace( "La próxima lista tiene situaciones de sólo 1 opción; inicia la etapa 2.");
  78. // IniciarEtapa2();
  79. gotoAndStop(4);
  80. }
  81. }
  82. BuscarOtraListaEt1();
  83. // Usada cuando se elege una SaE, en BuscarOtraListaEt1 y...
  84. // BuscarOtraSituacionEt1:
  85. function PrepararSaE () {
  86. trace("Ejecutando PrepararSaE");
  87. trace("Se inician experimentos en otra situación de la lista, la nro "+NroDeSExperimentandose);
  88. SituacionBase = eval(L_SaE_);
  89. S_ = "S"+(SituacionBase.join(""));
  90. Turno = eval(S_+"Turno");
  91. FirstActionPosible = eval(S_+"FirstAPosible");
  92. LastActionPosible = eval(S_+"LastAPosible");
  93. Action = FirstActionPosible;
  94. }
  95. // Usada en frame 2 (o etapa 1) repetidamente:
  96. function BuscarSituacionesDistantes () {
  97. // Plantear situación porque puede modificarse pero...
  98. // podría requerirse su estado original luego:
  99. Situacion = SituacionBase.slice();
  100. trace("La situación experimentándose es "+Situacion);
  101. EvaluarAplicabilidadEt1();
  102. }
  103. // Usada luego de que cambia la SaE y/o la acción:
  104. function EvaluarAplicabilidadEt1 () {
  105. trace("Ejecutando EvaluarAplicabilidadEt1");
  106. if (Situacion[Action] == "v") {
  107. trace("La acción "+Action+" es realizable.");
  108. AplicarAccionEt1();
  109. } else {
  110. trace("La acción "+Action+" no es realizable.");
  111. BuscarOtraAccionEt1();
  112. }
  113. }
  114. // Usada luego de EvaluarAplicabilidadEt1,
  115. // si una acción es realizable:
  116. function AplicarAccionEt1 () {
  117. trace("Ejecutando AplicarAccionEt1");
  118. Situacion[Action] = Turno;
  119. trace("Se realizó la acción "+Action+"; ahora la situación es "+Situacion);
  120. // ¿Ganó?
  121. // Si no se detecta victoria vertical,
  122. // revisa de otros modos (ver las funciones Chequear):
  123. ChequearVertical();
  124. if (Win == "No") {
  125. EvaluarConocimientoSobreSEt1();
  126. }
  127. // ¿Queda alguna acción sin probar en la situación?
  128. BuscarOtraAccionEt1();
  129. }
  130. // Usada en EvaluarAplicabilidadEt1 cuando una acción no es...
  131. // realizable, y luego de AplicarAccionEt1:
  132. function BuscarOtraAccionEt1 () {
  133. trace("Ejecutando BuscarOtraAccionEt1");
  134. if (Action < LastActionPosible) {
  135. // Si queda alguna acción sin probar...
  136. // en la situación, probarla:
  137. Action++;
  138. // Se ejecutará BuscarSituacionesDistantes.
  139. } else {
  140. trace("No hay más acciones realizables.");
  141. BuscarOtraSituacionEt1();
  142. }
  143. }
  144. // Usada en AplicarAccionEt1 cuando no hay victoria (ni empate,
  145. // aunque por ahora no ocurren):
  146. function EvaluarConocimientoSobreSEt1 () {
  147. trace("Ejecutando EvaluarConocimientoSobreSEt1");
  148. SituacionJoined = Situacion.join("");
  149. NewS_ = "S"+SituacionJoined;
  150. NewS_BestAction = NewS_+"BestAction";
  151. // ¿Se ha llegado antes a la situación?
  152. if (eval(NewS_BestAction) == undefined) {
  153. // No, anotar que debe investigarse:
  154. SituacionesNuevas++;
  155. // Copiar array (porque no se puede normalmente):
  156. trace("Situación a copiar a "+NextL_SaE+SituacionesNuevas+" es "+Situacion);
  157. set (NextL_SaE+SituacionesNuevas, Situacion.slice());
  158. trace("Esa situación no está anotada; se anota como nro "+SituacionesNuevas);
  159. set(NewS_BestAction, "Desconocida");
  160. if (Turno == "X") {
  161. set (NewS_+"Turno", "0");
  162. } else {
  163. set (NewS_+"Turno", "X");
  164. }
  165. // Averiguar cual es su 1er acción posible:
  166. AccionRevisandose = -1;
  167. do {
  168. AccionRevisandose++;
  169. if (Situacion[AccionRevisandose] == "v") {
  170. set (NewS_+"FirstAPosible", AccionRevisandose);
  171. break;
  172. }
  173. } while (true);
  174. // Averiguar cual es su última acción posible:
  175. AccionRevisandose = Casilleros;
  176. do {
  177. AccionRevisandose--;
  178. if (Situacion[AccionRevisandose] == "v") {
  179. set (NewS_+"LastAPosible", AccionRevisandose);
  180. break;
  181. }
  182. } while (true);
  183. }
  184. }
  185. // Usada en BuscarOtraAccionEt1 cuando no hay más acciones posibles:
  186. function BuscarOtraSituacionEt1 () {
  187. trace("Ejecutando BuscarOtraSituacionEt1");
  188. NroDeSExperimentandose++;
  189. if (eval(L_SaE+NroDeSExperimentandose) != undefined) {
  190. // Hay otra situación en la lista,
  191. // prepararse a usarla:
  192. L_SaE_ = L_SaE+NroDeSExperimentandose;
  193. PrepararSaE();
  194. } else {
  195. trace( "No hay más situaciones a experimentar en la lista actual, se mirará otra.");
  196. BuscarOtraListaEt1();
  197. }
  198. }

ChequearVertical y otras funciones que ella usa creo que son irrelevantes ahí así que no las puse.

Pero los traces parecen bien, dice:
Citar
La situación experimentándose es v,v,v,X
Ejecutando EvaluarAplicabilidadEt1
La acción 2 es realizable.
Ejecutando AplicarAccionEt1
Se realizó la acción 2; ahora la situación es v,v,0,X
Ejecutando EvaluarConocimientoSobreSEt1
Situación a copiar a L2SaE12 es v,v,0,X
Esa situación no está anotada; se anota como nro 12

// Copiar array (porque no se puede normalmente):
trace("Situación a copiar a "+NextL_SaE+SituacionesNuevas+" es "+Situacion);
set (NextL_SaE+SituacionesNuevas, Situacion.slice());

Si dice que la situación a copiar (Situacion) es v,v,0,X, debería generarse un array con eso, y le puse slice para que el array sea una copia y no un acceso directo (o el nombre que le corresponde), funcionó en todos los casos anteriores ¿qué pasa?

Hablando con GPT le plantié la posibilidad de que Macromedia Flash 5 esté limitado a 32 arrays, porque vean que llega hasta 31, que si se cuenta el 0 (si existe) son 32, y dijo que sí tiene problemas con eso pero puede que lo haya alucinado ¿qué pasa? ¿qué hago para averiguar el error?

Situacion, que es un array, en ese momento es v,v,0,X.

El nombre del array a crear es L2SaE12.

Quiero que se genere ese array, conteniendo una copia (independiente, no acceso directo) de Situacion.

El nombre se genera bien, pero el contenido es una copia acceso directo.

@_@


EDIT: No sé qué pasó que ahora me funciona:
Citar
  Variable _level0.L2SaE10 = [object #28] [
    0:"0",
    1:"v",
    2:"v",
    3:"X"
  ]
  Variable _level0.S0vvXBestAction = "Desconocida"
  Variable _level0.S0vvXTurno = "X"
  Variable _level0.S0vvXFirstAPosible = 1
  Variable _level0.S0vvXLastAPosible = 2
  Variable _level0.L2SaE11 = [object #29] [
    0:"v",
    1:"0",
    2:"v",
    3:"X"
  ]
  Variable _level0.Sv0vXBestAction = "Desconocida"
  Variable _level0.Sv0vXTurno = "X"
  Variable _level0.Sv0vXFirstAPosible = 0
  Variable _level0.Sv0vXLastAPosible = 2
  Variable _level0.L2SaE12 = [object #30] [
    0:"v",
    1:"v",
    2:"0",
    3:"X"
  ]
  Variable _level0.Svv0XBestAction = "Desconocida"
  Variable _level0.Svv0XTurno = "X"
  Variable _level0.Svv0XFirstAPosible = 0
  Variable _level0.Svv0XLastAPosible = 1

Parece haber un array menos, no sé por qué, usando esto:
https://text-compare.com/es/

Lo único que vi de diferente es que puse como comentario esto y le cambié el valor:
// LastListaDeEt1 = Casilleros;

y:
 if (NroDeListaRevisandose < Casilleros) {
en vez de usar LastListaDeEt1, que cuando hice las pruebas no sé si lo tenía como MaxCasilleros o eso +1, pero no veo que sea relevante, eso sólo hace que se revisen más listas...

Tengo la versión anterior, que fallaba, voy a ver por qué la cantidad de arrays es distinta.

Porque al revisar una lista que no tiene situaciones, Situacion queda indefinida, no es un array, entonces es 1 menos.

¿Pero qué tiene que ver cuántas listas revisa con si graba bien una situación o no?

O sea, está revisando la lista 1, situación v,v,v,X.
Realizando la acción 2, llega a v,v,0,X.
Debe grabarla.

¿Por qué si revisa la lista 2 y/o 3 la variable se ve bien y sino no? No veo que tenga relación esa variable (cuántas listas se revisan) con cómo se graba una situación.

A ver gente:
Se hace esto:
   if (NroDeListaRevisandose < LastListaDeEt1) {
eso determina cuántas listas de situaciones se revisan.

Si al principio pongo que LastListaDeEt1 = 1
va a revisar sólo la lista 0, y la última situación nueva a la que llega es:
  Variable _level0.L1SaE4 = [object #19] [
    0:"v",
    1:"v",
    2:"v",
    3:"X"

Si en cambio le pongo 2, revisa hasta la lista 1 y me está funcionando bien:
 Variable _level0.L2SaE12 = [object #31] [
    0:"v",
    1:"v",
    2:"0",
    3:"X"
  ]
  Variable _level0.Svv0XBestAction = "Desconocida"
  Variable _level0.Svv0XTurno = "X"
  Variable _level0.Svv0XFirstAPosible = 0
  Variable _level0.Svv0XLastAPosible = 1

No tengo mucha idea de qué pasó, por qué antes no funcionaba y ahora sí, ah... si le pongo 3 ocurre el error ¿pero por qué? Lo pensaré.


« Última modificación: Ayer a las 08:00 por Tachikomaia » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines