Berikut adalah semua matriks biner 2x2
#0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
00 00 00 00 01 01 01 01 10 10 10 10 11 11 11 11
00 01 10 11 00 01 10 11 00 01 10 11 00 01 10 11
Dua matriks persegi biner setara di bawah relasi ~
jika satu dapat dipetakan ke yang lain dengan sejumlah pantulan dalam sumbu horizontal atau vertikal .
#1 ~ #2
di bawah refleksi dalam sumbu vertikal sehingga kita hanya perlu menyimpan salah satunya (tidak masalah yang mana). Demikian juga #3 ~ #12
, #6 ~ #9
dan seterusnya.
TUJUANnya adalah untuk menghasilkan program yang mengambil input tunggal N
dan mencetak N x N
matriks biner sebanyak yang ada sehingga semua matriks dalam output berbeda di bawah hubungan di atas.
Dalam pseudocode gelombang tangan, solusi yang dapat diterima adalah
define M[i] = N by N matrix with bit pattern equal to i
for i = 0 to (2^(N^2)) - 1
valid = true
for j = i+1 to (2^(N^2)) - 1
if (equivalent(M[i], M[j]))
valid = false
break
if (valid)
print (M[i])
Untuk input, N=2
satu output yang valid adalah
00 00 00 01 10 01 11
00 01 11 01 01 11 11
Tetapi dengan memilih matriks yang berbeda dari kelas ekivalensi yang sama output yang valid akan menjadi
00 10 11 11 11 10 01
00 00 00 10 11 10 10
Urutan matriks tidak masalah, pilihan khusus dari matriks setara tidak masalah, dan spasi putih tidak masalah, output matriks sesuka Anda selama itu dapat dibaca oleh manusia.
Outputnya harus lengkap.
Kode terpendek menang.
EDIT: ini adalah posting golf pertama saya dan saya berubah pikiran tentang kriteria kemenangan.
Kode terpendek dalam bahasa yang tidak dirancang khusus untuk kemenangan singkat / bermain golf .
Saya harap itu bukan etiket buruk untuk mengubah kriteria ini post-hoc, tapi saya pikir melakukannya dalam bahasa "normal" adalah proposisi yang jauh lebih menarik .
Jawaban:
J,
665653 bytePencarian dengan kekerasan.
Pemakaian
Penjelasan
sumber
Jelly , 19 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Pyth -
242321 byteIngin mencari cara yang lebih baik untuk mendapatkan semua refleksi.Terima kasih kepada @ Pietu1998 karena golf saya 2 byte!
Cobalah online di sini .
Pergi menunggu untuk bermain golf sebelum melakukan penjelasan lengkap, tetapi pada dasarnya membuat semua matriks biner yang mungkin, kemudian
.g
memperbaiki mereka dengan daftar diurutkan dari semua refleksi yang mungkin, kemudian hanya mengambil satu dari masing-masing kelompok.sumber
3
, output mulai[['000', '000', '00'],
mencatat nol yang hilang di akhir.^2Q
bukanQ^2
. memperbaiki menyelamatkan saya byte juga: D_MM
bukanmC_Cd
.Haskell, 100 byte
Contoh penggunaan:
f 2
->[["00","00"],["00","01"],["00","11"],["01","01"],["01","10"],["01","11"],["11","11"]]
.Bagaimana itu bekerja:
sumber
JavaScript (ES6), 195 byte
Mengembalikan string yang mewakili semua entri matriks yang disatukan misalnya
111101111
mewakili matriks 3 × 31
s dengan a0
di tengah. Penjelasan:sumber
.map(f=(x=p++)=>x>1?f(x>>1)+x%2:"")
Mathematica, 94 byte
sumber
JavaScript (ES6), 184
Ini ternyata sangat mirip dengan Neil, tetapi semuanya trik javascript tidak begitu beragam.
Kurang golf
Uji Hati-hati, bahkan untuk input 4 waktu berjalan terlalu lama
sumber