นี่คือเมทริกซ์ไบนารี 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
สองตารางการฝึกอบรมไบนารีเทียบเท่าภายใต้ความสัมพันธ์~
ถ้าใครสามารถแมปบนอื่น ๆ โดยหมายเลขใด ๆ ของการสะท้อนความเห็นในแกนนอนหรือแนวตั้ง
#1 ~ #2
ภายใต้การไตร่ตรองในแกนตั้งดังนั้นเราจะต้องเก็บหนึ่งในนั้นไว้ (ไม่เป็นไร) ในทำนองเดียวกัน#3 ~ #12
, #6 ~ #9
และอื่น ๆ
เป้าหมายคือการสร้างโปรแกรมที่รับอินพุตเดี่ยวN
และพิมพ์N x N
เมทริกซ์ไบนารีจำนวนมากเท่าที่มีอยู่เช่นเมทริกซ์ทั้งหมดในเอาต์พุตจะแตกต่างกันภายใต้ความสัมพันธ์ข้างต้น
ในปลอม pseudocode มือโซลูชั่นที่ยอมรับได้จะเป็น
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])
สำหรับอินพุตN=2
หนึ่งเอาต์พุตที่ถูกต้องจะเป็น
00 00 00 01 10 01 11
00 01 11 01 01 11 11
แต่ด้วยการเลือกเมทริกซ์ที่แตกต่างจากคลาสความเท่ากันผลลัพธ์อื่นที่ถูกต้องก็คือ
00 10 11 11 11 10 01
00 00 00 10 11 10 10
ลำดับของเมทริกซ์ไม่สำคัญตัวเลือกเฉพาะจากเมทริกซ์เทียบเท่าไม่สำคัญและช่องว่างไม่สำคัญเอาท์พุทเมทริกซ์ แต่คุณชอบตราบเท่าที่มนุษย์อ่านได้
ผลลัพธ์จะต้องครบถ้วนสมบูรณ์
รหัสที่สั้นที่สุดชนะ
แก้ไข: นี่คือโพสต์กอล์ฟครั้งแรกของฉันและฉันเปลี่ยนใจในเกณฑ์การชนะ
รหัสสั้นที่สุดในภาษาที่ไม่ได้ออกแบบมาโดยเฉพาะเพื่อความกระชับ /ชนะกอล์ฟ
ฉันหวังว่ามันไม่ได้เป็นมารยาทที่ไม่ดีในการเปลี่ยนเกณฑ์การโพสต์นี้ แต่ฉันคิดว่าการทำในภาษา "ปกติ" เป็นข้อเสนอที่น่าสนใจมากขึ้น