กำหนดจำนวนล้อที่มี


23

คำอธิบายที่ไม่ใช่คณิตศาสตร์

นี่คือคำอธิบายที่ตั้งใจให้เข้าถึงได้โดยไม่คำนึงถึงพื้นหลังของคุณ น่าเสียดายที่มันเกี่ยวข้องกับคณิตศาสตร์บางอย่าง แต่ควรเข้าใจได้สำหรับคนส่วนใหญ่ที่มีระดับความเข้าใจในระดับมัธยมต้น

ลำดับชี้เป็นลำดับใด ๆ ดังกล่าวที่A (n + 1) = a (na (n))

ลองแยกสูตรนี้หน่อยเพื่อทำความเข้าใจความหมายของมัน นี่หมายถึงการหาเทอมถัดไปในลำดับที่เราดูในเทอมสุดท้ายนำขั้นตอนนั้นกลับมาและคัดลอกคำที่เราค้นหา ตัวอย่างเช่นถ้าเรามีลำดับจนถึงตอนนี้

... 3 4 4 4 3 ?

เราจะย้อนกลับไป 3 ก้าว 3

... 3 4 4 4 3 ?
      ^

4ทำให้ผลของเรา

ตอนนี้โดยปกติเราเล่นเกมนี้บนเทปที่ไม่มีที่สิ้นสุดในทั้งสองทิศทาง แต่เรายังสามารถเล่นเกมบนวงล้อซึ่งหลังจากผ่านไปหลายขั้นตอนเรากลับไปที่จุดเริ่มต้นของลำดับ

ตัวอย่างเช่นที่นี่คือการสร้างภาพของลำดับ [1,3,1,3,1,3]

ล้อ

ตอนนี้เราอาจสังเกตเห็นว่าตัวเลขใด ๆ , xในวงล้อที่เกินจำนวนเซลล์ในวงล้อ, n , อาจเท่ากับx mod nเพราะทุกวงจรที่สมบูรณ์รอบ ๆ วงล้อนั้นไม่เหมือนกับการไม่ทำอะไรเลย ดังนั้นเราจะพิจารณาเฉพาะล้อที่สมาชิกทุกคนมีขนาดเล็กกว่าล้อ

คำอธิบายทางคณิตศาสตร์

ลำดับชี้เป็นลำดับใด ๆ ดังกล่าวที่A (n + 1) = a (na (n)) โดยปกติสิ่งเหล่านี้จะถูกกำหนดจากจำนวนเต็มถึงจำนวนเต็มอย่างไรก็ตามคุณอาจสังเกตเห็นว่าสิ่งเดียวที่จำเป็นในคำจำกัดความนี้คือฟังก์ชันตัวตายตัวแทนและฟังก์ชันผกผัน เนื่องจากกลุ่มวงจรทั้งหมดมีทั้งสองอย่างนี้เราจึงสามารถพิจารณาลำดับของตัวชี้ในกลุ่มวงจรใด ๆ

หากเราเริ่มมองหาฟังก์ชั่นประเภทนี้เราจะสังเกตเห็นว่าสำหรับแต่ละฟังก์ชั่นจะมีฟังก์ชั่นที่คล้ายกันสองอย่าง ตัวอย่างเช่นในZ 3ต่อไปนี้ 3 คือฟังก์ชั่นทั้งหมดที่เหมาะสมกับความต้องการของเรา

f1 : [1,2,2]
f2 : [2,1,2]
f3 : [2,2,1]

(นี่คือรายการที่ใช้ในการแสดงฟังก์ชั่นที่จะได้รับผลเพียงดัชนีรายการโดยการป้อนข้อมูล)

เราอาจสังเกตเห็นว่าฟังก์ชั่นเหล่านี้เป็น "การหมุน" ทั้งหมดของกันและกัน จะทำพิธีว่าผมหมายถึงตามวาระการทำงานเป็นการหมุนของIFF

สมการ 1

ทีนี้ถ้าเรามีคณิตศาสตร์เข้ามาเกี่ยวข้องเราสามารถแสดงให้เห็นว่าถ้าaคือตัวชี้ลำดับทุกการหมุนของaก็เป็นลำดับตัวชี้ด้วย ดังนั้นเราจะพิจารณาลำดับใด ๆ ที่การหมุนของกันและกันให้เท่ากัน

งาน

