ปริศนาบนสุดด้านหน้าเป็นปริศนาที่คุณจะต้องสร้างรูปร่าง 3-D ของบล็อก (ปกติลูกบาศก์) ที่กำหนดมุมมองสามมุมฉาก: มุมมองด้านบนมุมมองด้านหน้าและมุมมองด้านข้าง
ตัวอย่างเช่นกำหนดมุมมองด้านบนด้านหน้าและด้านข้างดังนี้:
Top: Front: Side:
. . . . . . . . . . . .
. x x . . x x . . x x .
. x x . . x x . . x x .
. . . . . . . . . . . .
In this problem, the side view is taken from the right.
ก้อน 2x2x2 (ที่มีเล่ม 8) จะทำให้โซลูชันนี้พอใจ แต่มันสามารถทำได้ในเล่มที่ 4 ถ้าเรามีโครงสร้างเลเยอร์ต่อไปนี้:
. . . . . . . .
. x . . . . x .
. . x . . x . .
. . . . . . . .
นอกจากนี้ยังมีข้อตกลงที่แก้ไม่ได้บางอย่าง ยกตัวอย่างเช่น
Top: Front: Side:
. . . . . . . . . . . .
. . . . . . x . . . . .
. x . . . . . . . x . .
. . . . . . . . . . . .
หากมุมมองด้านบนบอกว่าบล็อกนั้นเป็นวินาทีจากด้านซ้ายจะไม่มีวิธีใดที่สามารถจับคู่มุมมองด้านหน้าที่บอกว่าบล็อกนั้นต้องอยู่ในอันดับที่สามจากด้านซ้าย ดังนั้นการจัดการนี้เป็นไปไม่ได้
งานของคุณคือการสร้างโปรแกรมที่ให้ตัวต่อแบบ 4x4 ด้านหน้าตัวต่อพยายามที่จะแก้ปัญหาในจำนวนที่น้อยที่สุดของคิวบ์หรือประกาศว่าแก้ไม่ได้
โปรแกรมของคุณจะป้อนข้อมูลเป็นชุดจำนวน 48 บิตซึ่งแสดงถึงมุมมองด้านบนด้านหน้าและด้านข้าง อาจอยู่ในรูปแบบที่คุณต้องการ (สตริง 6 ไบต์, สตริงของ 0 และ 1, เลขฐานสิบหก 12 หลัก, ฯลฯ ) แต่ลำดับของบิตจะต้องแมปดังนี้:
Top: 0x00 Front: 0x10 Side: 0x20
0 1 2 3 0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7 4 5 6 7
8 9 a b 8 9 a b 8 9 a b
c d e f c d e f c d e f
กล่าวอีกนัยหนึ่งบิตจะเรียงตามลำดับจากซ้ายไปขวาเรียงจากบนลงล่างจากด้านบนจากนั้นด้านหน้าและจากนั้นดูจากด้านข้าง
จากนั้นโปรแกรมของคุณจะแสดงผลเป็นชุด 64 บิตซึ่งระบุคิวบ์ในกริด 4x4x4 ที่กรอกข้อมูลหรือระบุว่ากริดไม่สามารถแก้ไขได้
โปรแกรมของคุณจะได้คะแนนจากการใช้งานแบตเตอรี่ 1,000,000 กรณีทดสอบ
ข้อมูลการทดสอบจะถูกสร้างขึ้นโดยทำการแฮ็ค MD5 ของจำนวนเต็ม "000000" ถึง "999999" เป็นสตริงการแยก 48 บิตแรก (12 ฐานสิบหก) ของแต่ละแฮชเหล่านี้และใช้เป็นอินพุตสำหรับด้านหน้า - ปริศนาด้านข้าง ดังตัวอย่างต่อไปนี้เป็นอินพุตการทดสอบและปริศนาที่สร้าง:
Puzzle seed: 000000 hash: 670b14728ad9
Top: Front: Side:
. x x . . . . x x . . .
x x x x . x . x x . x .
. . . . . x x x x x . x
x . x x . . x . x . . x
Puzzle seed: 000001 hash: 04fc711301f3
Top: Front: Side:
. . . . . x x x . . . .
. x . . . . . x . . . x
x x x x . . . x x x x x
x x . . . . x x . . x x
Puzzle seed: 000157 hash: fe88e8f9b499
Top: Front: Side:
x x x x x x x . x . x x
x x x . x . . . . x . .
x . . . x x x x x . . x
x . . . x . . x x . . x
สองรายการแรกไม่สามารถแก้ไขได้ในขณะที่รายการสุดท้ายมีโซลูชันที่มีเลเยอร์ต่อไปนี้ด้านหน้าไปด้านหลัง:
x . . . . . . . x x x . x x x .
. . . . x . . . . . . . . . . .
x . . . . . . . . . . . x x x x
x . . . . . . . . . . . x . . x
There are a total of 16 blocks here, but it can probably be done in less.
คะแนนโปรแกรมของคุณจะถูกกำหนดโดยเกณฑ์ต่อไปนี้ตามลำดับความสำคัญจากมากไปน้อย:
- จำนวนคดีที่ได้รับการแก้ไขสูงสุด
- จำนวนบล็อกต่ำสุดที่ต้องใช้เพื่อแก้ไขกรณีเหล่านั้น
- รหัสที่สั้นที่สุดในหน่วยไบต์
คุณต้องส่งและคำนวณคะแนนด้วยตัวเองซึ่งต้องใช้โปรแกรมของคุณเพื่อให้สามารถดำเนินการผ่าน 1,000,000 กรณีทดสอบทั้งหมด