किसी दिए गए आकार के सभी वर्ग उप-मेट्रिक्स उत्पन्न करें


14

आपको पूर्णांक M का एक वर्ग मैट्रिक्स और दूसरा सकारात्मक पूर्णांक n दिया जाएगा , M के आकार से कड़ाई से छोटा । आपका कार्य आकार n के M के सभी वर्ग उप-मैट्रिक्स उत्पन्न करना है ।

इस चुनौती के प्रयोजनों के लिए, एक वर्ग उप-मैट्रिक्स समीप की पंक्तियों और स्तंभों का एक समूह है जो एम में निहित है ।

इनपुट / आउटपुट प्रारूप

आप किसी भी अन्य उचित प्रारूप को चुनने के लिए स्वतंत्र हैं, ये केवल कुछ उदाहरण हैं।

इनपुट

  • मूल मैट्रिक्स प्रकार में एक मैट्रिक्स (यदि आपकी भाषा में एक है)
  • एक 2D सरणी (1D सरणियों का एक सरणी, प्रत्येक पंक्ति / एक कॉलम के अनुरूप)
  • 1D सरणी (चूंकि मैट्रिक्स हमेशा चौकोर होता है)
  • एक स्ट्रिंग (आपने रिक्ति को चुना, लेकिन कृपया इसे किसी भी तरह से दुरुपयोग न करें), आदि।

उत्पादन

  • मैट्रिक्स का एक मैट्रिक्स।
  • एक 4 डी सरणी, जहां प्रत्येक तत्व (3 डी सूची) एक पंक्ति / स्तंभ पर उप-मेट्रिसेस का प्रतिनिधित्व करता है।
  • एक 3 डी सरणी, जहां प्रत्येक तत्व (2 डी सूची) एक उप-मैट्रिक्स का प्रतिनिधित्व करता है।
  • परिणामस्वरूप उप-मेट्रिसेस आदि का एक स्ट्रिंग प्रतिनिधित्व।

ऐनक

  • आप इनपुट के रूप में M का आकार भी चुन सकते हैं । यह कम से कम 2 होने की गारंटी है ।
  • आउटपुट का ओरिएंटेशन मनमाना है: आप उप-मैट्रिसेस को कॉलम की सूची या पंक्तियों की सूची के रूप में आउटपुट करने के लिए चुन सकते हैं, लेकिन आपकी पसंद सुसंगत होनी चाहिए।
  • आप किसी भी प्रोग्रामिंग भाषा में प्रतिस्पर्धा कर सकते हैं और इनपुट ले सकते हैं और किसी भी मानक विधि के माध्यम से आउटपुट प्रदान कर सकते हैं , जबकि ध्यान दें कि इन खामियों को डिफ़ॉल्ट रूप से मना किया गया है।
  • यह , इसलिए हर भाषा के लिए सबसे कम सबमिशन (बाइट्स में) जीतता है।

उदाहरण

दिए गए n = 3 और M :

 1 2 3 4
 ५ ६ 7 7
 ९ १० ११ १२
१३ १४ १५ १६

संभावित 3x3 उपमाएँ हैं:

+ ------- + + -------- + 1 2 3 4 1 2 3 4
| 1 2 3 | 4 1 | २ ३ ४ | + -------- + + -------- +
| ५ ६ | | 8 5 | ६ 6 8 | | ५ ६ 7 | | ५ | ६ 6 8 |
| ९ १० ११ | १२ ९ | १० ११ १२ | | ९ १० ११ | १२ ९ | १० ११ १२ |
+ ------- + + -------- + | १३ १४ १५ | १६ १३ | १४ १५ १६ |
13 14 15 16 13 14 15 16 + -------- + + -------- +

तो परिणाम होगा:

[[[1, 2, 3], [5, 6, 7], [9, 10, 11]], [[2, 3, 4], [6, 7, 8], [10, 11, 12]], [[5, 6, 7], [9, 10, 11], [13, 14, 15]], [[6, 7, 8], [10, 11, 12], [14, 15, 16]]]

जैसा कि ऊपर उल्लेख किया गया है, का एक आउटपुट:

[[[1, 5, 9], [2, 6, 10], [3, 7, 11]], [[2, 6, 10], [3, 7, 11], [4, 8, 12]], [[5, 9, 13], [6, 10, 14], [7, 11, 15]], [[6, 10, 14], [7, 11, 15], [8, 12, 16]]]

इसके अलावा, यदि आप पंक्तियों की सूची के रूप में उप-मेट्रिसेस को वापस करना चुनते हैं, तो यह स्वीकार्य होगा।

परीक्षण के मामलों

इनपुट्स एम, एन :