ป.ร. ให้nเป็นผลผลิตป้อนหมายเลขลำดับของตัวชี้ที่มีขนาดn

นี่คือดังนั้นคำตอบจะได้คะแนนเป็นไบต์โดยไบต์น้อยจะดีขึ้น

Testcases

ปัจจุบันโปรแกรมทดสอบเหล่านี้ขาดไปเล็กน้อยฉันมีโปรแกรมคอมพิวเตอร์เพื่อสร้างสิ่งเหล่านี้ แต่มันช้าเกินไปที่จะทำเช่นนั้น หากใครต้องการมีส่วนร่วมในการทดสอบมากขึ้น (ซึ่งพวกเขาสามารถตรวจสอบความถูกต้อง) พวกเขามีอิสระที่จะทำเช่นนั้น ด้านล่างการทดสอบบางอย่างเป็นรายการฟังก์ชั่นทั้งหมดที่ฉันพบนี่อาจเป็นประโยชน์สำหรับการดีบัก ฉันไม่สามารถเพิ่มสิ่งเหล่านี้สำหรับตัวที่ใหญ่กว่าได้เนื่องจากข้อ จำกัด ของอักขระ

หากคุณต้องการรหัสที่ฉันใช้ในการสร้างสิ่งเหล่านี้ที่นี่เป็น

