Anda harus menulis program atau fungsi yang menerima string yang menggambarkan lantai sebagai input dan output atau mengembalikan area meta-tiling paling sederhana yang dapat membuat pola lantai yang diberikan.
Lantai adalah bagian dari kotak persegi. Setiap ubin persegi berwarna biru atau hitam (diwakili oleh a
dan b
dalam input).
Lantai contoh:
aaaa
ababab
aaaaa
Ubin meta
- dibangun dari
N
olehM
persegi panjang meta-genteng kotak biru dan hitam - meta-tile yang digunakan identik dengan terjemahan (Anda tidak dapat memutar atau mencerminkannya)
- jika sisi-sisi dari dua ubin meta terhubung, mereka harus terhubung sepanjang panjangnya (yaitu ubin meta ubin ruang dengan cara seperti kotak)
Contoh meta-tile:
ba
aa
dan meta-tiling yang dibuat olehnya:
.
.
.
babababa
aaaaaaaa
... babababa ...
aaaaaaaa
babababa
aaaaaaaa
.
.
.
Ubin meta ini menciptakan lantai yang ditampilkan di atas seperti yang ditunjukkan oleh huruf kiri:
.
.
.
********
***aaaa*
... *ababab* ...
*aaaaa**
********
********
.
.
.
Ubin meta lebih sederhana daripada yang lain jika luas meta-ubinnya lebih kecil. Contoh kami memiliki area 2*2 = 4
yang terkecil yang mungkin untuk lantai contoh. Jadi hasilnya harus sebagai 4
contoh.
Memasukkan
- String yang terdiri dari karakter
a b space
dannewline
mengandung setidaknya satua
ataub
. - Huruf-huruf (
ab
) membentuk satu bentuk yang terhubung 4 (terhubung berdampingan). - Tidak akan ada ruang yang tidak perlu di bagian depan baris yaitu akan ada setidaknya satu baris dimulai dengan
a
ataub
. Anda dapat memilih dua format input:
- Tidak ada spasi kosong di akhir baris (seperti yang terlihat pada contoh).
- Spasi di sisi kanan baris untuk membuat semua baris sama panjang dengan baris terpanjang.
Mengejar baris baru adalah opsional.
Keluaran
- Integer tunggal, area meta-tile terkecil yang mungkin yang ubinnya berisi lantai input.
Contohnya
Contoh dibatasi oleh tanda hubung. Tiga bagian dari contoh adalah input, output dan salah satu dari meta-tile terkecil yang mungkin.
a
1
a
-----------------
aaaa
aaa
a
1
a
-----------------
aabaab
abaa
aaba
6
aab
aba
-----------------
aabaab
a a a
aabab
18
aabaab
aaaaaa
aababa
-----------------
ba
aaab
8
baaa
aaab
-----------------
aaaa
ababb
aaaa
10
aaaaa
ababb
-----------------
a aa
ab ba
aba
6
aa
ab
ba
-----------------
aaaa
abab
aaaa
4
aa
ab
-----------------
ba
ba
b
4
ba
ab
-----------------
baa
aba
aab
9
baa
aba
aab
-----------------
aaaa
aabaa
aaaa
6
aaa
aab
Ini adalah kode golf sehingga entri terpendek menang.
Jawaban:
C - 208 byte
Kode Setara sebelum bermain golf:
Algoritma ini cukup kasar, sehingga harus cukup jelas cara kerjanya berdasarkan kode. Berikut ini beberapa komentar:
q
. Keluar dengan suatureturn
saat ubin meta dapat menutupi lantai. Perhatikan bahwa loop tidak memerlukan kondisi keluar lain karena selalu ada solusi (kasus terburuk adalah ukuran input).if
menyebutkan kombinasi lebar / tinggi meta-tile yang valid untuk ukuranq
.u
adalah indeks dalam ubin meta yang sesuai dengan ubin lantai.a
ataub
dan berbeda (jumlaha = 97
danb = 98
adalah195
), ada ketidakcocokan, dan ukuran meta-ubin dengan dimensi yang dicoba tidak akan berfungsi.a
ataub
, warna ubin disalin ke kandidat ubin meta.Kode uji yang digunakan:
Keluaran:
sumber