Autor Tema: ¿Cuál es la secuencia óptima de pasos para llegar a un valor dado?

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

24 Junio, 2018, 07:43 pm
Leído 4001 veces

manooooh

  • Matemático
  • Mensajes: 2,955
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Hola!

Supongamos que hay dos personas compitiendo en una carrera. Dicho escenario consta de lo siguiente: las personas (que se suponen con exactamente las mismas habilidades y capacidades) deberán tipear en una computadora (que se suponen iguales) una o varias letras en un cierto tiempo hasta alcanzar una cantidad, llamémosle \( n \), de letras. El que consiga llegar primero a esa cantidad gana.

Comentario
Es una situación totalmente ideal para reflejar el sentido matemático del problema.
[cerrar]

Los jugadores tienen dos herramientas:
  • Comando CTRL+V (pegado);
  • Comando CTRL+C (copiado).

Comentario
Desde ya que pueden ser otras etiquetas; se refleja lo que se hace normalmente en un ordenador.
[cerrar]

Tienen dos opciones:
  • Usar el comando CTRL+V para agregar una cantidad fijada de letras (inicialmente está establecido en 1 pero aumenta si el jugador quiere);
  • Seleccionar todo el texto escrito desde la posición actual hasta la inicial, utilizar el comando CTRL+C (copiar), ubicarse de nuevo en la posición actual y luego ir al inciso anterior.

Comentario
Vamos, ¿quién no hizo eso alguna vez en un trabajo? :P.
[cerrar]

Sin embargo, cada acción tiene su tiempo:
  • Utilizar el comando CTRL+V lleva un tiempo de 0,5 segundos;
  • Utilizar el comando CTRL+C lleva un tiempo de 1 segundo;

Comentario
Son tiempos arbitrarios que reflejan lo más posible un escenario real. La condición es que el pegado tome menos tiempo que seleccionar todo el texto precedente, copiarlo, volver a la posición actual y pegarlo.
[cerrar]


La idea es tratar de modelizar esta situación usando matemática; saber cuál es la secuencia óptima de pasos para llegar a una longitud de caracteres dada a través de estos dos caminos.


Observación: El primer paso que realizan es copiar lo guardado (de ahora en más usaremos la ‘A’, por ejemplo) en la memoria del ordenador. ‘A’ está guardada en memoria, por lo que en la primera iteración tendremos que usar CTRL+V; por tanto el primer paso lleva un tiempo de 0,5. En la segunda iteración solamente tenemos una letra, no importa si está guardada en memoria o si tenemos que hacer el arrastre hacia atrás y copiar todo lo anterior. Entonces, ¿qué hacemos? ¿CTRL+V (1 letra, 0,5 segundos) o copiar lo anterior (que sólo está escrita una ‘A’) y pegarlo (1 segundo)? Como creo que es el único momento que esto ocurre supondremos que los competidores optan por el camino más rápido, esto es disponer de 0,5 segundos.

Observación 2: Se puede sobrepasar la longitud \( n \) dada; no es necesario llegar con lo justo.



Ejemplo: Tienen que escribir 10 letras. Intenté de varias formas y todas me arrojan 3,5 segundos (salvo cometer errores a propósito, pero la idea es no tropezar intencionalmente; por ejemplo se tienen guardadas 6 letras y ya se llevan otras 6, el jugador no copiará todo lo anterior para guardar 12 letras y así tener \( 6 + 12 \) letras (usando 1 segundo) porque puede simplemente copiar lo que tenía en memoria (6 letras) para llegar a \( 6+6 \) letras (y así se usa medio segundo)).



Lo veo extraño… no intenté con números más grandes (100 letras, un millón de letras) pero pareciera que por todos los caminos (tomando los óptimos) convergen a un mismo resultado (con las reglas que dije más arriba). ¿Por qué sucede esto? ¿A través de qué herramienta/s matemática/s podemos solucionar este problema? ¿Hay fórmula para un caso general?

Aclaro que es un problema que inventé yo, puede ser que sea un disparate y de fácil resolución. Pero no logro darme cuenta por qué pasa con números pequeños...

Muchas gracias!

Saludos

AGREGADO. Gracias Luis

