Foros del Web » Programación para mayores de 30 ;) » Programación General »

Serie de Fibonacci, pero de letras.

Estas en el tema de Serie de Fibonacci, pero de letras. en el foro de Programación General en Foros del Web. Supongan que 0 es "A" 1 es "B" ... 26 es "Z" 27 es "AA" y así sigue. ¿Cómo podría hacer que la computadora obtenga ...
  #1 (permalink)  
Antiguo 02/12/2015, 18:10
Tachikomaia
Invitado
 
Mensajes: n/a
Puntos:
Serie de Fibonacci, pero de letras.

Supongan que
0 es "A"
1 es "B"
...
26 es "Z"
27 es "AA"

y así sigue.

¿Cómo podría hacer que la computadora obtenga sólo los números de la serie, y los traduzca a las "frases" como he mostrado?

Dicho de otro modo, quiero "combinar" estos 2 programas:
Código a:
Ver original
  1. // Elementos candidatos: Desde 1 y 1, Suma.
  2. E_Anterior = 1;
  3. E = 1;
  4. // Otros elementos:
  5. Resp = "";
  6.  
  7. // Análisis:
  8. if (E > 10) {
  9.     Resp = "Un elemento que cumple la condición es el "+E+"\n"+Resp;
  10.     stop ();
  11. }
  12.  
  13. Resp = "El elemento "+E+" no cumple la condición.\n"+Resp;
  14. E = E_Anterior + E;
  15. E_Anterior = E - E_Anterior;
  16. gotoAndPlay (2);
Genera la serie de F mientras los números obtenidos (su valor) sean menores o igual que 10.

Código a:
Ver original
  1. // Elementos candidatos: Desde A, +1.
  2. E = "A";
  3. // Otros elementos:
  4. Data = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
  5. Char0ID = 0;
  6. CursorMaxPos = 0;
  7.  
  8. // Anali:
  9. if (E == "OK") {
  10.     Resp = "Un elemento que cumple la condición es el "+E+"\n"+Resp;
  11.     stop ();
  12. }
  13.  
  14. Resp = "El elemento "+E+" no cumple la condición.\n"+Resp;
  15. Cursor = 0;
  16. E = "";
  17.  
  18. Resu = "Char"+Cursor+"ID";
  19. EvaledResu = eval(Resu)+1;
  20.  
  21. if (EvaledResu < 27) {
  22.     set (Resu, EvaledResu);
  23.     // Agrega caracter.
  24.     E = Data.charAt(EvaledResu)+E;
  25.     Cursor = Cursor+1;
  26.     if (Cursor > CursorMaxPos) {
  27.         // Todos agregados.
  28.         gotoAndPlay (2);
  29.     } else {
  30.         // Volverá a agregar.
  31.     }
  32. } else {
  33.     // El char a agregar está fuera del límite.
  34.     set (Resu, 0);
  35.     E = E+Data.charAt(0);
  36.     Cursor = Cursor+1;
  37.     if (Cursor > CursorMaxPos) {
  38.         // Hay que agregar uno.
  39.         CursorMaxPos = CursorMaxPos+1;
  40.         set ("Char"+CursorMaxPos+"ID", 0);
  41.         E = E+Data.charAt(0);
  42.         gotoAndPlay (2);
  43.     } else {
  44.         // Hay que aumentar/agregar uno.
  45.         gotoAndPlay (4);
  46.     }
  47. }
  48.  
  49. Resu = "Char"+Cursor+"ID";
  50. EvaledResu = eval(Resu);
  51. gotoAndPlay (5);
Genera "frases" mientras las frases obtenidas (su valor) sean distintas a "OK".

Posiblemente se pueda simplificar el 2ndo programa, agradezco ideas también sobre eso.
  #2 (permalink)  
Antiguo 03/12/2015, 00:09
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Serie de Fibonacci, pero de letras.

Para la sucesión de Fibonacci se usan números naturales (números a partir del cero con este incluido). Si usas letras ya no es la serie de Fibonacci, es otra "cosa".

Por favor, redacta bien las cosas porque puede llevar a equivocación a otros usuarios. De la misma manera, si vas a usar un lenguaje de programación indícalo. La gente no tiene porque adivinarlo para poder ayudarte.
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 03/12/2015, 00:59
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Serie de Fibonacci, pero de letras.

Hola:

Para la sucesión, o solo el número puedes encontrar referencias en algunas de nuestras competencias... te paso la resolución donde participé (javascript): Fibo(1000): códigos y comentarios..

Ahora te tocaría hacer la conversión añadida...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 04/12/2015, 12:52
Tachikomaia
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Serie de Fibonacci, pero de letras.

Cita:
Iniciado por Malenko Ver Mensaje
Si usas letras ya no es la serie de Fibonacci, es otra "cosa".

Por favor, redacta bien las cosas porque puede llevar a equivocación a otros usuarios.
Hice lo que pude, si sabes una mejor solución dímela.

