Centrosymmetrization น้อยที่สุด


11

ที่เกี่ยวข้องกัน

วัตถุประสงค์:รับเมทริกซ์ของจำนวนเต็มบวกให้เอาท์พุตเมทริกซ์สมมาตรที่เล็กที่สุดซึ่งมี (เมทริกซ์นี้อาจมีจำนวนเต็มบวกที่ไม่เป็นบวก)เอ็มMM

เมทริกซ์ centrosymmetric เป็นเมทริกซ์จตุรัสที่มีสมมาตรการหมุนของคำสั่งที่ 2 นั่นคือเมทริกซ์ยังคงเหมือนเดิมหลังจากหมุนสองครั้ง ยกตัวอย่างเช่นเมทริกซ์แบบสมมาตรมีองค์ประกอบด้านบนซ้ายเหมือนกับด้านล่างขวาและองค์ประกอบด้านบนตรงกลางเหมือนกับด้านล่างตรงกลาง ภาพข้อมูลที่มีประโยชน์สามารถพบได้ที่นี่

เพิ่มเติมอย่างเป็นทางการได้รับเมทริกซ์ผลิตเมทริกซ์จัตุรัสดังกล่าวว่าเป็น centrosymmetric และและไม่มีอื่นใดอีกตารางเมทริกซ์ดังกล่าวว่าNN N M N K ติ่มซำK < dim NMNNMNKdimK<dimN

Aคือเซตย่อยของ (สัญกรณ์: ) หากแต่ละค่าปรากฏที่ดัชนีสำหรับคู่ของจำนวนเต็มบางคู่นายก)BABAi,jBi+i,j+j(i,j)

หมายเหตุ : เมทริกซ์บางตัวมีวิธีแก้ปัญหาหลายอย่าง (เช่น[[3,3],[1,2]]การแก้ไขตาม[[2,1,0],[3,3,3],[0,1,2]]หรือ[[3,3,3],[1,2,1],[3,3,3]]); คุณต้องแสดงผลลัพธ์อย่างน้อยหนึ่งในโซลูชันที่ถูกต้อง

กรณีทดสอบ

input
example output

[[1, 2, 3],
 [4, 5, 6]]
[[1, 2, 3, 0],
 [4, 5, 6, 0],
 [0, 6, 5, 4],
 [0, 3, 2, 1]]

[[9]]
[[9]]

[[9, 10]]
[[9, 10],
 [10, 9]]

[[100, 200, 300]]
[[100, 200, 300],
 [  0,   0,   0],
 [300, 200, 100]]

[[1, 2, 3],
 [4, 5, 4]]
[[1, 2, 3],
 [4, 5, 4]
 [3, 2, 1]]

[[1, 2, 3],
 [5, 6, 5],
 [3, 2, 1]]
[[1, 2, 3],
 [5, 6, 5],
 [3, 2, 1]]

[[4, 5, 4],
 [1, 2, 3]]
[[3, 2, 1],
 [4, 5, 4],
 [1, 2, 3]]

[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [1, 1, 1, 9, 9, 9, 9, 9, 9, 9],
 [1, 1, 1, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 1]]
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9],
 [1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1],
 [9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1],
 [9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]

ทำไมเมทริกซ์สมมาตรถึงต้องเป็นสี่เหลี่ยมจัตุรัส?
Ad Hoc Garf Hunter

@WW โดยทั่วไปฉันไม่คิดว่ามันจะต้องเป็น สำหรับคำถามนี้พวกเขาจะต้องเป็นสี่เหลี่ยมตามคำนิยาม
Conor O'Brien

ฉันสงสัยว่าทำไมคุณถึงเลือกได้
Ad Hoc Garf Hunter

2
@WW มันเป็นความเรียบง่ายฉันคิดว่าจะเป็นประโยชน์สำหรับความคมชัด
Conor O'Brien

คำตอบ:


8

Brachylogขนาด 12 ไบต์

ṁ↔ᵐ↔?aaᵐ.&≜∧

ลองออนไลน์!

ตรงกันข้ามกับคำตอบของ Brachylog ส่วนใหญ่สิ่งนี้ใช้อินพุตผ่านตัวแปรเอาต์พุต.และส่งผลลัพธ์ผ่านตัวแปรอินพุต?(สับสนฉันรู้)