25 Junio, 2018, 12:45 pm
Respuesta #1

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 46,993
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Hola

 No sé si he entendido bien todo. Quizá sería bueno que detallases el ejemplo del os 10 caracteres.

 ¿Se trata de conseguir exactamente 10 caracteres o puedes "pasarte"?.

 En cada paso sólo ha dos opciones:

 - O bien volcar lo que hay en memoria y lleva 0.5 segundos.
 - O bien almacenar en memoria todo lo escrito y volverlo a pegar, lleva un segundo. ¿Eso te así?. ¿La opción de un segundo incluye almacenado en memoria y también pegado?.

Saludos.

25 Junio, 2018, 08:46 pm
Respuesta #2

manooooh

  • Matemático
  • Mensajes: 2,955
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Hola

¿Se trata de conseguir exactamente 10 caracteres o puedes "pasarte"?.

Gracias por la observación; pensé que había quedado claro. Ya edité mi mensaje con tu inquietud, pero sí, se puede sobrepasar la cadena, no hay restricciones para ello.

No sé si he entendido bien todo. Quizá sería bueno que detallases el ejemplo del os 10 caracteres.

 En cada paso sólo ha dos opciones:

 - O bien volcar lo que hay en memoria y lleva 0.5 segundos.
 - O bien almacenar en memoria todo lo escrito y volverlo a pegar, lleva un segundo. ¿Eso te así?. ¿La opción de un segundo incluye almacenado en memoria y también pegado?.

Creo que con el ejemplo quedará más claro:

  • El jugador 1 hace:

    \( \begin{matrix}
    \underbrace A_{1^\text{ra}\\\text{iteración}}&\&&\underbrace A_{2^\text{da}}&\&&\underbrace{AA}_{3^\text{ra}}&\&&\underbrace{AAAA}_{4^\text{ta}}&\&&\underbrace{AAAA}_{5^\text{ta}}&(\text{Longitud}=12\geq10)&=&\\
    0.5&+&0.5&+&1&+&1&+&0.5&&=&\boxed{3.5\text{ segundos}}
    \end{matrix} \)

  • El jugador 2 hace:

    \( \begin{matrix}
    \underbrace A_{1^\text{ra}\\\text{iteración}}&\&&\underbrace A_{2^\text{da}}&\&&\underbrace{A}_{3^\text{ra}}&\&&\underbrace{AAA}_{4^\text{ta}}&\&&\underbrace{AAAAAA}_{5^\text{ta}}&(\text{Longitud}=12\geq10)&=&\\
    0.5&+&0.5&+&0.5&+&1&+&1&&=&\boxed{3.5\text{ segundos}}
    \end{matrix} \)

  • Otro jugador podría hacer:

    \( \begin{matrix}
    \underbrace A_{1^\text{ra}\\\text{iteración}}&\&&\underbrace A_{2^\text{da}}&\&&\underbrace{A}_{3^\text{ra}}&\&&\underbrace{A}_{4^\text{ta}}&\&&\underbrace{A}_{5^\text{ta}}&\&&\underbrace{AAAAA}_{6^\text{ta}}&(\text{Longitud}=10\geq10)&=&\\
    0.5&+&0.5&+&0.5&+&0.5&+&0.5&+&1&&=&\boxed{3.5\text{ segundos}}
    \end{matrix} \)

Como se ve, intentando de varias maneras todas me dan el mismo resultado.

(...) ¿Por qué sucede esto? ¿A través de qué herramienta/s matemática/s podemos solucionar este problema? ¿Hay fórmula para un caso general?

(...) Pero no logro darme cuenta por qué pasa con números pequeños...

Saludos

27 Junio, 2018, 12:35 pm
Respuesta #3

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 46,993
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Hola

 Bien; pero no es cierto "de cualquier manera" se obtengan los mismos segundos. Por ejemplo si queremos conseguir 12.

 Si hacemos:

0.5 A
0.5 AA
1.0 AAAA
0.5 AAAAAA
0.5 AAAAAAAA
0.5 AAAAAAAAAA
0.5 AAAAAAAAAAAA
 
 el tiempo total es 4.0

 Si hacemos:

0.5 A
0.5 AA
1.0 AAAA
1.0 AAAAAAAA
0.5 AAAAAAAAAAAA

 obtenemos un tiempo total de 3.5

 En general si no me equivoco el tiempo mínimo para obtener \( N \) es \( [log_2(N)]+\color{red}\dfrac{1}{2}\color{black}\left\lceil \dfrac{N-2^{[log_2(N)]}}{2^{[log_2(N)]-1}}\right\rceil \)

 Dicho de otra manera para \( x\geq 2 \) entero:

 \( x \) segundos para número \( N \) entre \( 2^x-2^{x-2}<N\leq 2^x \)
 \( x+0.5 \) segundos para número \( N \) entre \( 2^x<N\leq 2^x+2^{x-1} \)

Saludos.

CORREGIDO

27 Junio, 2018, 01:42 pm
Respuesta #4

manooooh

  • Matemático
  • Mensajes: 2,955
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Hola

En la segunda iteración de los dos ejemplos que describís estás omitiendo esta observación:

Citar
Observación: El primer paso que realizan es copiar lo guardado (de ahora en más usaremos la ‘A’, por ejemplo) en la memoria del ordenador. ‘A’ está guardada en memoria, por lo que en la primera iteración tendremos que usar CTRL+V; por tanto el primer paso lleva un tiempo de 0,5. En la segunda iteración solamente tenemos una letra, no importa si está guardada en memoria o si tenemos que hacer el arrastre hacia atrás y copiar todo lo anterior. Entonces, ¿qué hacemos? ¿CTRL+V (1 letra, 0,5 segundos) o copiar lo anterior (que sólo está escrita una ‘A’) y pegarlo (1 segundo)? Como creo que es el único momento que esto ocurre supondremos que los competidores optan por el camino más rápido, esto es disponer de 0,5 segundos.

De hecho creo que es imposible que empiece con A y en el segundo paso haya AA.

¿Cambian en algo las fórmulas que describiste? Si no es así las revisaré en otro momento (ahora estoy en clases :laugh:).

¿Se entiende a lo que voy? Si no es así hacelo saber :).

Saludos

27 Junio, 2018, 01:49 pm
Respuesta #5

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 46,993
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Hola

De hecho creo que es imposible que empiece con A y en el segundo paso haya AA.

No has entendido (creo) mi notación. En cada fila escribo la nueva cadena COMPLETA. Es decir:

A
AA

Significa que primero escribo una A; y luego escribo otra A. De manera que el total de lo escrito es AA.

Saludos.

28 Junio, 2018, 12:13 am
Respuesta #6

manooooh

  • Matemático
  • Mensajes: 2,955
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Hola

No has entendido (creo) mi notación. En cada fila escribo la nueva cadena COMPLETA. Es decir:

A
AA

Significa que primero escribo una A; y luego escribo otra A. De manera que el total de lo escrito es AA.

Claro, no había entendido tu notación. Ahora me quedó claro. Gracias.



En general si no me equivoco el tiempo mínimo para obtener \( N \) es \( [log_2(N)]+\left\lceil \dfrac{N-2^{[log_2(N)]}}{2^{[log_2(N)]-1}}\right\rceil \)

Wow, qué pedazo de fórmula... ¿La dedujiste o viene de algún lado?

Para \( N=100 \) (según WolframAlpha, corregime si tipeé mal algo), ¿el tiempo mínimo sería \( 6.64\approx 6.5 \) o \( 6.64\approx 7 \) segundos?

Saludos

28 Junio, 2018, 01:50 pm
Respuesta #7

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 46,993
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Hola

En general si no me equivoco el tiempo mínimo para obtener \( N \) es \( [log_2(N)]+\left\lceil \dfrac{N-2^{[log_2(N)]}}{2^{[log_2(N)]-1}}\right\rceil \)

Wow, qué pedazo de fórmula... ¿La dedujiste o viene de algún lado?

Para \( N=100 \) (según WolframAlpha, corregime si tipeé mal algo), ¿el tiempo mínimo sería \( 6.64\approx 6.5 \) o \( 6.64\approx 7 \) segundos?

La idea de la fórmula es ir duplicando mediante el paso que "cuesta" un segundo, hasta llegar a la mayor potencia de \( 2 \) menor que \( N \). Después usar el paso rápido o el otro en función de si lo que nos falta para \( N \) se puede alcanzar con el rápido o no.