Cita:
De la misma manera, si vas a usar un lenguaje de programación indícalo. La gente no tiene porque adivinarlo para poder ayudarte.
Ok... lo que pasa es que tiendo a creer que la mayoría lo sabe.

caricatos:
Me tomará un tiempo prepararme mentalmente para leer tu código, y luego otro para entenderlo, pero parece que haces la serie como si fuesen sumas de caracteres, lo cual supongo que me sirve y sino me parece al menos inspirador, me hace ver algo intermedio que me sirve a modo de práctica-preparación para el problema en cuestión =)
  #5 (permalink)  
Antiguo 08/12/2015, 00:21
Tachikomaia
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Serie de Fibonacci, pero de letras.

Aún no he analizado tu código.

He podido hacer un traductor de números con sistema de 10 dígitos o decimal (aunque no son decimales, son enteros, vaya nombres ambiguos le ponen xP ) a hexadecimal, basado en esto:
https://www.youtube.com/watch?v=Myr1vaHjCtM
1:00

Pero claro la idea no es esa, sólo lo hice para practicar. Tiene además un problema previsible: No da valores con 0 adelante. Y los necesito así:
Valor real______________mi valor
0____________________0 o "A"
1____________________1 o "B"
...
26___________________26 o "Z"
27___________________¿0 y 0? o "AA"

Si usara el método del video tendría que dividir entre 27 en vez de 8, pero como dije eso no me da resultados con 0 delante, el 27 lo traduciría a ¿1 y 0? o "BA".

¿Cómo puedo lograrlo?

Si volvemos al tema de los hexadecimales, que sería más sencillo, quisiera lograr algo así:
Valor real______________mi valor "hexadecimal"
0____________________0
1____________________1
...
15___________________15 o "F"
16___________________¿0 y 0?

Lo que se me ocurre es crear un "espacio" o caracter que no use. O sea, este es mi traductor:
Código AS:
Ver original
  1. Escena 1
  2.    actions for fotograma 1
  3.       // Inician datos.
  4.       N = 1;
  5.       Data = "0123456789ABCDEF";
  6.       Resp = "";
  7.    actions for fotograma 2
  8.       // Reset...
  9.       NDividiéndose = N;
  10.       Hexa = "";
  11.    actions for fotograma 3
  12.       if (NDividiéndose<16) {
  13.          // Es el último char que se agrega.
  14.          Hexa = Data.charAt(NDividiéndose) + Hexa;
  15.          Resp = Hexa+"\n"+Resp;
  16.          // Ahora el siguiente número a traducir.
  17.          N = N+1;
  18.          gotoAndPlay (2);
  19.       }
  20.    actions for fotograma 4
  21.       // Traduciendo num a chars.
  22.       NextNDividiéndose = Math.floor(NDividiéndose/16);
  23.       Resto = NDividiéndose-NextNDividiéndose*16;
  24.       Hexa = Data.charAt(Resto) + Hexa;
  25.       NDividiéndose = NextNDividiéndose;
  26.       gotoAndPlay (3);

Lo que estoy planteando es definir Data así:
Data = " 0123456789ABCDEF";
¿Cómo traduciría los números del 0 al 15? Tomando el caracter correspondiente +1.
¿Y el 16? 0 y el caracter correspondiente +1. Es decir, 16/16=1 y se toma el caracter 1, o sea 0. Y el resto de la división es 0, por lo que se tomaría el caracter espacio, pero como en este caso le sumamos 1 es el 0, que junto con el otro forman 00, lo que busco.
De esta forma logro que aparezcan 0s delante, pero si me da resto 0 en un punto intermedio -no al final- entonces debería sumarle 1, pero si hago eso los resultados con 0 delante aparecerán 2 veces, no sé, hay que pulir esto o hallar otra forma.
  #6 (permalink)  
Antiguo 08/12/2015, 02:00
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Serie de Fibonacci, pero de letras.

Hola:

Cita:
Iniciado por Tachikomaia Ver Mensaje
caricatos:
Me tomará un tiempo prepararme mentalmente para leer tu código, y luego otro para entenderlo, pero parece que haces la serie como si fuesen sumas de caracteres, lo cual supongo que me sirve y sino me parece al menos inspirador, me hace ver algo intermedio que me sirve a modo de práctica-preparación para el problema en cuestión =)
La verdad es que la complejidad que ves es debido a que en javascript para números grandes utiliza notación científica (con poca precisión), así que lo he planteado como cadenas de texto; pero la resolución es básicamente un array de dos números:

Código Javascript:
Ver original
  1. function fibo(n) {
  2. f = [1, 0];
  3. for (i = 0; i < n; i++) f[i % 2] += f[(i+1) % 2];
  4. return f[n % 2];
  5. }

Otra referencia: [Aporte] Serie de Fibonacci. Ahí verás este mismo código, pero con un error básico que está corregido.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo

Etiquetas: fibonacci, programa, serie
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:28.