Korzystając z rozwiązania marcog, znalazłem wzór, który zaczyna się od n=16
. Aby to zilustrować, oto skróty klawiszowe n=24
do n=29
, zamieniłem ^ A na S (wybierz), ^ C na C (kopiowanie) i ^ V na P (wklej) dla czytelności:
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
Po początkowych 4 As, idealnym wzorcem jest zaznaczanie, kopiowanie, wklejanie, wklejanie, wklejanie i powtarzanie. Spowoduje to pomnożenie liczby As przez 4 co 5 naciśnięć klawiszy. Jeśli ten wzór 5 naciśnięć klawiszy nie może samodzielnie zużywać pozostałych naciśnięć klawiszy, pewna liczba 4 wzorców naciśnięć klawiszy (SCPP) zużywa ostatnie naciśnięcia klawiszy, zastępując SCPPP (lub usuwając jedną z past) w razie potrzeby. 4 wzorce naciśnięć klawiszy mnożą sumę przez 3 co 4 naciśnięcia.
Używając tego wzorca tutaj, jest kod Pythona, który daje takie same wyniki jak rozwiązanie marcog, ale jest to edycja O (1) : To jest w rzeczywistości O (log n) z powodu potęgowania, dzięki IVladowi za wskazanie tego.
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)
Obliczanie e3:
Na końcu listy naciśnięć klawiszy zawsze znajduje się od 0 do 4 wzorców SCPP, ponieważ n % 5 == 4
są 4, n % 5 == 1
są 3, n % 5 == 2
są 2, n % 5 == 3
jest 1 i n % 5 == 4
jest 0. Można to uprościć do (4 - n) % 5
.
Obliczanie e4:
Całkowita liczba wzorów wzrasta o 1 za każdym razem n % 5 == 0
, gdy okazuje się, że liczba ta rośnie dokładnie n / 5
. Korzystając z podziału piętra, możemy uzyskać całkowitą liczbę wzorów, łączna liczba e4
to całkowita liczba wzorów minus e3
. Dla osób niezaznajomionych z Pythonem //
jest to przyszłościowa notacja podziału pięter.
^A
jest zwykle „zaznacz wszystko”,^C
„kopiuj”,^V
„wklej”. Czy to daje ci pomysł?