Используя решение 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 идеальным шаблоном является выбор, копирование, вставка, вставка, вставка и повторение.Это умножит количество As на 4 каждые 5 нажатий клавиш.Если этот шаблон 5 нажатий клавиш не может использовать оставшиеся нажатия клавиш сам по себе, некоторое количество из 4 шаблонов нажатий клавиш (SCPP) использует последние нажатия клавиш, заменяя SCPPP (или удаляя одну из вставок) по мере необходимости.4 шаблона нажатия клавиш умножают общее количество на 3 каждые 4 нажатия клавиш.
Используя этот шаблон, приведем некоторый код Python, который получает те же результаты, что и решение marcog, но имеет значение O (1) edit :Это фактически O (log n) из-за возведения в степень, спасибо IVlad за указание на это.
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: Общее количество шаблонов увеличивается на 1 всякий раз, когда n % 5 == 0
, поскольку оказывается, что это число увеличивается точно до n / 5
.Используя деление по полу, мы можем получить общее количество шаблонов, общее число для e4
- это общее количество шаблонов минус e3
.Для тех, кто не знаком с Python, //
- это ориентированная на будущее запись для разделения пола.