1 -> 1
[[0]]
2 -> 2
[[1,1],[0,0]]
3 -> 4
[[2,2,2],[2,2,1],[1,1,1],[0,0,0]]
4 -> 7
[[3,3,3,3],[3,3,3,2],[2,2,2,2],[3,3,3,1],[3,1,3,1],[1,1,1,1],[0,0,0,0]]
5 -> 12
[[4,4,4,4,4],[4,4,4,4,3],[3,3,3,3,3],[4,4,4,4,2],[4,3,4,4,2],[2,2,2,2,2],[4,4,4,4,1],[4,3,4,4,1],[4,4,2,4,1],[4,4,1,4,1],[1,1,1,1,1],[0,0,0,0,0]]
6 -> 35
[[5,5,5,5,5,5],[5,5,5,5,5,4],[5,5,4,5,5,4],[4,4,4,4,4,4],[5,5,5,5,5,3],[5,4,5,5,5,3],[5,5,5,3,5,3],[5,3,5,3,5,3],[3,3,3,3,3,3],[5,5,5,5,5,2],[5,4,5,5,5,2],[5,3,5,5,5,2],[5,5,4,5,5,2],[5,5,2,5,5,2],[5,5,2,5,2,2],[5,3,2,5,2,2],[5,2,2,5,2,2],[4,2,2,4,2,2],[2,2,2,2,2,2],[5,5,5,5,5,1],[5,4,5,5,5,1],[5,3,5,5,5,1],[5,5,4,5,5,1],[5,5,2,5,5,1],[5,5,1,5,5,1],[5,5,5,3,5,1],[5,3,5,3,5,1],[5,5,5,2,5,1],[5,5,5,1,5,1],[5,3,5,1,5,1],[5,1,5,1,5,1],[3,1,3,1,3,1],[2,2,1,2,2,1],[1,1,1,1,1,1],[0,0,0,0,0,0]]
7 -> 80
[[6,6,6,6,6,6,6],[6,6,6,6,6,6,5],[6,6,6,5,6,6,5],[5,5,5,5,5,5,5],[6,6,6,6,6,6,4],[6,5,6,6,6,6,4],[6,6,6,5,6,6,4],[6,6,6,6,4,6,4],[6,5,6,6,4,6,4],[6,4,6,6,6,4,4],[4,4,4,4,4,4,4],[6,6,6,6,6,6,3],[6,5,6,6,6,6,3],[6,4,6,6,6,6,3],[6,6,5,6,6,6,3],[6,6,4,6,6,6,3],[5,6,6,5,6,6,3],[6,6,6,6,4,6,3],[6,5,6,6,4,6,3],[6,6,4,6,4,6,3],[6,4,4,6,4,6,3],[6,6,6,6,3,6,3],[6,6,4,6,3,6,3],[3,3,3,3,3,3,3],[6,6,6,6,6,6,2],[6,5,6,6,6,6,2],[6,4,6,6,6,6,2],[6,3,6,6,6,6,2],[6,6,5,6,6,6,2],[6,6,4,6,6,6,2],[6,6,6,5,6,6,2],[6,4,6,5,6,6,2],[6,3,6,5,6,6,2],[6,6,6,3,6,6,2],[6,4,6,3,6,6,2],[6,3,6,3,6,6,2],[6,6,6,2,6,6,2],[6,6,2,6,6,3,2],[6,6,6,2,6,2,2],[6,6,4,2,6,2,2],[6,6,3,2,6,2,2],[2,2,2,2,2,2,2],[6,6,6,6,6,6,1],[6,5,6,6,6,6,1],[6,4,6,6,6,6,1],[6,3,6,6,6,6,1],[6,6,5,6,6,6,1],[6,6,4,6,6,6,1],[6,6,2,6,6,6,1],[6,6,6,5,6,6,1],[6,4,6,5,6,6,1],[6,3,6,5,6,6,1],[6,6,6,3,6,6,1],[6,4,6,3,6,6,1],[6,3,6,3,6,6,1],[6,6,6,2,6,6,1],[6,6,6,1,6,6,1],[6,6,6,6,4,6,1],[6,5,6,6,4,6,1],[6,3,6,6,4,6,1],[6,6,4,6,4,6,1],[6,4,4,6,4,6,1],[6,6,2,6,4,6,1],[6,6,1,6,4,6,1],[6,6,6,6,3,6,1],[6,6,4,6,3,6,1],[6,6,2,6,3,6,1],[6,6,1,6,3,6,1],[6,6,6,6,2,6,1],[6,5,6,6,2,6,1],[6,3,6,6,2,6,1],[6,6,6,6,1,6,1],[6,5,6,6,1,6,1],[6,3,6,6,1,6,1],[6,6,4,6,1,6,1],[6,6,2,6,1,6,1],[6,6,1,6,1,6,1],[3,6,1,6,6,3,1],[1,1,1,1,1,1,1],[0,0,0,0,0,0,0]]
8 -> 311
[[7,7,7,7,7,7,7,7],[7,7,7,7,7,7,7,6],[7,7,7,6,7,7,7,6],[7,7,7,7,6,7,7,6],[6,6,6,6,6,6,6,6],[7,7,7,7,7,7,7,5],[7,6,7,7,7,7,7,5],[7,7,7,6,7,7,7,5],[7,7,7,5,7,7,7,5],[7,7,7,7,6,7,7,5],[7,6,7,7,6,7,7,5],[7,7,7,7,7,5,7,5],[7,6,7,7,7,5,7,5],[7,7,7,5,7,5,7,5],[7,5,7,5,7,5,7,5],[7,5,7,7,7,7,5,5],[7,5,7,6,7,7,5,5],[7,5,7,7,7,6,5,5],[5,5,5,5,5,5,5,5],[7,7,7,7,7,7,7,4],[7,6,7,7,7,7,7,4],[7,5,7,7,7,7,7,4],[7,7,6,7,7,7,7,4],[7,7,5,7,7,7,7,4],[6,7,7,6,7,7,7,4],[5,5,7,5,7,7,7,4],[7,7,7,7,6,7,7,4],[7,6,7,7,6,7,7,4],[7,7,5,7,6,7,7,4],[7,7,7,7,4,7,7,4],[7,6,7,7,4,7,7,4],[7,7,7,7,7,5,7,4],[7,6,7,7,7,5,7,4],[7,5,7,7,7,5,7,4],[7,7,6,7,7,5,7,4],[7,7,4,7,7,5,7,4],[7,7,7,7,7,4,7,4],[7,7,6,7,7,4,7,4],[7,7,4,7,7,4,7,4],[7,4,7,7,7,7,5,4],[7,4,7,7,4,7,5,4],[4,4,4,4,4,4,4,4],[7,7,7,7,7,7,7,3],[7,6,7,7,7,7,7,3],[7,5,7,7,7,7,7,3],[7,4,7,7,7,7,7,3],[7,7,6,7,7,7,7,3],[7,7,5,7,7,7,7,3],[7,7,4,7,7,7,7,3],[7,7,7,6,7,7,7,3],[7,5,7,6,7,7,7,3],[7,4,7,6,7,7,7,3],[7,7,7,5,7,7,7,3],[7,5,7,5,7,7,7,3],[7,4,7,5,7,7,7,3],[7,7,7,3,7,7,7,3],[6,7,7,7,6,7,7,3],[6,7,7,3,6,7,7,3],[7,7,7,7,7,5,7,3],[7,6,7,7,7,5,7,3],[7,5,7,7,7,5,7,3],[7,7,6,7,7,5,7,3],[7,7,4,7,7,5,7,3],[7,7,7,5,7,5,7,3],[7,5,7,5,7,5,7,3],[7,7,5,5,7,5,7,3],[7,6,5,5,7,5,7,3],[7,4,5,5,7,5,7,3],[7,7,7,3,7,5,7,3],[7,5,7,3,7,5,7,3],[7,7,7,7,7,4,7,3],[7,7,6,7,7,4,7,3],[7,7,4,7,7,4,7,3],[7,7,7,5,7,4,7,3],[7,7,7,3,7,4,7,3],[7,7,7,7,7,3,7,3],[7,6,7,7,7,3,7,3],[7,5,7,7,7,3,7,3],[7,7,7,5,7,3,7,3],[7,5,7,5,7,3,7,3],[7,7,7,3,7,3,7,3],[7,5,7,3,7,3,7,3],[7,3,7,3,7,3,7,3],[7,3,5,7,7,7,5,3],[7,3,5,3,7,3,5,3],[5,3,5,3,5,3,5,3],[7,7,7,3,7,7,3,3],[7,5,7,3,7,7,3,3],[7,4,7,3,7,7,3,3],[7,7,4,3,7,7,3,3],[7,7,3,3,7,7,3,3],[7,7,7,3,7,6,3,3],[7,5,7,3,7,6,3,3],[7,7,4,3,7,6,3,3],[7,7,3,3,7,6,3,3],[7,6,3,3,7,6,3,3],[7,7,3,3,7,3,3,3],[7,6,3,3,7,3,3,3],[7,4,3,3,7,3,3,3],[7,3,3,3,7,3,3,3],[6,3,3,3,6,3,3,3],[5,3,3,3,5,3,3,3],[3,3,3,3,3,3,3,3],[7,7,7,7,7,7,7,2],[7,6,7,7,7,7,7,2],[7,5,7,7,7,7,7,2],[7,4,7,7,7,7,7,2],[7,3,7,7,7,7,7,2],[7,7,6,7,7,7,7,2],[7,7,5,7,7,7,7,2],[7,7,4,7,7,7,7,2],[7,7,7,6,7,7,7,2],[7,5,7,6,7,7,7,2],[7,4,7,6,7,7,7,2],[7,3,7,6,7,7,7,2],[7,7,7,5,7,7,7,2],[7,5,7,5,7,7,7,2],[7,4,7,5,7,7,7,2],[7,3,7,5,7,7,7,2],[7,7,7,3,7,7,7,2],[7,5,7,3,7,7,7,2],[7,4,7,3,7,7,7,2],[7,3,7,3,7,7,7,2],[7,7,7,2,7,7,7,2],[7,7,7,7,6,7,7,2],[7,6,7,7,6,7,7,2],[7,4,7,7,6,7,7,2],[7,3,7,7,6,7,7,2],[7,7,5,7,6,7,7,2],[7,7,4,7,6,7,7,2],[7,7,7,7,4,7,7,2],[7,6,7,7,4,7,7,2],[7,4,7,7,4,7,7,2],[7,3,7,7,4,7,7,2],[7,7,5,7,4,7,7,2],[7,7,4,7,4,7,7,2],[7,5,4,7,4,7,7,2],[7,7,7,7,3,7,7,2],[7,7,5,7,3,7,7,2],[7,7,4,7,3,7,7,2],[7,7,7,7,2,7,7,2],[7,6,7,7,2,7,7,2],[7,4,7,7,2,7,7,2],[7,3,7,7,2,7,7,2],[4,7,7,7,7,4,7,2],[4,7,6,7,7,4,7,2],[4,7,4,7,7,4,7,2],[4,7,7,5,7,4,7,2],[4,7,7,2,7,4,7,2],[3,3,7,7,7,3,7,2],[3,3,7,5,7,3,7,2],[3,3,7,7,4,3,7,2],[3,3,7,7,3,3,7,2],[3,3,7,6,3,3,7,2],[3,3,7,3,3,3,7,2],[3,3,7,2,3,3,7,2],[7,7,2,7,7,7,4,2],[7,7,2,7,4,7,4,2],[7,7,2,7,3,7,4,2],[7,7,7,2,7,7,3,2],[7,7,3,2,7,7,3,2],[7,4,7,2,4,7,3,2],[3,3,3,2,3,3,3,2],[7,7,7,7,2,7,2,2],[7,6,7,7,2,7,2,2],[7,4,7,7,2,7,2,2],[7,7,7,5,2,7,2,2],[7,4,7,5,2,7,2,2],[7,7,7,4,2,7,2,2],[7,4,7,4,2,7,2,2],[2,2,2,2,2,2,2,2],[7,7,7,7,7,7,7,1],[7,6,7,7,7,7,7,1],[7,5,7,7,7,7,7,1],[7,4,7,7,7,7,7,1],[7,3,7,7,7,7,7,1],[7,7,6,7,7,7,7,1],[7,7,5,7,7,7,7,1],[7,7,4,7,7,7,7,1],[7,7,2,7,7,7,7,1],[7,7,7,6,7,7,7,1],[7,5,7,6,7,7,7,1],[7,4,7,6,7,7,7,1],[7,3,7,6,7,7,7,1],[7,7,7,5,7,7,7,1],[7,5,7,5,7,7,7,1],[7,4,7,5,7,7,7,1],[7,3,7,5,7,7,7,1],[7,7,7,3,7,7,7,1],[7,5,7,3,7,7,7,1],[7,4,7,3,7,7,7,1],[7,3,7,3,7,7,7,1],[7,7,7,2,7,7,7,1],[7,7,7,1,7,7,7,1],[7,7,7,7,6,7,7,1],[7,6,7,7,6,7,7,1],[7,4,7,7,6,7,7,1],[7,3,7,7,6,7,7,1],[7,7,5,7,6,7,7,1],[7,7,4,7,6,7,7,1],[7,7,2,7,6,7,7,1],[7,7,7,7,4,7,7,1],[7,6,7,7,4,7,7,1],[7,4,7,7,4,7,7,1],[7,3,7,7,4,7,7,1],[7,7,5,7,4,7,7,1],[7,7,4,7,4,7,7,1],[7,5,4,7,4,7,7,1],[7,7,2,7,4,7,7,1],[7,4,7,2,4,7,7,1],[7,7,7,7,3,7,7,1],[7,7,5,7,3,7,7,1],[7,7,4,7,3,7,7,1],[7,7,2,7,3,7,7,1],[7,7,7,7,2,7,7,1],[7,6,7,7,2,7,7,1],[7,4,7,7,2,7,7,1],[7,3,7,7,2,7,7,1],[7,7,7,7,1,7,7,1],[7,6,7,7,1,7,7,1],[7,4,7,7,1,7,7,1],[7,3,7,7,1,7,7,1],[7,7,7,7,7,5,7,1],[7,6,7,7,7,5,7,1],[7,5,7,7,7,5,7,1],[7,3,7,7,7,5,7,1],[7,7,6,7,7,5,7,1],[7,7,4,7,7,5,7,1],[7,7,2,7,7,5,7,1],[7,7,1,7,7,5,7,1],[7,7,7,5,7,5,7,1],[7,5,7,5,7,5,7,1],[7,3,7,5,7,5,7,1],[7,7,5,5,7,5,7,1],[7,6,5,5,7,5,7,1],[7,4,5,5,7,5,7,1],[7,7,7,3,7,5,7,1],[7,5,7,3,7,5,7,1],[7,3,7,3,7,5,7,1],[7,7,7,2,7,5,7,1],[7,7,7,1,7,5,7,1],[7,5,7,1,7,5,7,1],[7,7,7,7,7,4,7,1],[7,7,6,7,7,4,7,1],[7,7,4,7,7,4,7,1],[7,7,2,7,7,4,7,1],[7,7,1,7,7,4,7,1],[7,7,7,5,7,4,7,1],[7,7,7,3,7,4,7,1],[7,7,7,2,7,4,7,1],[7,7,7,1,7,4,7,1],[7,7,4,7,2,4,7,1],[7,7,7,7,7,3,7,1],[7,6,7,7,7,3,7,1],[7,5,7,7,7,3,7,1],[7,3,7,7,7,3,7,1],[7,7,7,5,7,3,7,1],[7,5,7,5,7,3,7,1],[7,3,7,5,7,3,7,1],[7,7,7,3,7,3,7,1],[7,5,7,3,7,3,7,1],[7,3,7,3,7,3,7,1],[7,7,7,2,7,3,7,1],[7,7,7,1,7,3,7,1],[7,5,7,1,7,3,7,1],[7,3,7,1,7,3,7,1],[7,3,7,7,3,3,7,1],[7,3,7,6,3,3,7,1],[7,3,7,2,3,3,7,1],[7,7,7,7,7,2,7,1],[7,6,7,7,7,2,7,1],[7,5,7,7,7,2,7,1],[7,3,7,7,7,2,7,1],[7,7,6,7,7,2,7,1],[7,7,4,7,7,2,7,1],[7,7,2,7,7,2,7,1],[7,4,2,7,7,2,7,1],[7,7,1,7,7,2,7,1],[7,7,2,7,2,2,7,1],[7,5,2,7,2,2,7,1],[7,4,2,7,2,2,7,1],[7,7,7,7,7,1,7,1],[7,6,7,7,7,1,7,1],[7,5,7,7,7,1,7,1],[7,3,7,7,7,1,7,1],[7,7,6,7,7,1,7,1],[7,7,4,7,7,1,7,1],[7,7,2,7,7,1,7,1],[7,7,1,7,7,1,7,1],[7,7,7,5,7,1,7,1],[7,5,7,5,7,1,7,1],[7,3,7,5,7,1,7,1],[7,7,7,3,7,1,7,1],[7,5,7,3,7,1,7,1],[7,3,7,3,7,1,7,1],[7,7,7,2,7,1,7,1],[7,7,7,1,7,1,7,1],[7,5,7,1,7,1,7,1],[7,3,7,1,7,1,7,1],[7,1,7,1,7,1,7,1],[5,1,5,1,5,1,5,1],[4,7,1,7,7,7,4,1],[4,7,1,7,7,5,4,1],[3,7,7,1,7,7,3,1],[3,7,3,1,3,7,3,1],[3,5,7,1,7,5,3,1],[3,5,3,1,3,5,3,1],[3,3,3,1,3,3,3,1],[3,1,3,1,3,1,3,1],[1,1,1,1,1,1,1,1],[0,0,0,0,0,0,0,0]]
9 -> 1049
10 -> 4304

