Me di cuenta de que no es necesario, en este tipo de problemas, marcar el coste de cada conexión, ya que si por ejemplo para ir de A a C hay que pasar por B, entonces en vez de AC se hará ABC, es lo mismo. Aunque puede complicar el método de solución.
El método que yo usaba para este problema no es eficiente. En vez de tanto paso a paso, pudiéndose ir repetidas veces a los mismos puntos, o poniendo código para evitarlo, conviene simplemente generar las posibles rutas, algo como:
Ruta1 = "ABCDEFGH";
Ruta2 = "ABCDEFHG";
Etc, y luego ver cual tiene menor coste. En este caso hay que tener todos los costes, o sea lo que comenté en el párrafo anterior no sirve.
Sé cómo generar una lista así, pero de un modo que me parece poco eficiente, mirando las listas a ver si el punto está incluído, usando ifs... Le pregunté a GPT, dijo:
En Macromedia Flash 5, utilizando ActionScript, puedes generar todas las palabras posibles de 8 caracteres utilizando solo las letras de la "A" a la "H" sin repetir ninguna letra. Esto se trata de generar todas las **permutaciones** de 8 elementos tomados de un conjunto de 8.
### **Enfoque: Generación de Permutaciones**
Dado que el conjunto tiene exactamente 8 caracteres y queremos formar palabras de 8 caracteres sin repetir, debemos generar todas las permutaciones posibles del conjunto `["A", "B", "C", "D", "E", "F", "G", "H"]`.
El número total de permutaciones es:
\[
8! = 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1 = 40,320
\]
A continuación, te muestro cómo hacerlo en **ActionScript de Flash 5**:
---
### **Código en ActionScript (Flash 5) para generar permutaciones**
```actionscript
// Definir los caracteres disponibles
var caracteres:Array = ["A", "B", "C", "D", "E", "F", "G", "H"];
var resultados:Array = []; // Aquí almacenaremos las permutaciones
// Función recursiva para generar permutaciones
function generarPermutaciones(prefijo:String, disponibles:Array):Void {
if (disponibles.length == 0) {
resultados.push(prefijo); // Si no quedan más caracteres, almacenamos la palabra generada
return;
}
for (var i:Number = 0; i < disponibles.length; i++) {
var nuevoPrefijo:String = prefijo + disponibles; // Agregar la letra actual al prefijo
var nuevaLista:Array = disponibles.slice(); // Copiar la lista sin modificar el original
nuevaLista.splice(i, 1); // Eliminar la letra actual para no repetirla
generarPermutaciones(nuevoPrefijo, nuevaLista); // Llamada recursiva
}
}
// Iniciar la generación de permutaciones
generarPermutaciones("", caracteres);
// Mostrar resultados en la salida (puedes usarlos como quieras)
for (var j:Number = 0; j < resultados.length; j++) {
trace(resultados[j]); // Muestra cada permutación en la consola de salida
}
```
---
### **Explicación del Código**
1. **Definimos los caracteres disponibles:** `["A", "B", "C", "D", "E", "F", "G", "H"]`.
2. **Creamos la función `generarPermutaciones(prefijo, disponibles)`**, que:
- Recibe un `prefijo` (la palabra en construcción).
- Recibe `disponibles` (los caracteres que aún pueden usarse).
- Si no quedan más caracteres en `disponibles`, la palabra está completa y se almacena en `resultados`.
- Si aún hay caracteres, se elige uno, se lo agrega al `prefijo`, se elimina de `disponibles`, y se llama a la función nuevamente con los valores actualizados.
3. **Llamamos a la función con un prefijo vacío `""` y la lista completa de caracteres.**
4. **Finalmente, mostramos todas las combinaciones usando `trace()`.**
---
### **Salida esperada**
Este código generará y mostrará todas las 40,320 permutaciones en la consola de salida de Flash.
**Ejemplo de algunas permutaciones generadas:**
```
ABCDEFGH
ABCDEFHG
ABCDEGFH
ABCDEGHF
ABCEDFGH
ABCEDFHG
...
HGFEDCBA
```
Cada palabra tiene exactamente 8 caracteres sin repeticiones.
---
### **Conclusión**
Este código en **ActionScript 1.0** (compatible con Flash 5) genera todas las permutaciones posibles de las letras de "A" a "H" sin repetir ninguna. La lógica es completamente recursiva y eficiente para este tamaño de problema.
Si necesitas almacenar estos resultados en un campo de texto en Flash o exportarlos, puedes modificar el código para agregarlos a un `TextField` o guardarlos en un archivo.
¡Espero que esto te ayude! 🚀
Proximamente intentaré más entender ese código.