Utilizzando la soluzione di marcog ho trovato un pattern che inizia da n=16
. Per illustrare questo, ecco le sequenze di tasti per un n=24
massimo di n=29
, ho sostituito ^ A con S (seleziona), ^ C con C (copia) e ^ V con P (incolla) per la leggibilità:
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
Dopo un 4 As iniziale, il modello ideale è selezionare, copiare, incollare, incollare, incollare e ripetere. Questo moltiplicherà il numero di As per 4 ogni 5 sequenze di tasti. Se questo schema di 5 sequenze di tasti non può consumare le sequenze di tasti rimanenti da solo, un certo numero di 4 sequenze di tasti (SCPP) consumano le sequenze di tasti finali, sostituendo SCPPP (o rimuovendo una delle paste) se necessario. Le 4 sequenze di tasti moltiplicano il totale per 3 ogni 4 sequenze di tasti.
Usando questo modello qui c'è del codice Python che ottiene gli stessi risultati della soluzione di marcog, ma è O (1) edit : Questo è in realtà O (log n) dovuto all'esponenziazione, grazie a IVlad per averlo sottolineato.
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)
Calcolo di e3:
ci sono sempre tra 0 e 4 schemi SCPP alla fine dell'elenco di tasti, perché n % 5 == 4
ce ne sono 4, n % 5 == 1
ci sono 3, n % 5 == 2
ci sono 2, n % 5 == 3
ci sono 1 e n % 5 == 4
ce ne sono 0. Questo può essere semplificato in(4 - n) % 5
.
Calcolo di e4:
il numero totale di pattern aumenta di 1 ogni volta n % 5 == 0
che si scopre che questo numero aumenta esattamente n / 5
. Usando la divisione del piano possiamo ottenere il numero totale di motivi, il numero totale per e4
è il numero totale di motivi meno e3
. Per chi non ha familiarità con Python, //
è la notazione a prova di futuro per la divisione dei piani.
^A
solito è "seleziona tutto",^C
è "copia",^V
è "incolla". Questo ti dà un'idea?