Ketika siswa pertama kali diajarkan tentang teknik bukti induksi matematika , contoh umum adalah masalah ubin 2 N × 2 N kotak dengan tromino berbentuk L , meninggalkan satu ruang kotak yang telah ditentukan kosong. (N adalah bilangan bulat nonnegatif.)
Saya akan menyerahkannya kepada Anda untuk memeriksa buktinya jika Anda belum mengetahuinya. Ada banyak sumber yang membahasnya.
Tugas Anda di sini adalah untuk menulis program yang mengambil nilai untuk N, serta koordinat ruang kisi untuk dibiarkan kosong, dan mencetak representasi ASCII dari kisi tromino yang dihasilkan.
Karakter O
akan mengisi ruang kosong, dan 4 rotasi tromino kita akan terlihat seperti ini:
|
+-
|
-+
-+
|
+-
|
(Ya, bisa jadi ambigu mana yang +
sesuai dengan yang mana -
dan |
untuk pengaturan tertentu, tapi tidak apa-apa.)
Program Anda harus bekerja untuk N = 0 (untuk grid 1 × 1) hingga setidaknya N = 8 (untuk grid 256 × 256). Ini akan diberikan nilai x dan y yang merupakan koordinat untuk O
:
- x adalah sumbu horizontal. x = 1 adalah tepi grid kiri, x = 2 N adalah tepi grid kanan.
- y adalah sumbu vertikal. y = 1 adalah tepi grid atas, y = 2 N adalah tepi grid bawah.
Baik x dan y selalu dalam kisaran [1, 2 N ].
Jadi untuk N, x, dan y yang diberikan, program Anda harus mencetak kisi 2 N × 2 N , ubin sepenuhnya dengan tromino berbentuk L, kecuali untuk koordinat kisi x, y yang akan menjadiO
.
Contohnya
Jika N = 0, maka x dan y keduanya harus 1. Outputnya sederhana
O
Jika N = 1, x = 1, dan y = 2, hasilnya adalah
-+
O|
N = 2, x = 3, y = 2:
+--+
||O|
|+-|
+--+
N = 2, x = 4, y = 1:
+-|O
||+-
|+-|
+--+
N = 3, x = 3, y = 6 (mis. Gambar pada halaman ini ):
+--++--+
|+-||-+|
||+--+||
+-|-+|-+
+--+||-+
||O|-+||
|+-||-+|
+--++--+
Detail
- Anda dapat menulis fungsi yang mengambil 3 bilangan bulat alih-alih menulis seluruh program. Ini harus mencetak atau mengembalikan string grid.
- Ambil input dari stdin, baris perintah, (atau argumen fungsi jika Anda menulis fungsi).
- Output opsional dapat berisi baris pelatihan tunggal.
- Anda tidak diharuskan menggunakan metode ubin yang biasanya disarankan bukti. Hanya penting bahwa kotak diisi dengan tromino berbentuk L selain
O
. (Tromino tidak boleh dipotong atau keluar dari batas kotak.)
Kode terpendek dalam byte menang. Tiebreaker adalah posting sebelumnya. ( Penghitung byte berguna. )
if p!=i
; daftar di dalamnya.join()
tidak perlu[]
;(1-i%2)
dapat dilakukan sebagai~i%2
; Anda dapat menggunakan iterable unpacking untuk menulist,l,a=[],...
sebagai*t,l,a=...
;if n==0
dapat diperiksaif n<1
karenan
tidak bisa negatif; final"\n".join
mungkin dapat dilakukan dengan mencetak setiap elemen, karena aturan umum memungkinkan pencetakan sebagai pengganti;if p!=i
bisa jadiif p-i
karena nilai bukan nol adalah Truthy.