กรณีล่าสุดคำนวณโดย @HyperNeutrino


1
+1 สำหรับความท้าทายที่มีการจัดทำเป็นเอกสารที่ดีแม้ว่าฉันจะยังไม่เข้าใจก็ตาม
ElPedro

@ElPedro คุณยังไม่แน่ใจในเรื่องอะไร? บางทีฉันสามารถช่วยทำให้คำถามนี้ชัดเจนยิ่งขึ้น
ข้าวสาลีตัวช่วยสร้าง

คำตอบ:


7

เยลลี่ , 18 17 ไบต์

J_ịṙ1⁼
ṗṙ€RṂ€QÇ€S

ลองออนไลน์!

มันทำงานอย่างไร

ṗṙ€RṂ€QÇ€S  Main link. Argument: n

ṗ           Cartesian power; yield all vectors of n elements of [1, ..., n].
   R        Range; yield [1, ..., n].
 ṙ€         Rotate each vector 1, ..., and n units to the left.
    Ṃ€      Take the minimum of each array of rotations of the same vector.
      Q     Unique; deduplicate the resulting array.
            Since each vector is replaced by its lexicographically minimal
            rotation, no resulting vector will be a rotation of another vector.
       ǀ   Map the helper link over the remaining vectors.
            Vectors that represent pointer sequences map to 1, others to 0.
         S  Take the sum.


