ลองนึกภาพเรามีบางpolyominoและต้องการที่จะระบุตัวตนของพวกเขา แต่ polyominos สามารถหมุนเพื่อสุ่มสี่สุ่มห้า hashing พวกเขาจะไม่ให้เราลายนิ้วมือเหมือนกันสำหรับชิ้นส่วนและการหมุนดังกล่าว (ทั่วไป)
ตัวอย่างเช่นถ้าเรามี L-tetromino
x
x
xx
เราต้องการให้มีลายนิ้วมือเหมือนกับสิ่งเหล่านี้:
xx
x x xxx
xxx , x or x
หมายเหตุ:เราอนุญาตให้มีการหมุนบนเครื่องบินได้เท่านั้น (เช่นเป็นโพลีมิโนด้านเดียว) และดังนั้นโพลีโนมิโนต่อไปนี้จะเป็นอีกอันหนึ่ง:
x
x
xx
ท้าทาย
ภารกิจสำหรับความท้าทายนี้คือการใช้ฟังก์ชั่นลายนิ้วมือ / โปรแกรมซึ่งใช้บูลีน / - เมทริกซ์ที่มีค่า / รายการของรายการ / สตริง / .. เข้ารหัสโพลีโน่และส่งกลับสตริง - ลายนิ้วมือของ polyomino ลายนิ้วมือจะต้องเท่ากันสำหรับการหมุนที่เป็นไปได้ทั้งหมด (โดยทั่วไป 4)
อินพุต / เอาต์พุต
- และ (เช่นไม่มีโพลีโน่เปล่า)
- คุณรับประกันได้ว่ามีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้ (เช่นทั้งหมดถูกตัดให้พอดีกับและ
- คุณรับประกันได้ว่าอินพุตเป็น
- เชื่อมต่อได้ง่าย
- ไม่มีหลุม
- เอาต์พุตจะต้องเป็นสตริงที่เหมือนกันสำหรับแต่ละการหมุนของโพลีโนมินที่เป็นไปได้
ตัวอย่าง
นี่คือคลาสที่เทียบเท่าสำหรับแต่ละคลาสนั้นลายนิ้วมือจะต้องเหมือนกัน & สำหรับสองโพลีโม่อสจากคลาสที่แตกต่างกันสองคลาสที่พวกเขาต้องแตกต่างกัน
การหมุนของ L-tetromino จากตัวอย่าง:
[[1,0],[1,0],[1,1]]
[[0,0,1],[1,1,1]]
[[1,1],[0,1],[0,1]]
[[1,1,1],[1,0,0]]
J-tetromino:
[[0,1],[0,1],[1,1]]
[[1,1,1],[0,0,1]]
[[1,1],[1,0],[1,0]]
[[1,0,0],[1,1,1]]
Polyomino หน่วย:
[[1]]
บาร์:
[[1,1,1,1,1]]
[[1],[1],[1],[1],[1]]
มุม :
[[1,1],[1,0]]
[[1,0],[1,1]]
[[0,1],[1,1]]
[[1,1],[0,1]]
W-Pentomino:
[[1,0,0],[1,1,0],[0,1,1]]
[[0,0,1],[0,1,1],[1,1,0]]
[[1,1,0],[0,1,1],[0,0,1]]
[[0,1,1],[1,1,0],[1,0,0]]
""
(สตริงว่าง) ฉันมีคุณสมบัติตรงตามข้อกำหนดทั้งหมดหรือไม่?