Polystrips เป็นส่วนย่อยของ polyominoes ที่สอดคล้องกับกฎต่อไปนี้:
- แต่ละชิ้นประกอบด้วยเซลล์อย่างน้อย 1 เซลล์
- ไม่มีเซลล์ใดสามารถมีมากกว่าสองเพื่อนบ้าน
- เซลล์ไม่ควรปิดรู
โพลีโม่โนอิสระจะแตกต่างกันเมื่อไม่มีการเปลี่ยนแปลงอย่างเข้มงวด (การแปล, การหมุน, การสะท้อนหรือการสะท้อนแบบร่อน) ของอีกชิ้นหนึ่ง (ชิ้นที่สามารถหยิบขึ้นมาและพลิกได้) การแปลการหมุนการสะท้อนหรือการร่อนสะท้อนให้เห็นถึงโพลีโนมิโนฟรีนั้นไม่ทำให้รูปร่างของมันเปลี่ยนไป ( Wikipedia )
ตัวอย่างเช่นมี heptastrips ฟรี 30 (polystrips ที่มีความยาว 7) นี่คือทั้งหมดของพวกเขาบรรจุในตาราง 14x15
เป้าหมาย
เขียนโปรแกรม / ฟังก์ชั่นที่รับจำนวนเต็มบวกn
เป็นอินพุตและแจกแจงn
-polystrips อิสระที่แตกต่างกัน
n = 1 -> 1 (สี่เหลี่ยมจัตุรัสเดียว)
n = 2 -> 1 (มีเพียง 2 โพลสต็อกที่เป็นไปได้ที่ทำจาก 2 สแควร์ส)
n = 3 -> 2 (อันที่หนึ่งประกอบด้วย 3 กำลังสองรวมกันในหนึ่งบรรทัดและอีกอันหนึ่งเป็นรูปตัว L)
n = 4 -> 3 (หนึ่งเส้นตรงหนึ่งรูปตัว L และรูปตัว Z หนึ่งรูป)
. . .
กรณีทดสอบ:
n polystrips
1 1
2 1
3 2
4 3
5 7
6 13
7 30
8 64
9 150
10 338
11 794
12 1836
13 4313
14 10067
15 23621
เกณฑ์การให้คะแนน
นี่คือรหัสกอล์ฟดังนั้นรหัสที่สั้นกว่าดีกว่า ฉันขอขอบคุณคำอธิบายรายละเอียดของอัลกอริทึมและรหัสอย่างละเอียด
การใช้การอ้างอิงบางส่วนในJ
ฉันตัดสินใจที่จะอธิบายแต่ละชิ้นในรูปแบบ "เวกเตอร์" และฉันต้องการเพียงแค่บล็อก n-2 เพื่ออธิบายชิ้นส่วนของ n-polystrip (มีเพียง 1 2-polystrip และมันกลับมาอย่างชัดเจน) บล็อกอธิบายทิศทางที่เกี่ยวข้อง: 0 - ไม่มีการเปลี่ยนแปลง 1 - เลี้ยวซ้าย 2 - เลี้ยวขวา ไม่สำคัญว่าทิศทางใดที่จะเริ่มต้น แต่เพียงเพื่อระบุว่าจะวางเซลล์ถัดไปที่ใด สามารถมีจำนวน 0 ใด ๆ ที่ต่อเนื่องกันได้ แต่ 1s และ 2s จะเป็นแบบเดี่ยวเสมอ การใช้งานนี้เป็นบางส่วนเนื่องจากไม่ได้คำนึงถึงรู - โซลูชันสำหรับ n> 6 นับชิ้นด้วยรู
101010
ในรูปตัวอย่างของคุณ)?