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 .