marcogのソリューションを使用して、で始まるパターンを見つけましたn=16
。これを説明n=24
するためにn=29
、までのキーストロークを示します。読みやすくするために、^ AをS(選択)、^ CをC(コピー)、^ VをP(貼り付け)に置き換えました。
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
最初の4 Asの後、理想的なパターンは、選択、コピー、貼り付け、貼り付け、貼り付け、および繰り返しです。これにより、キーストローク5回ごとにAsの数に4が乗算されます。この5つのキーストロークパターンが残りのキーストロークを単独で消費できない場合は、4つのキーストロークパターン(SCPP)のいくつかが最後のキーストロークを消費し、必要に応じてSCPPPを置き換えます(またはペーストの1つを削除します)。4つのキーストロークパターンは、合計に4つのキーストロークごとに3を掛けたものです。
ここでこのパターンを使用すると、marcogのソリューションと同じ結果が得られるいくつかのPythonコードがありますが、O(1)です。これは、IVladが指摘してくれたことにより、べき乗により実際にはO(log n)です。
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)
E3を計算する:
ために、キーストロークのリストの末尾に0と4 SCPPパターンの間に常に存在するn % 5 == 4
4があり、n % 5 == 1
3があり、n % 5 == 2
2があり、n % 5 == 3
1が存在し、そしてn % 5 == 4
0これは、に簡略化することができるあります(4 - n) % 5
。
e4の計算:
パターンの合計数はn % 5 == 0
、この数が正確にに増えることがわかったため、いつでも1ずつ増加しますn / 5
。床の分割を使用すると、パターンの総数を取得できます。の総数は、パターンの総数e4
からを引いたものe3
です。Pythonに不慣れな方のために、//
は、フロアディビジョンの将来を保証する表記法です。
^A
は、通常「すべて選択」、^C
「コピー」、^V
「貼り付け」です。それはあなたにアイデアを与えますか?