Dengan menggunakan solusi marcog saya menemukan pola yang dimulai pada n=16
. Untuk mengilustrasikan ini, berikut adalah penekanan tombol n=24
hingga n=29
, saya mengganti ^ A dengan S (pilih), ^ C dengan C (salin), dan ^ V dengan P (tempel) agar terbaca:
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
Setelah 4 As awal, pola yang ideal adalah memilih, menyalin, menempel, menempel, menempel, dan mengulang. Ini akan mengalikan jumlah As dengan 4 setiap 5 penekanan tombol. Jika pola 5 penekanan tombol ini tidak dapat menggunakan penekanan tombol yang tersisa dengan sendirinya, beberapa pola 4 penekanan tombol (SCPP) mengkonsumsi penekanan tombol terakhir, menggantikan SCPPP (atau menghapus salah satu pasta) sebagaimana diperlukan. 4 pola penekanan tombol mengalikan total dengan 3 setiap 4 penekanan tombol.
Menggunakan pola ini di sini adalah beberapa kode Python yang mendapatkan hasil yang sama dengan solusi marcog, tetapi O (1) edit : Ini sebenarnya adalah O (log n) karena eksponen, terima kasih kepada IVlad untuk menunjukkannya.
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)
Menghitung e3:
Selalu ada antara 0 dan 4 pola SCPP di akhir daftar keystroke, karena n % 5 == 4
ada 4, n % 5 == 1
ada 3, n % 5 == 2
ada 2, n % 5 == 3
ada 1, dan n % 5 == 4
ada 0. Ini dapat disederhanakan menjadi (4 - n) % 5
.
Menghitung e4:
Jumlah pola meningkat 1 setiap kali n % 5 == 0
, ternyata jumlah ini meningkat persis n / 5
. Menggunakan pembagian lantai kita bisa mendapatkan jumlah pola, jumlah totalnyae4
adalah jumlah pola dikurangi e3
. Bagi mereka yang tidak terbiasa dengan Python, //
adalah notasi bukti masa depan untuk pembagian lantai.
^A
biasanya "pilih semua",^C
adalah "salin",^V
adalah "tempel". Apakah itu memberi Anda gambaran?