J_ịṙ1⁼      Helper link. Argument: v = (v1, ..., vn)

J           Indices; yield [1, ..., n].
 _          Subtract v, yielding [1 - v1, ..., n - vn].
  ị         Index into v, yielding [v(1 - v1), ..., v(n - vn)].
   ṙ1       Rotate the result one unit to the left.
     ⁼      Compare the result with v.

5

Python 2 , 162 156 152 146 143 ไบต์

lambda n:len({min(l[i:]+l[:i]for i in R(n))for l in product(*[R(n)]*n)if all(l[-~i-n]==l[i-l[i]]for i in R(n))})
from itertools import*
R=range

ลองออนไลน์!

กำลังดุร้ายมากหรือน้อย:

  • สร้างการเรียงสับเปลี่ยนทั้งหมด product(r,repeat=n)
  • ตรวจสอบรายการที่ถูกต้อง all(l[-~i-n]==l[i-l[i]]for i in r)
  • สร้างชุดการหมุนขั้นต่ำ (การทำพจนานุกรม) ของ lits ที่ถูกต้อง min(l[i:]+l[:i]for i in r)

ฟังก์ชั่นวนซ้ำที่ลัดวงจรสักเล็กน้อย:

รุ่นนี้ยาวกว่า แต่สามารถคำนวณได้f(10)ใน ~ 19 วินาทีบนtio.run