Además en la fórmula los corchetes son parte entera y \( \lceil \) y \( \rceil \) la parte entera superior (función techo)

De todas formas no es óptimo. Por ejemplo la fórmula para \( 36 \) da, \( 5.5 \) segundos pero puede hacerse en \( 5 \).

Lo que es seguro es que en una cadena óptima salvo en los dos primeros pasos, no es necesario que aparezcan dos pasos de 0.5 segundos. Se llega al mismo número sustituyéndolo con un solo paso de 1 segundo, con la ventaja de que el código almacenado es aun encima más largo (útil para proseguir más rápidamente con nuestra escritura).

Saludos.

29 Junio, 2018, 05:56 am
Respuesta #8

manooooh

  • Matemático
  • Mensajes: 2,955
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Hola

La idea de la fórmula es ir duplicando mediante el paso que "cuesta" un segundo, hasta llegar a la mayor potencia de \( 2 \) menor que \( N \). Después usar el paso rápido o el otro en función de si lo que nos falta para \( N \) se puede alcanzar con el rápido o no.

Además en la fórmula los corchetes son parte entera y \( \lceil \) y \( \rceil \) la parte entera superior (función techo)

De todas formas no es óptimo. Por ejemplo la fórmula para \( 36 \) da, \( 5.5 \) segundos pero puede hacerse en \( 5 \).

Lo que es seguro es que en una cadena óptima salvo en los dos primeros pasos, no es necesario que aparezcan dos pasos de 0.5 segundos. Se llega al mismo número sustituyéndolo con un solo paso de 1 segundo, con la ventaja de que el código almacenado es aun encima más largo (útil para proseguir más rápidamente con nuestra escritura).

Cuesta digerir. La idea está, creaste una fórmula que, de acuerdo a la iteración actual opta por un comando u otro. Lo que no me queda claro es en qué parte de la fórmula "ocurre" eso; si fuera una función por partes quizás lo vería mejor (tengo la cabeza del típico programador que le gusta ver estructurado su código en if statements separados :laugh:).

Por otro lado, si los corchetes representan la función parte entera el link con el ejemplo está mal. ¿Podrías mostrarme un ejemplo (ver cuántos segundos tarda) ya corregido en alguna calculadora, por favor?

Saludos

29 Junio, 2018, 10:58 am
Respuesta #9

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 46,993
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Hola

Cuesta digerir. La idea está, creaste una fórmula que, de acuerdo a la iteración actual opta por un comando u otro. Lo que no me queda claro es en qué parte de la fórmula "ocurre" eso; si fuera una función por partes quizás lo vería mejor (tengo la cabeza del típico programador que le gusta ver estructurado su código en if statements separados :laugh:).

El algoritmo para conseguir N>3 sería, llamando \( m \) al número de caracteres escritos y \( L \) a la longitud de lo que hay copiado en "caché":

1 paso: m=1      0.5s
2 paso: m=2      0.5s
3 paso: m=4      1s (L=2)

while m<N
   if 2m<= N
       m=2m      1s (L=m)
   else if N-m<=L
       m=m+L      0.5s
   else
       m=2m       1s (L=m)
   endif
end while

Citar
Por otro lado, si los corchetes representan la función parte entera el link con el ejemplo está mal. ¿Podrías mostrarme un ejemplo (ver cuántos segundos tarda) ya corregido en alguna calculadora, por favor?

La fórmula sería:

\( [log_2(N)]+\color{red}\dfrac{1}{2}\color{black}\left\lceil \dfrac{N-2^{[log_2(N)]}}{2^{[log_2(N)]-1}}\right\rceil \)

La tienes aquírelaizada para \( N=100 \). Da \( 7 \) segundos. Los pasos serían:

m=1  0.5s
m=2  0.5s
m=4     1s
m=8     1s
m=16   1s
m=32   1s
m=64   1s
m=128  1s

Saludos.

P.D. Como te dije después, sin embargo este método no da siempre el menor tiempo. Hay que mejorarlo.

01 Julio, 2018, 08:31 pm
Respuesta #10

