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=24massimo 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 == 4ce ne sono 4, n % 5 == 1ci sono 3, n % 5 == 2ci sono 2, n % 5 == 3ci sono 1 e n % 5 == 4ce 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 == 0che 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.
^Asolito è "seleziona tutto",^Cè "copia",^Vè "incolla". Questo ti dà un'idea?