En utilisant la solution de marcog, j'ai trouvé un modèle qui commence à n=16
. Pour illustrer cela, voici les frappes n=24
jusqu'à n=29
, j'ai remplacé ^ A par S (sélection), ^ C par C (copie) et ^ V par P (coller) pour plus de lisibilité:
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
Après un premier 4 As, le modèle idéal est de sélectionner, copier, coller, coller, coller et répéter. Cela multipliera le nombre de As par 4 toutes les 5 frappes. Si ce modèle de 5 touches ne peut pas consommer les touches restantes à lui seul, un certain nombre de 4 modèles de touches (SCPP) consomme les dernières frappes, remplaçant SCPPP (ou supprimant l'une des pâtes) si nécessaire. Les 4 modèles de touches multiplient le total par 3 toutes les 4 frappes.
En utilisant ce modèle, voici du code Python qui obtient les mêmes résultats que la solution de marcog, mais est O (1) edit : C'est en fait O (log n) en raison de l'exponentiation, merci à IVlad pour l'avoir signalé.
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)
Calcul de e3:
Il y a toujours entre 0 et 4 motifs SCPP à la fin de la liste des touches, car n % 5 == 4
il y en a 4, n % 5 == 1
il y en a 3, n % 5 == 2
il y en a 2, n % 5 == 3
il y en a 1 et n % 5 == 4
il y en a 0. Cela peut être simplifié à (4 - n) % 5
.
Calcul de e4:
Le nombre total de motifs augmente de 1 chaque fois n % 5 == 0
, car il s'avère que ce nombre augmente à exactement n / 5
. En utilisant la division du sol, nous pouvons obtenir le nombre total de motifs, le nombre total pour e4
est le nombre total de motifs moins e3
. Pour ceux qui ne connaissent pas Python, //
est la notation à l'épreuve du temps pour la division par étage.
^A
faut généralement "sélectionner tout",^C
"copier",^V
"coller". Cela vous donne-t-il une idée?