Telah terbukti bahwa 13 ubin Wang persegi berikut selalu memasang pesawat secara aperiodik . Ini berarti bahwa ketika kotak disusun dalam kotak dengan semua sisi yang berdekatan dengan warna yang sama, terjemahan pola tidak akan pernah cocok dengan dirinya sendiri.
Kami akan mewakili setiap ubin secara tekstual dengan kisi 3 × 3 yang diisi dengan spasi di tengah dan sudut, dan angka 1 hingga 5 bukan warna merah, hijau, biru, kuning, abu-abu, di tepinya:
2 2 2 1 1 1 4 3 2 2 4 3 2
1 2 1 3 2 3 2 1 3 1 3 2 4 4 4 4 4 5 4 5 5 5 5 5 5 4
3 2 3 2 3 2 1 2 1 4 1 2 2
Tujuan
Tugas Anda adalah menulis sebuah program yang mengambil lebar dan tinggi dan mengeluarkan kotak ubin Wang yang valid dengan dimensi tersebut. Ubin yang valid adalah ubin di mana semua tepi ubin yang berdekatan memiliki warna (atau nomor) yang sama. Program terkecil dalam byte menang.
Input Anda harus berasal dari stdin atau argumen baris perintah dan output harus pergi ke stdout. Format input yang tepat dapat berupa sesuatu yang cukup jelas, seperti >>> wangtiler 3 2
. Lebar dan tinggi selalu bilangan bulat positif.
Contoh (lebar = 3, tinggi = 2)
Perhatikan bahwa ketika kita menata ubin tekstual, tepi tetangga membentuk pasangan digit yang diperlukan:
1 2 1
2 11 22 1
2 3 2
2 3 2
4 55 55 4
1 2 2
(Ini BUKAN format output yang tepat.)
Kami dapat mengompres ini secara horizontal dan vertikal untuk mendapatkan:
1 2 1
2 1 2 1
2 3 2
4 5 5 4
1 2 2
Format terkompresi ini adalah format output yang tepat yang harus Anda gunakan. Garis bernomor ganjil harus menyertakan spasi tambahan.
Bonus Grafis
Alih-alih memiliki output tekstual, program Anda dapat menampilkan gambar dari kotak ubin. Ubin grafis harus terdiri dari empat segitiga 45-45-90 yang tersusun dalam kotak dan menggunakan lima warna yang mudah dibedakan seperti ubin di atas. Perbatasan hitam tidak diperlukan. Ubin grafis harus berukuran setidaknya 32 × 32 piksel. Tidak ada "kompresi" yang diterapkan padanya.
Contoh gambar bonus: (kotak yang sama seperti contoh di atas)
Bonus bernilai minus 150 byte.
Catatan
- Anda harus menggunakan set 13 ubin ini.
- Ubin mungkin tidak diputar.
- Ubin dapat muncul beberapa kali (termasuk tidak ada sama sekali).
- Anda mungkin menganggap ubin yang valid dengan dimensi apa pun adalah mungkin.
sumber
Jawaban:
GolfScript, 200 karakter
Versi ASCII tanpa output grafis. Berikan masukan pada STDIN - coba di sini . Kode menggunakan pendekatan backtracking biasa dan mengisi garis ruang demi baris.
Contoh:
Bonus Grafis, skor 122, 272 karakter - 150 bonus
Kode dasar yang sama dengan formatter output yang berbeda. Output adalah gambar dalam format PPM (yaitu cukup mengarahkan output ke file
image.ppm
). Warnanya sedikit berbeda dari ubin dalam pertanyaan, tetapi dapat dibedakan dengan jelas (1-> biru, 2-> hijau, 3-> cyan, 4-> merah, 5-> magenta).Contoh 16x12:
sumber
Python (565 - 150 = 415)
Btw ... sepertinya kita tidak bisa secara naif memutuskan ubin berikutnya dengan ubin kiri dan atasnya. Ada beberapa kombinasi ubin yang cocok satu sama lain.
Solusi ini mengisi kekuatan brute kiri-> kanan, atas-> bawah melalui semua kombinasi dan backtrack yang mungkin jika ubin tidak dapat masuk.
Untuk info lebih lanjut tentang 13 ubin bukti: Satu set aperiodik dari 13 ubin Wang
Lebar dan Tinggi ditentukan oleh
W
danH
Merah, Hijau, Biru, Kuning dan Noir ditentukan oleh
R
,G
,B
,Y
danN
Keluaran. Bukan skema warna yang sebenarnya ... karena terlalu mencolok. Ini mungkin membuat beberapa pola dekorasi interior yang menarik ...:
sumber
Haskell, 208 byte
Tidak mencari, hanya matematika. Contoh run: diberikan
(8,5)
pada stdin, outputJalankan online di Ideone
sumber