พิจารณาสตริงไบนารีของความยาวS
n
จัดทำดัชนีจาก1
เราสามารถคำนวณระยะทาง Hammingระหว่างS[1..i+1]
และS[n-i..n]
ทั้งหมดi
ในการสั่งซื้อจากไป0
n-1
ระยะห่างของ Hamming ระหว่างสองสายที่มีความยาวเท่ากันคือจำนวนตำแหน่งที่สัญลักษณ์ที่เกี่ยวข้องแตกต่างกัน ตัวอย่างเช่น,
S = 01010
จะช่วยให้
[0, 2, 0, 4, 0].
เพราะนี่คือ0
การแข่งขัน0
, 01
มี Hamming ระยะสองถึง10
, 010
การแข่งขัน010
, 0101
มี Hamming ระยะสี่1010
และในที่สุดก็01010
ตรงกับตัวเอง
เราสนใจเฉพาะผลงานที่ระยะทาง Hamming มากที่สุด 1 ดังนั้นในภารกิจนี้เราจะรายงานY
ว่าหากระยะทางของแฮมมิงอยู่ที่ระยะหนึ่งและเป็นN
อย่างอื่น ดังนั้นในตัวอย่างข้างต้นเราจะได้
[Y, N, Y, N, Y]
กำหนดf(n)
ให้เป็นหมายเลขของอาร์เรย์ที่แตกต่างกันของY
และN
s หนึ่งได้รับเมื่อ iterating เหนือทุก2^n
บิตสตริงที่แตกต่างกันไปได้ของความยาวS
n
งาน
สำหรับการเพิ่มการn
เริ่มต้นที่รหัสของคุณควรเอาท์พุท1
f(n)
ตัวอย่างคำตอบ
สำหรับn = 1..24
คำตอบที่ถูกต้องคือ:
1, 1, 2, 4, 6, 8, 14, 18, 27, 36, 52, 65, 93, 113, 150, 188, 241, 279, 377, 427, 540, 632, 768, 870
เกณฑ์การให้คะแนน
รหัสของคุณควรวนซ้ำจากการn = 1
ให้คำตอบn
ในแต่ละครั้ง ฉันจะใช้เวลาทั้งหมดในการฆ่ามันหลังจากสองนาที
คะแนนของคุณเป็นคะแนนสูงสุดที่n
คุณจะได้รับในเวลานั้น
ในกรณีที่เสมอกันคำตอบแรกจะชนะ
รหัสของฉันจะถูกทดสอบที่ไหน
ฉันจะเรียกใช้รหัสของคุณบนแล็ปท็อป Windows 7 (เก่าเล็กน้อย) ของฉันภายใต้ cygwin ดังนั้นโปรดให้ความช่วยเหลือใด ๆ ที่คุณสามารถทำได้ง่าย
แล็ปท็อปของฉันมี RAM 8GB และ Intel i7 5600U@2.6 GHz (Broadwell) CPU ที่มี 2 คอร์และ 4 เธรด ชุดการเรียนการสอนประกอบด้วย SSE4.2, AVX, AVX2, FMA3 และ TSX
รายการนำหน้าต่อภาษา
- n = 40ในRustโดยใช้ CryptoMiniSat โดย Anders Kaseorg (ใน Lubuntu guest VM ภายใต้ Vbox)
- n = 35ในC ++โดยใช้ไลบรารี BuDDy โดย Christian Seviers (ใน Lubuntu guest VM ภายใต้ Vbox)
- n = 34ในClingoโดย Anders Kaseorg (ใน Lubuntu guest VM ภายใต้ Vbox)
- n = 31 in Rustโดย Anders Kaseorg
- n = 29ในClojureโดย NikoNyrh
- n = 29ในCโดย bartavelle
- n = 27ในHaskellโดย bartavelle
- n = 24ในPari / gpโดย alephalpha
- n = 22ในPython 2 + pypyโดยฉัน
- n = 21ในMathematicaโดย alephalpha (รายงานตนเอง)
อนาคตโปรดปราน
ตอนนี้ฉันจะให้รางวัล 200 คะแนนสำหรับคำตอบใด ๆ ที่สูงถึงn = 80ในเครื่องของฉันภายในสองนาที