เมื่อนักเรียนได้รับการสอนครั้งแรกเกี่ยวกับเทคนิคการพิสูจน์การอุปนัยทางคณิตศาสตร์ตัวอย่างทั่วไปคือปัญหาของการเรียงตัวกันของตาราง 2 N × 2 N ที่มีรูปตัวTrominoesรูปตัว L ทิ้งไว้หนึ่งช่องว่างที่กำหนดไว้ล่วงหน้า (N เป็นจำนวนเต็มที่ไม่ใช่ค่าลบ)
ฉันจะปล่อยให้คุณข้ามไปพิสูจน์ถ้าคุณยังไม่รู้ มีทรัพยากรมากมายที่กล่าวถึง
งานของคุณที่นี่คือการเขียนโปรแกรมที่รับค่า N รวมถึงพิกัดของพื้นที่กริดเพื่อปล่อยให้ว่างเปล่าและพิมพ์การแทนค่า ASCII ของกริด tromino ที่เป็นผลลัพธ์
ตัวละครOจะเติมเต็มพื้นที่ว่างและการหมุนของ tromino ของเราทั้ง 4 จะมีลักษณะดังนี้:
|
+-
|
-+
-+
|
+-
|
(ใช่มันอาจจะไม่ชัดเจนที่+จะไปกับที่-และ|สำหรับการเตรียมการบางอย่าง แต่ที่ ok.)
โปรแกรมของคุณจะต้องทำงานกับ N = 0 (สำหรับ 1 × 1 grid) อย่างน้อย N = 8 (สำหรับ 256 × 256 grid) มันจะได้รับค่า x และ y ที่เป็นพิกัดสำหรับO:
- x คือแกนนอน x = 1 คือขอบกริดด้านซ้าย x = 2 Nคือขอบกริดด้านขวา
- y คือแกนตั้ง y = 1 คือขอบกริดด้านบน, y = 2 Nคือขอบกริดด้านล่าง
ทั้ง x และ y อยู่ในช่วง [1, 2 N ] เสมอ
ดังนั้นสำหรับรับ N, x, y และโปรแกรมของคุณจะต้องพิมพ์ 2 N × 2 Nตารางกระเบื้องสมบูรณ์ด้วย trominoes รูปตัว L ยกเว้น x, y Oตารางการประสานงานที่จะเป็น
ตัวอย่าง
ถ้า N = 0 ดังนั้น x และ y ต้องเป็น 1 ทั้งสองเอาต์พุตเป็นเพียงแค่
O
หาก N = 1, x = 1 และ y = 2 เอาต์พุตจะเป็น
-+
O|
N = 2, x = 3, y = 2:
+--+
||O|
|+-|
+--+
N = 2, x = 4, y = 1:
+-|O
||+-
|+-|
+--+
N = 3, x = 3, y = 6 (เช่นรูปภาพในหน้านี้ ):
+--++--+
|+-||-+|
||+--+||
+-|-+|-+
+--+||-+
||O|-+||
|+-||-+|
+--++--+
รายละเอียด
- คุณสามารถเขียนฟังก์ชันที่ใช้จำนวนเต็ม 3 จำนวนแทนการเขียนโปรแกรมทั้งหมด มันควรจะพิมพ์หรือส่งกลับสตริงกริด
- รับอินพุตจาก stdin, บรรทัดคำสั่ง (หรือฟังก์ชัน args หากคุณเขียนฟังก์ชัน)
- ผลลัพธ์อาจมีทางเลือกขึ้นบรรทัดใหม่ของการฝึกอบรมเดี่ยว
- คุณไม่จำเป็นต้องใช้วิธีการเรียงต่อกันที่การพิสูจน์ตามปกติแนะนำ มันเป็นเรื่องสำคัญที่ตารางที่เต็มไปด้วย trominoes รูปตัว L
Oนอกจาก (Trominoes อาจไม่ถูกตัดออกไปนอกขอบเขตกริด)
รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ Tiebreaker เป็นโพสต์ก่อนหน้า ( ตัวนับไบต์ที่มีประโยชน์ )
if p!=i; ภายในรายการ.join()ไม่จำเป็นต้อง[];(1-i%2)สามารถทำได้เช่น~i%2; คุณสามารถใช้การเปิดอ่านซ้ำเพื่อเขียนt,l,a=[],...เป็น*t,l,a=...;if n==0สามารถตรวจสอบได้if n<1เพราะnไม่สามารถลบ; สุดท้าย"\n".joinอาจจะทำได้โดยการพิมพ์แต่ละองค์ประกอบเนื่องจากกฎทั่วไปอนุญาตให้พิมพ์แทนกลับ;if p!=iอาจเป็นif p-iเพราะค่าที่ไม่ใช่ศูนย์เป็นความจริง