พิจารณากริดสองมิติแบบสี่เหลี่ยมผืนผ้าที่แต่ละเซลล์สามารถว่างเปล่า ( .
) หรือเต็ม ( 0
)
เช่น
..00....
0000....
.00000..
000...00
..000000
000.00..
ตารางถือว่าไม่สิ้นสุดเซลล์ทั้งหมดที่อยู่นอกขอบเขตที่ปรากฎนั้นว่างเปล่า
เป้าหมายคือเพื่อปิดช่องว่างที่เต็มไปและปล่อยให้ช่องว่างว่างเปิดโดยใช้ก้อนอิฐรูปทรง 7 ก้อนที่แต่ละก้อนใช้พื้นที่ 4 เซลล์ (2 × 2) ของตาราง
นี่คืออิฐ 7 ก้อน:
บล็อก - 1 ตัวแปร
11 11
แผ่นพื้น - 2 รูปแบบ
.. 22
33 ..
บันได - 4 รูปแบบ
.4 44
5. 55
66 .6
77 7.
อิฐเหล่านี้จะต้องจัดแนวกับกริดที่เซลล์มีความกว้างเป็นสองเท่าและสูงเท่ากับเซลล์ของกริดอินพุต อิฐแต่ละก้อนสามารถครอบครองได้เพียงเซลล์เดียวของกริดที่ใหญ่กว่านี้ แต่กริดที่เล็กกว่านั้นสามารถแปลได้ (เลื่อนขึ้นลงซ้ายซ้ายขวา) ใต้กริดที่ใหญ่ขึ้นเพื่อให้ตัวเลือกเพิ่มเติมสำหรับการค้นหาที่กำบัง ไม่สามารถหมุนกริดหรืออิฐแต่ละก้อนได้
ดังนั้นวิธีหนึ่งที่จะครอบคลุม (aka แก้) ตัวอย่างข้างต้นเป็นเช่นนี้:
..11....
2211....
.47733..
447...22
..771133
227.11..
(ก้อนอิฐที่อยู่ใกล้เคียงกันยังคงสามารถทำให้เกิดความกำกวมได้
ที่ไม่ถูกต้องวิธีแก้ปัญหาสำหรับ
000000
000000
คือ
566774
556744
เพราะก้อนอิฐไม่ได้เรียงตัวกันเป็นกริดที่ใหญ่ขึ้นหรือครอบครองเพียงเซลล์เดียว
ทางออกที่ถูกต้องที่นี่คือ 3 บล็อกในแถว:
111111
111111
และอีกวิธีที่ถูกต้องเกี่ยวข้องกับ 6 แผ่น:
......
222222
333333
......
ดังนั้นทราบว่าบางส่วนกริดป้อนข้อมูลมีการแก้ปัญหาหลาย
ที่ไม่ถูกต้องวิธีแก้ปัญหาสำหรับ
00.00
00...
คือ
11.33
11...
เพราะอิฐไม่จัดแนวกับกริดที่ใหญ่ขึ้น แผ่นพื้นจะต้องเลื่อนไปทางซ้ายหรือขวาทีละแผ่น แต่แน่นอนว่าแผ่นปิดจะไม่สมบูรณ์ ตารางการป้อนข้อมูลนี้มีวิธีการแก้ปัญหาไม่มี
ท้าทาย
เขียนโปรแกรมที่ใช้ (ผ่านบรรทัด stdin / command) บล็อกสี่เหลี่ยมของข้อความของ.
's และ0
' s ที่แสดงถึงกริดที่จะครอบคลุม
หากมีวิธีการแก้ปัญหาครอบคลุมที่ถูกต้องให้พิมพ์ (ผ่าน stdout) วิธีใดวิธีหนึ่งในลักษณะเดียวกับข้างต้นแทนที่ทั้งหมด0
ของด้วยความเหมาะสม1
ผ่าน7
อิฐ
หากไม่มีวิธีแก้ปัญหาโปรแกรมของคุณไม่ควรแสดงผลอะไรเลยเพียงแค่ปิดเสียงอย่างเงียบ ๆ
หมายเหตุ
อินพุตและเอาต์พุตไม่จำเป็นต้องมีขนาดสี่เหลี่ยมผืนผ้าเหมือนกัน เอาต์พุตของคุณสามารถมีแถวและ / หรือคอลัมน์ที่ไม่เกี่ยวข้องทั้งหมด
.
(ตราบเท่าที่พวกเขาไม่ได้ทำให้การแก้ปัญหา)นอกจากนี้ยังเป็นไรที่จะตัดแต่งแถวและคอลัมน์ของทั้งหมด
.
หากไม่มีผลกับช่องว่างที่เติม เช่น222222 333333
เป็นทางออกที่ถูกต้องในการ
000000 000000
ในทางกลับกันคอลัมน์ว่างสองคอลัมน์ใน
00..00
ไม่สามารถลบออกได้เนื่องจากจะทำให้พื้นที่ว่างเต็มไปคุณอาจเลือกที่จะสมมติว่าอินพุตมีการขึ้นบรรทัดใหม่ต่อท้าย บรรทัดใหม่ของการขึ้นบรรทัดเดียวในเอาต์พุตนั้นใช้ได้เช่นกันแม้ในกรณีที่ไม่มีวิธีแก้ไข
กริดที่ว่างเปล่า (ทั้งหมด
.
) และตาราง 0 × 0 เล็กน้อยนั้นไม่ใช่กรณีที่คุณต้องกังวล แต่0
กริด1 × 1 นั้นก็เช่นเดียวกับกริดอื่น ๆ ทั้งหมดที่มีอย่างน้อยหนึ่ง0
ตาราง (คุณอาจไม่ถือว่าความกว้างหรือความสูงของกริดอินพุตเป็นเลขคู่!)แทนที่จะเป็นโปรแกรมคุณสามารถเขียนฟังก์ชั่นที่รับอินพุตเป็นอาร์กิวเมนต์สตริงและพิมพ์ผลลัพธ์ตามปกติหรือส่งกลับเป็นสตริง ค่าที่เป็นเท็จใด ๆสามารถส่งคืนได้หากไม่มีวิธีแก้ปัญหา
คุณอาจจะใช้ใด ๆ ที่แตกต่างกัน 9 ASCII พิมพ์
.
0
1
2
3
4
5
6
7
ตัวอักษรในสถานที่ของ เพียงแค่บอกว่าสิ่งที่คุณใช้ทดแทนคืออะไร! ขึ้นบรรทัดใหม่จะต้องคงอยู่เหมือนเดิม
เกณฑ์การให้คะแนน
รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ Tiebreaker เป็นโพสต์โหวตสูงสุด
ความท้าทายนี้ได้แรงบันดาลใจจากบล็อก , แผ่นพื้นและบันไดในMinecraft , ซึ่งเป็นไปตามกฎเดียวกันอธิบายไว้ที่นี่ หากคุณสนุกกับPPCGและ Minecraft คุณอาจต้องการที่จะตรวจสอบPPCG Minecraft เซิร์ฟเวอร์