ในเครื่องของฉันฉันได้พบ:

  • f(11) = 16920
  • f(12) = 78687

Python 2 , 209 ไบต์

lambda n:len(g(n,(-1,)*n))
r=range
g=lambda n,a,j=0:set()if any(len({-1,a[-~i-n],a[i-a[i]]})>2for i in r(j))else set.union(*[g(n,a[:j]+(i,)+a[j+1:],j+1)for i in r(n)])if j<n else{min(a[i:]+a[:i]for i in r(n))}

ลองออนไลน์!

คำอธิบาย:

f=lambda n:len(g(n,(-1,)*n)) #calls the recursive function, and gets length.
#The initial circle is all -1, and is built recursively
r=range
g=lambda n,a,j=0:
#if any of the indexes so far break the pointer rule (ignored if 'empty'), stop recursion.
if any(len({-1,a[-~i-n],a[i-a[i]]})>2for i in r(j))
    return set()
else
if j<n:
    #recursively call g with a+ all numbers in range ie.(a+[0], a+[1], ..)
    return set.union(*[g(n,a[:j]+(i,)+a[j+1:],j+1)for i in r(n)])
else # if recursion depth == n, we are done. Return the smallest (lexicographically) rotation.
    return {min(a[i:]+a[:i]for i in r(n))}

