พิจารณาสตริงไบนารีของความยาว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และNs หนึ่งได้รับเมื่อ iterating เหนือทุก2^nบิตสตริงที่แตกต่างกันไปได้ของความยาวSn
งาน
สำหรับการเพิ่มการnเริ่มต้นที่รหัสของคุณควรเอาท์พุท1f(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ในเครื่องของฉันภายในสองนาที
