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=24lê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 == 4có 4, n % 5 == 1có 3, n % 5 == 2có 2, n % 5 == 3có 1 và n % 5 == 4có 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 e4là 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.
^Athường là "chọn tất cả",^Clà "sao chép",^Vlà "dán". Điều đó có cung cấp cho bạn một ý tưởng?