โดยใช้วิธี 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) : นี่คือ 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:
มีรูปแบบ SCPP อยู่ระหว่าง 0 ถึง 4 รูปแบบที่ส่วนท้ายของรายการการกดแป้นพิมพ์เนื่องจาก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 //
เป็นสัญกรณ์สำหรับการแบ่งชั้นในอนาคต
^A
มักจะ "เลือกทั้งหมด"^C
คือ "คัดลอก"^V
คือ "วาง" ที่ให้ความคิด?