न्यूनतम Centrosymmetrization


11

सामयिक रूप से संबंधित।

उद्देश्य: सकारात्मक पूर्णांक एक मैट्रिक्स को देखते हुए , सबसे छोटे सेंट्रोसिमेट्रिक मैट्रिक्स को आउटपुट करें जिसमें एम शामिल है (इस मैट्रिक्स में गैर-सकारात्मक पूर्णांक भी हो सकते हैं)।MM

सेंट्रोमीटरमेट्रिक मैट्रिक्स एक वर्गाकार मैट्रिक्स है जो क्रम 2 के घूर्णी समरूपता के साथ होता है - अर्थात यह दो बार घूमने के बाद एक ही मैट्रिक्स रहता है। उदाहरण के लिए, एक सेंट्रोसिमेट्रिक मैट्रिक्स में ऊपर-बाएँ तत्व नीचे-दाएँ के समान होता है, और केंद्र के ऊपर का तत्व केंद्र के नीचे के समान होता है। एक उपयोगी दृश्य यहां पाया जा सकता है

अधिक औपचारिक रूप से, एक मैट्रिक्स दी , एक वर्ग मैट्रिक्स का उत्पादन एन ऐसी है कि एन है Centrosymmetric और एम एन , और कोई अन्य वर्ग मैट्रिक्स है कश्मीर ऐसी है कि मंद कश्मीर < मंद एनMNNMNKdimK<dimN

के एक सबसेट है बी (संकेतन: एक बी ) यदि और केवल यदि प्रत्येक मान एक मैं , जे सूचकांक में प्रकट होता है बी मैं + मैं ' , जे + j ' पूर्णांक में से कुछ जोड़ी के लिए ( मैं ' , जे ' )ABABAi,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]]

Centrosymmetric matrices को चौकोर क्यों करना पड़ता है?
एड हॉक गार्फ हंटर

@ एक सामान्य अर्थ में, मुझे नहीं लगता कि यह होना चाहिए। इस प्रश्न के लिए, हालांकि, उन्हें परिभाषा के अनुसार वर्ग होना चाहिए
कॉनर ओ'ब्रायन

मैं सोच रहा था कि आपने वह चुनाव क्यों किया
एड हॉक गार्फ हंटर

2
@ यह एक सरलीकरण था जिसे मैंने स्पष्टता के लिए उपयोगी माना
कॉनर ओ'ब्रायन

जवाबों:


8

ब्रेकीलॉग , 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, जो कि एक आंतरिक प्रोल चर नाम है)। इसलिए तकनीकी रूप से यह उससे भी बेहतर है जो पूछा जाता है, लेकिन मुझे लगता है कि यह वह नहीं है जो चुनौती मांगता है।


काश मैंने लेबलिंग में देरी की होती ...
एरिक आउट द आउटफ्लर

@ErictheOutgolfer इंस्टेंट लेबलिंग तब भी उपयोगी है जब हमें चीजों की गणना करने की आवश्यकता होती है, इसलिए आदर्श रूप से हमें दो अलग-अलग विधेयकों की आवश्यकता होगी ...
घातक।

4

जावास्क्रिप्ट (ईएस 6), 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

  • w+1
  • (एक्स,Y)

    उदाहरण:

w=2,(एक्स,Y)=(0,1),=(4,5,41,2,3)=(0,0,04,5,41,2,3)
  • हम परीक्षण करते हैं कि क्या हम मैट्रिक्स को पूरा कर सकते हैं जैसे कि यह सेंट्रोसिमेट्रिक है।

    उदाहरण:

'=(3,2,14,5,41,2,3)
  • w


1

पायथन 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 बाइट, जोनाथन फ्रेच को धन्यवाद

n=[W*[0]for _ in r(W)]हो सकता है n=eval(`[W*[0]]*W`)
जोनाथन फ्रीच

@JonathanFrech धन्यवाद :)
TFeld

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.