manooooh

  • Matemático
  • Mensajes: 2,955
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Hola

Cuesta digerir. La idea está, creaste una fórmula que, de acuerdo a la iteración actual opta por un comando u otro. Lo que no me queda claro es en qué parte de la fórmula "ocurre" eso; si fuera una función por partes quizás lo vería mejor (tengo la cabeza del típico programador que le gusta ver estructurado su código en if statements separados :laugh:).

El algoritmo para conseguir N>3 sería, llamando \( m \) al número de caracteres escritos y \( L \) a la longitud de lo que hay copiado en "caché":

1 paso: m=1      0.5s
2 paso: m=2      0.5s
3 paso: m=4      1s (L=2)

while m<N
   if 2m<= N
       m=2m      1s (L=m)
   else if N-m<=L
       m=m+L      0.5s
   else
       m=2m       1s (L=m)
   endif
end while

Citar
Por otro lado, si los corchetes representan la función parte entera el link con el ejemplo está mal. ¿Podrías mostrarme un ejemplo (ver cuántos segundos tarda) ya corregido en alguna calculadora, por favor?

La fórmula sería:

\( [log_2(N)]+\color{red}\dfrac{1}{2}\color{black}\left\lceil \dfrac{N-2^{[log_2(N)]}}{2^{[log_2(N)]-1}}\right\rceil \)

La tienes aquírelaizada para \( N=100 \). Da \( 7 \) segundos. Los pasos serían:

m=1  0.5s
m=2  0.5s
m=4     1s
m=8     1s
m=16   1s
m=32   1s
m=64   1s
m=128  1s

Saludos.

P.D. Como te dije después, sin embargo este método no da siempre el menor tiempo. Hay que mejorarlo.

¡Muchísimas gracias! Me queda claro con el algoritmo. No pasa nada si no es totalmente óptimo, quería saber si había una fórmula para describir esta situación :laugh:.



Ahora bien... algo un poco más difícil...

Dada una cantidad \( s \) de segundos, ¿es posible saber un intervalo (natural) de longitudes desde las cuales se haya hecho el camino?