[[1,2,3],[5,6,7],[9,10,11]], 1
[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], 3
[[100,-3,4,6],[12,11,14,8],[0,0,9,3],[34,289,-18,3]], 2
[[100,-3,4,6],[12,11,14,8],[9,10,11,12],[13,14,15,16]], 3

और संबंधित आउटपुट (पंक्तियों की सूची के रूप में दिए गए उप-मैट्रीस):

[[[1]],[[2]],[[3]],[[5]],[[6]],[[7]],[[9]],[[10]],[[11]]]
[[[1,2,3],[5,6,7],[9,10,11]],[[2,3,4],[6,7,8],[10,11,12]],[[5,6,7],[9,10,11],[13,14,15]],[[6,7,8],[10,11,12],[14,15,16]]]
[[[100,-3],[12,11]],[[-3,4],[11,14]],[[4,6],[14,8]],[[12,11],[0,0]],[[11,14],[0,9]],[[14,8],[9,3]],[[0,0],[34,289]],[[0,9],[289,-18]],[[9,3],[-18,3]]]
[[[100,-3,4],[12,11,14],[9,10,11]],[[-3,4,6],[11,14,8],[10,11,12]],[[12,11,14],[9,10,11],[13,14,15]],[[11,14,8],[10,11,12],[14,15,16]]]

या, स्तंभों की सूची के रूप में:

[[[1]],[[2]],[[3]],[[5]],[[6]],[[7]],[[9]],[[10]],[[11]]]
[[[1,5,9],[2,6,10],[3,7,11]],[[2,6,10],[3,7,11],[4,8,12]],[[5,9,13],[6,10,14],[7,11,15]],[[6,10,14],[7,11,15],[8,12,16]]]
[[[100,12],[-3,11]],[[-3,11],[4,14]],[[4,14],[6,8]],[[12,0],[11,0]],[[11,0],[14,9]],[[14,9],[8,3]],[[0,34],[0,289]],[[0,289],[9,-18]],[[9,-18],[3,3]]]
[[[100,12,9],[-3,11,10],[4,14,11]],[[-3,11,10],[4,14,11],[6,8,12]],[[12,9,13],[11,10,14],[14,11,15]],[[11,10,14],[14,11,15],[8,12,16]]]]

सैंडबॉक्स पोस्ट (अब हटाए गए केवल 2k प्रतिष्ठा वाले उपयोगकर्ता इसे देख सकते हैं)। सभी को धन्यवाद जिन्होंने प्रतिक्रिया दी है।
श्री एक्सकोडर

तो क्या इस आउटपुट प्रारूप की अनुमति है?
लुइस मेंडो

@LuisMendo हाँ, इसकी अनुमति है।
मिस्टर एक्सकोडर

जवाबों:



5

MATL , 4 बाइट्स

thYC

इनपुट्स nतो हैं M

आउटपुट एक मैट्रिक्स है, जहां प्रत्येक कॉलम में सबमेट्रिक्स के सभी कॉलम होते हैं।

इसे ऑनलाइन आज़माएं!

व्याख्या

thY    % Address the compiler with a formal, slightly old-fashioned determiner
C      % Convert input to ouput

अधिक गंभीरता से, tइनपुट n को अनुमानित रूप से लेता है और इसे स्टैक पर डुप्लिकेट करता है। nh की दोनों प्रतियों को समाहित करता है , जिससे सरणी [n, n] का निर्माण होता है । इनपुट M को स्पष्ट रूप से लेता है , इसके सभी [n, n] -size ब्लॉकों को निकालता है , और उन्हें स्तंभ-प्रमुख क्रम में कॉलम के रूप में व्यवस्थित करता है। इसका मतलब यह है कि प्रत्येक ब्लॉक के कॉलम को एक कॉलम बनाने के लिए लंबवत रूप से स्टैक किया गया है।YC


1
LOL +1 "औपचारिक, थोड़े पुराने जमाने के सर्वनाम" के लिए, और एक बहुत अच्छा गोल्फ।
ग्यूसेप

@Giuseppe मैंने अभी महसूस किया कि यह एक दृढ़ संकल्प है, सर्वनाम नहीं है: - /
लुइस मेंडो

खैर, मैंने हमेशा "तेरा / तेरा" सीखा है, जिसके पास सर्वनाम हैं; यह मेरी पहली बार एक निर्धारक की सुनवाई है!
ग्यूसेप

