Bằng cách sử dụng giải pháp của marcog, tôi đã tìm thấy một mô hình bắt đầu từ n=16
. Để minh họa điều này, đây là các tổ hợp phím n=24
lên đến n=29
, tôi đã thay thế ^ A bằng S (chọn), ^ C bằng C (sao chép) và ^ V bằng P (dán) để dễ đọc:
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
Sau 4 As ban đầu, mẫu lý tưởng là chọn, sao chép, dán, dán, dán và lặp lại. Điều này sẽ nhân số As với 4 sau mỗi 5 lần nhấn phím. Nếu 5 kiểu tổ hợp phím này không thể tự tiêu thụ các lần gõ phím còn lại thì một số trong 4 kiểu tổ hợp phím (SCPP) sẽ sử dụng các lần gõ phím cuối cùng, hãy thay thế SCPPP (hoặc xóa một trong các thao tác dán) nếu cần. 4 kiểu tổ hợp phím nhân tổng số với 3 sau mỗi 4 lần tổ chức phím.
Sử dụng mẫu này ở đây là một số mã Python nhận được kết quả giống như giải pháp của marcog, nhưng là O (1) chỉnh sửa : Đây thực sự là O (log n) do lũy thừa, cảm ơn IVlad đã chỉ ra điều đó.
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)
Tính e3:
Luôn có từ 0 đến 4 mẫu SCPP ở cuối danh sách tổ hợp phím, vì n % 5 == 4
có 4, n % 5 == 1
có 3, n % 5 == 2
có 2, n % 5 == 3
có 1 và n % 5 == 4
có 0. Điều này có thể được đơn giản hóa (4 - n) % 5
.
Tính e4:
Tổng số mẫu tăng lên 1 bất cứ khi nào n % 5 == 0
, vì hóa ra số này tăng lên chính xác n / 5
. Sử dụng phép chia tầng, chúng ta có thể nhận được tổng số mẫu, tổng số cho e4
là tổng số mẫu trừ đi e3
. Đối với những người không quen thuộc với Python, //
là ký hiệu tương lai cho phép phân chia tầng.
^A
thường là "chọn tất cả",^C
là "sao chép",^V
là "dán". Điều đó có cung cấp cho bạn một ý tưởng?