Al usar la solución de marcog, encontré un patrón que comienza en n=16
. Para ilustrar esto, aquí están las pulsaciones de teclas para n=24
hasta n=29
, reemplacé ^ A con S (seleccionar), ^ C con C (copiar) y ^ V con P (pegar) para facilitar la lectura:
24: A,A,A,A,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P
4 * 4 * 4 * 4 * 4 = 1024
25: A,A,A,A,S,C,P,P,P,S,C,P,P,S,C,P,P,S,C,P,P,S,C,P,P
4 * 4 * 3 * 3 * 3 * 3 = 1296
26: A,A,A,A,S,C,P,P,P,S,C,P,P,P,S,C,P,P,S,C,P,P,S,C,P,P
4 * 4 * 4 * 3 * 3 * 3 = 1728
27: A,A,A,A,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P,S,C,P,P,S,C,P,P
4 * 4 * 4 * 4 * 3 * 3 = 2304
28: A,A,A,A,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P,S,C,P,P
4 * 4 * 4 * 4 * 4 * 3 = 3072
29: A,A,A,A,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P
4 * 4 * 4 * 4 * 4 * 4 = 4096
Después de 4 As iniciales, el patrón ideal es seleccionar, copiar, pegar, pegar, pegar y repetir. Esto multiplicará el número de As por 4 cada 5 pulsaciones de tecla. Si este patrón de 5 pulsaciones no puede consumir las pulsaciones restantes por sí solo, algunos patrones de 4 pulsaciones (SCPP) consumen las pulsaciones finales, reemplazando a SCPPP (o eliminando una de las pastas) según sea necesario. Los 4 patrones de pulsación de teclas multiplican el total por 3 cada 4 pulsaciones.
El uso de este patrón aquí es un código de Python que obtiene los mismos resultados que la solución de marcog, pero es O (1) editar : esto es en realidad O (log n) debido a la exponenciación, gracias a IVlad por señalar eso.
def max_chars(n):
if n <= 15:
return (0, 1, 2, 3, 4, 5, 6, 9, 12, 16, 20, 27, 36, 48, 64, 81)[n]
e3 = (4 - n) % 5
e4 = n // 5 - e3
return 4 * (4 ** e4) * (3 ** e3)
Cálculo de e3:
Siempre hay entre 0 y 4 patrones SCPP al final de la lista de pulsaciones de teclas, porn % 5 == 4
hay 4, n % 5 == 1
hay 3, n % 5 == 2
hay 2, n % 5 == 3
hay 1 y n % 5 == 4
hay 0. Esto se puede simplificar a (4 - n) % 5
.
Cálculo de e4:
El número total de patrones aumenta en 1 siempre que n % 5 == 0
, como resultado, este número aumenta exactamente n / 5
. Usando la división del piso podemos obtener el número total de patrones, el número total de e4
es el número total de patrones menose3
. Para aquellos que no están familiarizados con Python, //
es la notación a prueba de futuro para la división de pisos.
^A
suele ser "seleccionar todo",^C
es "copiar",^V
es "pegar". ¿Eso te da una idea?