Por ejemplo, con \( 3.5 \) segundos el rango de longitudes con las que se puede llegar a ese tiempo es de \( [10,12] \) (más o menos, sin ser matemático como vos porque no me sale bien :().

Me parece que habría que resolver la ecuación

\( [log_2(N)]+\dfrac{1}{2}\left\lceil \dfrac{N-2^{[log_2(N)]}}{2^{[log_2(N)]-1}}\right\rceil=3.5 \),

y, en general,

\( [log_2(N)]+\dfrac{1}{2}\left\lceil \dfrac{N-2^{[log_2(N)]}}{2^{[log_2(N)]-1}}\right\rceil=y \).

O sea que sería hallar la inversa de esa función, ¿correcto? Acá lo simplifico con WolframAlpha. ¿Cómo se podría interpretar este resultado, maestro? ¿A través de intervalos, como dije?

Saludos


EDIT: Siguiendo mi idea de la función inversa, resolver esa ecuación, según WolframAlpha, da un intervalo de \( [9,12] \)... ¿Cuándo es posible dar una cadena de \( 9 \) caracteres? ¿Ocurre porque la función no es óptima? :O

02 Julio, 2018, 12:20 pm
Respuesta #11

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 46,993
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Hola

Dada una cantidad \( s \) de segundos, ¿es posible saber un intervalo (natural) de longitudes desde las cuales se haya hecho el camino?

Por ejemplo, con \( 3.5 \) segundos el rango de longitudes con las que se puede llegar a ese tiempo es de \( [10,12] \) (más o menos, sin ser matemático como vos porque no me sale bien :().

Entiendo que te refieres siguiendo el algoritmo que describí y no otro cualquiera (evidentemente sabiendo el tiempo total, la longitud de la cadena que hemos escrito depende de los pasos que hayamos dado que no pueden reconstruirse sabiendo solo el tiempo final).

Entonces con el algoritmo descrito sabemos que en un tiempo de \( t \) segundos hemos escrito exactamente:

\( m(t)=2^{[t ]}+(t-[ t])*2^{[t]}=(1+t-[t ])2^{[t ]} \) caracteres

Por ejemplo para \( 3.5 \) segundos hemos escrito exactamente \( 12 \) caracteres.

Fíjate que con mi algoritmo, en \( 3 \) segundos escribimos \( 8 \) caracteres y en \( 3.5 \), escribimos \( 12 \) caracteres, es decir, nunca escribimos exactamente \( 9,10 \) ó 11 caracteres.

Entonces en \( t \) segundos escribimos una cadena de \( m(t) \) caracteres válida para valores de \( m \) en el rango

\( m(t-1)<m\leq m(t) \)   (*)

Por ejemplo para \( t=3.5 \), \( 8<m\leq 12 \).

Citar
EDIT: Siguiendo mi idea de la función inversa, resolver esa ecuación, según WolframAlpha, da un intervalo de \( [9,12] \)... ¿Cuándo es posible dar una cadena de \( 9 \) caracteres? ¿Ocurre porque la función no es óptima? :O

No entiendo la pregunta de... ¿cuándo es posibles dar una cadena de 9 caracteres?. ¿Qué quieres decir con "cuando"?. Como te dije con mi algoritmo para conseguir 9 caracteres en realidad escribimos 12.

Por lo demás ese intervalo está bien (con la interpretación que detallé arriba) y corresponde a (*).

Saludos.

03 Julio, 2018, 02:44 am
Respuesta #12

manooooh

  • Matemático
  • Mensajes: 2,955
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Hola

Entiendo que te refieres siguiendo el algoritmo que describí y no otro cualquiera (evidentemente sabiendo el tiempo total, la longitud de la cadena que hemos escrito depende de los pasos que hayamos dado que no pueden reconstruirse sabiendo solo el tiempo final).

Entonces con el algoritmo descrito sabemos que en un tiempo de \( t \) segundos hemos escrito exactamente:

\( m(t)=2^{[t ]}+(t-[ t])*2^{[t]}=(1+t-[t ])2^{[t ]} \) caracteres

Por ejemplo para \( 3.5 \) segundos hemos escrito exactamente \( 12 \) caracteres.

Fíjate que con mi algoritmo, en \( 3 \) segundos escribimos \( 8 \) caracteres y en \( 3.5 \), escribimos \( 12 \) caracteres, es decir, nunca escribimos exactamente \( 9,10 \) ó 11 caracteres.

Entonces en \( t \) segundos escribimos una cadena de \( m(t) \) caracteres válida para valores de \( m \) en el rango

\( m(t-1)<m\leq m(t) \)   (*)

Por ejemplo para \( t=3.5 \), \( 8<m\leq 12 \).

No entiendo la pregunta de... ¿cuándo es posibles dar una cadena de 9 caracteres?. ¿Qué quieres decir con "cuando"?. Como te dije con mi algoritmo para conseguir 9 caracteres en realidad escribimos 12.

Por lo demás ese intervalo está bien (con la interpretación que detallé arriba) y corresponde a (*).

Claro, creo que me confundí al mezclar mi idea con tu algoritmo.

Me olvidé que el algoritmo no puede saber por qué camino hemos ido pero sí un intervalo natural donde se encuentra la longitud verdadera.

O sea, al ver el intervalo que describís acá:

\( m(t-1)<m\leq m(t) \)   (*)

Por ejemplo para \( t=3.5 \), \( 8<m\leq 12 \).

yo me preguntaba cuál es el camino para llegar a \( 9 \) caracteres. A \( 10 \) sí, y está acá:

\( \begin{matrix}
\underbrace A_{1^\text{ra}\\\text{iteración}}&\&&\underbrace A_{2^\text{da}}&\&&\underbrace{A}_{3^\text{ra}}&\&&\underbrace{A}_{4^\text{ta}}&\&&\underbrace{A}_{5^\text{ta}}&\&&\underbrace{AAAAA}_{6^\text{ta}}&(\text{Longitud}=10\geq10)&=&\\
0.5&+&0.5&+&0.5&+&0.5&+&0.5&+&1&&=&\boxed{3.5\text{ segundos}}
\end{matrix} \)

Lo que pasó es que estaba mezclando tu algoritmo (que decís no es óptimo) con mi idea de alcanzar \( 9 \) caracteres.

Saludos