Durch die Verwendung von Marcogs Lösung habe ich ein Muster gefunden, das bei beginnt n=16
. Um dies zu verdeutlichen sind hier die Tastenanschläge für n=24
bis zu n=29
, ich ersetzt ^ A mit S (wählen), ^ C mit C (kopieren) und ^ V mit P (Paste) zur besseren Lesbarkeit:
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
Nach einer anfänglichen 4 As ist das ideale Muster zum Auswählen, Kopieren, Einfügen, Einfügen, Einfügen und Wiederholen. Dies multipliziert die Anzahl von As mit 4 alle 5 Tastenanschläge. Wenn dieses 5-Tasten-Muster die verbleibenden Tastenanschläge nicht alleine verbrauchen kann, verbrauchen einige 4-Tasten-Muster (SCPP) die letzten Tastenanschläge und ersetzen SCPPP (oder entfernen eine der Pasten) nach Bedarf. Die 4 Tastenanschläge multiplizieren die Summe mit 3 alle 4 Tastenanschläge.
Bei Verwendung dieses Musters handelt es sich um Python-Code, der die gleichen Ergebnisse wie die Lösung von marcog erzielt, jedoch O (1) bearbeitet : Dies ist tatsächlich O (log n) aufgrund von Potenzierung, danke an IVlad für den Hinweis.
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)
Berechnung von e3:
Am Ende der Tastenanschlagliste stehen immer zwischen 0 und 4 SCPP-Muster, denn n % 5 == 4
es gibt 4, n % 5 == 1
es gibt 3, n % 5 == 2
es gibt 2, n % 5 == 3
es gibt 1 und n % 5 == 4
es gibt 0. Dies kann vereinfacht werden (4 - n) % 5
.
Berechnung von e4:
Die Gesamtzahl der Muster erhöht sich jedes Mal um 1 n % 5 == 0
, wie sich herausstellt, erhöht sich diese Anzahl auf genau n / 5
. Mit der Bodenteilung können wir die Gesamtzahl der Muster erhalten, die Gesamtzahl für e4
ist die Gesamtzahl der Muster minus e3
. Für diejenigen, die mit Python nicht vertraut sind, //
ist die zukunftssichere Notation für die Bodenteilung.
^A
ist normalerweise "Alles auswählen",^C
"Kopieren",^V
"Einfügen". Gibt Ihnen das eine Idee?