เมื่อนักเรียนได้รับการสอนครั้งแรกเกี่ยวกับเทคนิคการพิสูจน์การอุปนัยทางคณิตศาสตร์ตัวอย่างทั่วไปคือปัญหาของการเรียงตัวกันของตาราง 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
เพราะค่าที่ไม่ใช่ศูนย์เป็นความจริง