@Giuseppe "Thy / your" के पास निपुण निर्धारक हैं, अर्थात, वे एक नाम के साथ जाते हैं: "यह आपकी कार है"। "पतला / तुम्हारा" के पास सर्वनाम हैं, अर्थात नाम छोड़ा गया है: "यह तुम्हारा है"। और मैंने शुरू में एक व्यक्तिगत सर्वनाम के साथ "तेरा" भ्रमित किया, जो वास्तव में "तू" होगा। मैंने क्या गड़बड़ की है :-)
लुइस मेंडो

4

एपीएल (Dyalog यूनिकोड) , 26 बाइट्स SBCS

अनाम infix lambda लेफ्ट तर्क के रूप में n और M सही तर्क के रूप में।

{s↓(-s2⍴⌈¯1+⍺÷2)↓⊢⌺⍺ ⍺⊢⍵}

इसे ऑनलाइन आज़माएं!

{} अनाम लंबोदर जहां बाएं तर्क है और सही तर्क है:

⊢⍵ सही तर्क उपज ( अलग ⍺ ⍺से )

⊢⌺⍺ ⍺ सभी -by- किनारों ओवरलैपिंग उन सहित submatrices (उन शून्य से गद्देदार कर रहे हैं)

()↓ पहले दो आयामों के साथ निम्नलिखित संख्या तत्वों को छोड़ें:

  ⍺÷2 का आधा

  ¯1+ नकारात्मक एक प्लस

   बढ़ाना

  2⍴दो तत्वों की सूची के लिए  चक्रीय रूप से r eshape

  s←s( s hards के लिए)  स्टोर करें

  - निगेट (यानी पीछे से ड्रॉप)

s↓sतत्वों को पहले और दूसरे आयाम के साथ छोड़ें (सामने से)


4

एपीएल (डायलॉग यूनिकोड) , 31 बाइट्स

{(12 1 3 4⍉⊖)⍣(4×⌊⍺÷2)⊢⌺⍺ ⍺⊢⍵}

इसे ऑनलाइन आज़माएं!

Adám की तुलना में एक अलग दृष्टिकोण।


क्या आप एक स्पष्टीकरण प्रदान करने का इरादा रखते हैं (आपके पास कोर्स की गोल्फिंग समाप्त होने के बाद)? मुझे यह देखने में दिलचस्पी होगी कि यह कैसे काम करता है (और मैं एपीएल को बिल्कुल भी नहीं जानता) :)
एमिग्ना

@Eigna हाँ, अगर मेरे पास तब तक समय है।
आउटगोल्फ

बहुत चालाक। यदि आप गैर-तुच्छ मामलों के लिए सफलतापूर्वक डेडिक का उपयोग कर सकते हैं, तो आपके पास वास्तव में सरणी प्रोग्रामिंग में महारत हासिल है।
अड्म