การจัดทำดัชนีอาร์เรย์ของ Python แน่นอนหมายความว่าคุณสามารถวาง%n(แล้ววงเล็บสองสามอัน)?
Peter Taylor

143 ไบต์
Jonathan Frech

3

CJam, 37

ri:M_m*{:XM,Xfm<:e<=M{(_X=-X=}%X=&},,

ลองออนไลน์

แรงเดรัจฉานค่อนข้างมากและมันก็รู้สึกซุ่มซ่าม มันช้ามากหลังจาก 6 แทนที่คอมม่าสุดท้ายด้วย a pเพื่อพิมพ์ล้อ


3

Pyth, 28 ไบต์

l{mS.>LdQf!fn@ThY@T-Y@TYUQ^U

ชุดทดสอบ

อันดับแรกเราสร้างลำดับทั้งหมดของความยาวที่เหมาะสมด้วยองค์ประกอบที่เหมาะสม ประการที่สองเราตรวจสอบว่ามีความล้มเหลวของตัวชี้ใด ๆ ประการที่สามแผนที่เพื่อผลัดเรียงทั้งหมด ประการที่สี่ซ้ำซ้อนและนับ


3

Haskell , 117 112 104 ไบต์

f k|x<-[1..k]=sum[1|y@(h:t)<-mapM(x<$f)x,t++[h]==[y!!mod(n-a)k|(n,a)<-zip x y],and[y<=drop n y++y|n<-x]]

แรงเดรัจฉานค่อนข้างช้าสำหรับอินพุตขนาดใหญ่ ลองออนไลน์!

-5 ไบต์ขอบคุณ Laikoni

-5 ไบต์ขอบคุณØrjan Johansen


and[y<=drop i y++take i y|i<-x]บันทึกบางไบต์
Laikoni

@Laikoni มันก็เป็นเช่นนั้นขอบคุณ!
Zgarb

(1) เป็นหนึ่งไบต์สั้นกว่าx<$f \_->x(2) ขอขอบคุณที่เกียจคร้านจะช่วยประหยัดกว่าn`drop`cycle y 4 ไบต์ drop n y++take n y
Ørjan Johansen

@ ØrjanJohansenขอบคุณ<$เคล็ดลับดี drop n y++yกลายเป็นว่าสั้นกว่าสำหรับคำใบ้ที่สอง
Zgarb

หืมที่เกือบtailsดังนั้น 4 all(y<=)$scanr(:)y yมากขึ้นกับตัวแปรของเคล็ดลับมาตรฐาน:
Ørjan Johansen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.