ภารกิจคือการคำนวณOEIS A005434โดยเร็วที่สุด
พิจารณาสตริงไบนารีของความยาวS
n
จัดทำดัชนีจาก1
เราสามารถตรวจสอบว่าS[1..i+1]
ตรงกับS[n-i..n]
ตรงทั้งหมดi
ในการสั่งซื้อจากไป0
n-1
ตัวอย่างเช่น,
S = 01010
จะช่วยให้
[Y, N, Y, N, Y].
เพราะนี่คือ0
การแข่งขัน0
, 01
ไม่ตรง10
, 010
การแข่งขัน010
, 0101
ไม่ตรงกับ1010
และในที่สุดก็01010
ตรงกับตัวเอง
กำหนดf(n)
ให้เป็นหมายเลขของอาร์เรย์ที่แตกต่างกันของY
และN
s หนึ่งได้รับเมื่อ iterating เหนือทุก2^n
บิตสตริงที่แตกต่างกันไปได้ของความยาวS
n
สังเกตจะสังเกตเห็นคำถามนี้เป็นตัวแปรที่เรียบง่ายของคำถามที่ผ่านมาของฉันอีก อย่างไรก็ตามฉันคาดหวังว่าเทคนิคที่ฉลาดสามารถทำให้สิ่งนี้เร็วและง่ายขึ้น
งาน
สำหรับการเพิ่มการn
เริ่มต้นที่รหัสของคุณควรเอาท์พุท1
n, f(n)
ตัวอย่างคำตอบ
สำหรับn = 1..24
คำตอบที่ถูกต้องคือ:
1, 2, 3, 4, 6, 8, 10, 13, 17, 21, 27, 30, 37, 47, 57, 62, 75, 87, 102, 116, 135, 155, 180, 194
เกณฑ์การให้คะแนน
รหัสของคุณควรวนซ้ำจากการn = 1
ให้คำตอบn
ในแต่ละครั้ง ฉันจะใช้เวลาทั้งหมดในการฆ่ามันหลังจากสองนาที
คะแนนของคุณเป็นคะแนนสูงสุดที่n
คุณจะได้รับในเวลานั้น
ในกรณีที่เสมอกันคำตอบแรกจะชนะ
รหัสของฉันจะถูกทดสอบที่ไหน
ฉันจะเรียกใช้รหัสของคุณภายใต้ Virtualbox ในVM Lub guest guest VM (บนโฮสต์ Windows 7 ของฉัน)
แล็ปท็อปของฉันมี RAM 8GB และ Intel i7 5600U@2.6 GHz (Broadwell) CPU ที่มี 2 คอร์และ 4 เธรด ชุดการเรียนการสอนประกอบด้วย SSE4.2, AVX, AVX2, FMA3 และ TSX
รายการนำหน้าต่อภาษา
- n = 599ในRust bu Anders Kaseorg
- n = 30ในCโดย Grimy รุ่นขนานได้รับถึง32เมื่อทำงานใน cygwin