คำอธิบาย

ṁ              We expect a square matrix
 ↔ᵐ↔?          When we reverse the rows and then the matrix, we get the initial matrix back
    ?a         Take an adfix (prefix or suffix) of that square matrix
      aᵐ       Take an adfix of each row of that adfix matrix
        .      It must be the input matrix
         &≜    Assign values to cells which are still variables (will assign 0)
           ∧   (disable implicit unification between the input and the output)

8 ไบต์ให้เมทริกซ์ที่ถูกต้องทั้งหมด

ในทางเทคนิคแล้วโปรแกรมนี้ยังใช้งานได้:

ṁ↔ᵐ↔?aaᵐ

แต่สิ่งนี้จะปล่อยให้เป็นตัวแปรของเซลล์ที่สามารถรับค่าใด ๆ ได้ (แสดงเป็น_XXXXXซึ่งเป็นชื่อตัวแปร Prolog ภายใน) ดังนั้นเทคนิคนี้ดีกว่าสิ่งที่ถาม แต่ฉันเดาว่ามันไม่ใช่สิ่งที่ท้าทายถาม


ฉันหวังว่าการติดฉลากล่าช้า ...
Erik the Outgolfer

@EriktheOutgolfer การติดฉลากแบบทันทียังคงมีประโยชน์เมื่อเราจำเป็นต้องระบุสิ่งต่าง ๆ ดังนั้นในอุดมคติเราจะต้องใช้เพรดิเคตสองแบบที่แตกต่างกัน…
Fatalize

4

JavaScript (ES6), 192 180 177 ไบต์

f=(m,v=[w=0],S=c=>v.some(c))=>S(Y=>S(X=>!m[w+1-Y]&!m[0][w+1-X]&!S(y=>S(x=>(k=(m[y-Y]||0)[x-X],g=y=>((r=a[y]=a[y]||[])[x]=r[x]||k|0)-k)(y)|g(w-y,x=w-x)),a=[])))?a:f(m,[...v,++w])

ลองออนไลน์!

ขั้นตอนวิธี

เริ่มต้นด้วย :w=0

  • เราพิจารณาตารางภาชนะเมทริกซ์ของความกว้าง 1Mw+1
  • เราพิจารณาแต่ละคู่เพื่อให้อินพุตเมทริกซ์สามารถใส่ภายในเมทริกซ์คอนเทนเนอร์ได้เมื่อมันถูกแทรกที่พิกัดเหล่านี้(X,Y)m

    ตัวอย่าง:

w=2,(X,Y)=(0,1),m=(4,5,41,2,3)M=(0,0,04,5,41,2,3)
  • เราทดสอบว่าเราสามารถทำเมทริกซ์ให้เสร็จสมบูรณ์ได้หรือไม่

    ตัวอย่าง:

M=(3,2,14,5,41,2,3)
  • เราเพิ่มจนกว่าเราจะพบเช่นการกำหนดค่าที่ถูกต้องw


1

Python 2 , 242 227 226 ไบต์

r=range
def f(m):
 w,h=len(m),len(m[0]);W=max(w,h)
 while 1:
	for x in r(1+W-w):
	 for y in r(1+W-h):
		n=n=eval(`[W*[0]]*W`);exec"for i in r(w):n[i+x][y:y+h]=m[i]\nN=n;n=[l[::-1]for l in n[::-1]]\n"*2
		if n==N:return n
	W+=1

ลองออนไลน์!


ที่บันทึกไว้:

  • -1 ไบต์ขอบคุณ Jonathan Frech

n=[W*[0]for _ in r(W)]n=eval(`[W*[0]]*W`)สามารถ
Jonathan Frech


1

Clojure 254 ไบต์

(defn e[l m](let[a map v reverse r repeat t concat c count f #(v(a v %))h(fn[x](t(a #(t %(r(- l(c(first x)))0))x)(r(- l(c m))(r l 0))))k(fn[x](a(fn[v w](a #(if(= %2 0)%1 %2)v w))x(f x)))n(k(h m))o(k(h(f m)))z #(= %(f %))](if(z n)n(if(z o)o(e(inc l)m)))))

Jinkies, Scoob

ลองออนไลน์!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.