@ Adám उह, हालांकि मुझे लगता है कि यह उत्तर वास्तव में अमान्य है :-( EDIT: फिक्स्ड, लेकिन अब यह 31 बाइट्स लंबा है ...
एर्गेल आउटफोलर

मेरे प्रस्तुत से परीक्षण सूट की नकल करने के लिए स्वतंत्र महसूस करें।
Adám

3

आर , 75 बाइट्स

function(M,N,S,W=1:N,g=N:S-N)for(i in g)for(j in g)print(M[i+W,j+W,drop=F])

इसे ऑनलाइन आज़माएं!

मैट्रिक्स का आकार लेता है M, Nऔर लेता है S

परिणामी मैट्रेस को स्टडआउट करने के लिए प्रिंट करता है; यदि अनुक्रमण विशेषता को छोड़ता है और पैदावार नहीं करता है drop=Fतो N=1मामले में इसकी आवश्यकता है ।dimmatrixvector


3

जे , 11 8 बाइट्स

-3 बाइट मील के लिए धन्यवाद

<;._3~,~

इसे ऑनलाइन आज़माएं!


1
यह 8 बाइट्स <;._3~,~का उपयोग करता है और आकार को अपने साथ जोड़ने के बजाय एक हुक का उपयोग करता है, फिर प्रत्येक मैट्रिक्स के मैट्रिक्स के आउटपुट के बाद से कट और बक्से होते हैं।
मील

@ मीलों धन्यवाद, यह अब सुंदर है!
गैलेन इवानोव


2

जेली , 5 बाइट्स

Z⁹Ƥ⁺€

4D आउटपुट स्वरूप का उपयोग करता है। 3 डी के लिए, 6 बाइट्स के लिए एपेंड करें ।

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

Z⁹Ƥ⁺€  Main link. Left argument: M (matrix). Right argument: n (integer)

 ⁹Ƥ    Apply the link to the left to all infixes of length n.
Z        Zip the rows of the infix, transposing rows and columns.
   ⁺€  Map Z⁹Ƥ over all results.

मैंने चैट में user202729 के समान कुछ सुझाया। एक वैकल्पिक 5-बायटर है ṡ€Zṡ€
श्री एक्सकोडर

2

ब्रेकीलॉग , 13 बाइट्स

{tN&s₎\;Ns₎}ᶠ

इसे ऑनलाइन आज़माएं!

यह कॉलम की सूची देता है।

तकनीकी रूप से, tN&s₎\;Ns₎एक उत्पादक विधेय है जो अपने उत्पादन को उन सबमेट्रिसेस के साथ एकीकृत करता है। हम {…}ᶠसभी संभावनाओं को उजागर करने के लिए ही उपयोग करते हैं ।

व्याख्या

 tN&              Call the second argument of the input N
{          }ᶠ     Find all:
    s₎              A substring of the matrix of size N
      \             Transpose that substring
       ;Ns₎         A substring of that transposed substring of size N

1

स्टैक्स , 10 बाइट्स

│Æ☼♂Mqß E╖

चलाओ

उसी कार्यक्रम का एससीआई प्रतिनिधित्व है

YBFMyBF|PMmJ

यह इस तरह काम करता है।

Y               Store the number in the y register
 B              Batch the grid into y rows each
  F             Foreach batch, run the rest of the program
   M            Transpose about the diagonal
    yB          Batch the transposed slices into y rows each
      F         Foreach batch, run the rest of the progoram
       |P       Print a blank line
         M      Transpose inner slice - restoring its original orientation
          mJ    For each row in the inner grid, output joined by spaces

1

जावास्क्रिप्ट (ईएस 6), 91 बाइट्स

करी सिंटैक्स में इनपुट लेता है (a)(n)। पंक्तियों की सूची के रूप में परिणाम लौटाता है।

a=>n=>(g=x=>a[y+n-1]?[a.slice(y,y+n).map(r=>r.slice(x,x+n)),...g(a[x+n]?x+1:!++y)]:[])(y=0)

परीक्षण के मामलों


1

एपीएल (डायलॉग क्लासिक) , 24 23 बाइट्स

t∘↑¨(¯1-t←-2⍴⎕)↓,⍀⍪\⍪¨⎕

इसे ऑनलाइन आज़माएं!

परिणाम मेट्रिक्स का एक मैट्रिक्स है, हालांकि Dyalog का आउटपुट स्वरूपण बहुत स्पष्ट नहीं है

मैट्रिक्स ( ) इनपुट करें , प्रत्येक तत्व को अपने स्वयं के नेस्टेड मैट्रिक्स में बदल दें ( ⍪¨), पंक्ति ( ,\) और कॉलम ( ⍪⍀), इनपुट एन ( ), इनपुट के पहले उपसर्ग समरूपता लें और नेस्टेड मैट्रिसेस के पहले n-1 पंक्तियों और कॉलमों को छोड़ दें। (¯1-t←-2⍴⎕)↓), प्रत्येक मैट्रिक्स से नीचे दाईं ओर n-by-n कोने लें ( t∘↑¨)

                                        ┌─┬──┬───┐
                                        aababc      ┼──┼───┤        ┼──┼───┤
 n=2       ┌─┬─┬─┐      ┌─┬──┬───┐      ├─┼──┼───┤      ababc        ab bc
┌───┐      abc      aabbac      aababc      dedef        de ef
abc  ⍪¨  ├─┼─┼─┤  ,\  ├─┼──┼───┤  ⍪⍀  ddedef 1 1 ┼──┼───┤¯2 ¯2∘↑¨┼──┼───┤
def ---> def ---> ddeedf ---> ├─┼──┼───┤ ---> ababc  --->       
ghi      ├─┼─┼─┤      ├─┼──┼───┤      aababc      dedef        de ef
└───┘      ghi      gghhgi      ddedef      ghghi        gh hi
           └─┴─┴─┘      └─┴──┴───┘      gghghi      ┴──┴───┘        ┴──┴───┘
                                        └─┴──┴───┘

0

रूबी , 63 बाइट्स

->c,g{n=c.size-g+1
(0...n*n).map{|i|c[i/n,g].map{|z|z[i%n,g]}}}

इसे ऑनलाइन आज़माएं!

यह एक लैम्बडा है जो एक 2 डी सरणी और एक इंट ले रहा है, एक 3 डी ऐरे को वापस कर रहा है।

Ungolfed:

->m,n{
  a = m.size - n + 1     # The count of rows in m that can be a first row in a submatrix
  (0...a*a).map{ |b|     # There will be a*a submatrices
    m[b/a,n].map{ |r|    # Take each possible set of n rows
      r[b%a,n]           # And each possible set of n columns
    }
  }
}

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