क्या यह एक सबमेट्रिक्स है?


21

यह इस चुनौती का 2-आयामी सामान्यीकरण है

हमारे उद्देश्यों के लिए, एक मैट्रिक्स (या 2 डी सरणी) को दूसरे मैट्रिक्स बी का सबमेट्रिक्स माना जाता है , अगर को बी से कई पंक्तियों और स्तंभों को पूरी तरह से हटाकर प्राप्त किया जा सकता है । (नोट: कुछ स्रोतों की अलग / अधिक प्रतिबंधात्मक परिभाषाएँ हैं।)

यहाँ एक उदाहरण है:

A = [1 4      B = [1 2 3 4 5 6
     2 1]          6 5 4 3 2 1
                   2 1 2 1 2 1
                   9 1 8 2 7 6]

हम A प्राप्त करने के लिए B से कॉलम 2, 3, 5, 6 और पंक्तियों 2, 4 को हटा सकते हैं :

B = [1 2 3 4 5 6         [1 _ _ 4 _ _         [1 4  = A
     6 5 4 3 2 1   -->    _ _ _ _ _ _   -->    2 1]
     2 1 2 1 2 1          2 _ _ 1 _ _
     9 1 8 2 7 6]         _ _ _ _ _ _]

ध्यान दें कि एक अभी भी की एक submatrix है बी यदि सभी पंक्तियां या के सभी स्तंभों बी रखा जाता है (या वास्तव में अगर एक = बी )।

चुनौती

आपने यह अनुमान लगाया। दो गैर-खाली पूर्णांक मैट्रिक्स और बी को देखते हुए , निर्धारित करें कि क्या बी का सबमेट्रिक्स है ।

आप STDIN (या निकटतम विकल्प), कमांड-लाइन तर्क या फ़ंक्शन तर्क के माध्यम से इनपुट ले रहे हैं और STDOUT (या निकटतम विकल्प), फ़ंक्शन रिटर्न मान या फ़ंक्शन (आउट) पैरामीटर के माध्यम से परिणाम लिख सकते हैं।

इनपुट किसी भी सुविधाजनक प्रारूप में हो सकता है। मेट्रिसेस को नेस्टेड सूचियों के रूप में दिया जा सकता है, दो अलग-अलग विभाजकों का उपयोग करके तार, मैट्रिक्स के आयामों के साथ फ्लैट सूची, आदि, जब तक कि इनपुट पूर्व-संसाधित नहीं होता है। जब तक आपकी पसंद सुसंगत है तब तक आप B को पहले और A को दूसरे स्थान पर ले सकते हैं । आप मान सकते हैं कि मेट्रिसेस के तत्व सकारात्मक और कम हैं तो 256।

आउटपुट सत्य होना चाहिए अगर A , B का उपमा है और अन्यथा मिथ्या है। विशिष्ट आउटपुट मूल्य के अनुरूप नहीं है।

मानक नियम लागू होते हैं।

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

प्रत्येक परीक्षा के मामले में, एक अलग लाइन पर है A, B

सच्चाई के मामले:

[[1]], [[1]]
[[149, 221]], [[177, 149, 44, 221]]
[[1, 1, 2], [1, 2, 2]], [[1, 1, 1, 2, 2, 2], [3, 1, 3, 2, 3, 2], [1, 1, 2, 2, 2, 2]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[1, 2, 3], [4, 7, 6], [7, 8, 9], [1, 2, 3], [4, 5, 6], [7, 8, 9]]
[[228, 66], [58, 228]], [[228, 66], [58, 228]]
[[1, 2], [2, 1]], [[1, 2, 2], [2, 1, 2], [2, 2, 1]]
[[136, 196], [252, 136]], [[136, 252, 210, 196, 79, 222], [222, 79, 196, 210, 252, 136], [252, 136, 252, 136, 252, 136], [180, 136, 56, 252, 158, 222]]

झूठे मामले:

[[1]], [[2]]
[[224, 15]], [[144, 15, 12, 224]]
[[41], [150]], [[20, 41, 197, 150]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[1, 2, 3], [7, 8, 9], [4, 5, 6]]
[[1, 2, 2], [2, 1, 2], [2, 2, 1]], [[1, 2], [2, 1]]
[[1, 2, 2], [2, 1, 2]], [[1, 2], [2, 1], [2, 2]]
[[1, 2], [3, 4]], [[5, 3, 4, 5], [2, 5, 5, 1], [4, 5, 5, 3], [5, 1, 2, 5]]
[[158, 112], [211, 211]], [[158, 211, 189, 112, 73, 8], [8, 73, 112, 189, 211, 158], [211, 158, 211, 158, 211, 158], [21, 158, 199, 211, 212, 8]]

11
मुझे लगता है कि यह जेली में एक एकल चरित्र है।
आदम

@ N @ APL में भी नहीं? : P
R

@RikerW नहीं , एपीएल के पास केवल ये और ये एकल चरित्र "समाधान" हैं, जबकि जेली हमें नए एकल चरित्र
आदिमों के

जवाबों:


7

अजगर, 10 बाइट्स

}CQsyMCMyE

परीक्षण सूट

यह काफी सीधा है। सबसे पहले, हम बी को पंक्तियों की एक सूची के रूप में मानते हैं, और सभी सबसेट का उपयोग करके लेते हैं yE। फिर, उनमें से प्रत्येक मैट्रेस के साथ ट्रांसपोज़ किया जाता है CM, और सभी सबसेट उनकी पंक्तियों के साथ लिए जाते हैं yM। इन सब्लिस्ट्स के साथ सामंजस्य स्थापित करने sसे सभी संभव ट्रांसपोट किए गए सबमैट्रिस मिलते हैं। इसलिए हम ए के साथ स्थानांतरित करते हैं CQ, और जांचते हैं कि क्या यह मौजूद है }


6

डायलॉग एपीएल, 53 43 बाइट्स

(⊂A)∊⊃∘.{∧/∊2</¨⍺⍵:B[⍺;⍵]⋄⍬}/⍳¨(⍴A←⎕)/¨⍴B←⎕

B←⎕, के A←⎕लिए , Bऔर A
⍴B, के ⍴Aआयाम, Bऔर A
प्रत्येक को दोहराने, उदाहरण के लिए 2 3/¨4 5(4 4) (5 5 5)
⍳¨उन आयामों के साथ समन्वय प्रणालियों में से प्रत्येक में सभी सूचकांक
∘.{... }/संभव submatrices की तालिका, जहां प्रत्येक submatrix गुमनाम समारोह के परिणाम के रूप में परिभाषित किया गया है {... }निर्देशांक की एक जोड़ी के बीच और
∧/∊2</¨:दोनों अगर और कर रहे हैं ( ∧/∊) दोनों ( ¨) में वृद्धि ( 2</), तो ...
B[⍺;⍵]वापसी submatrix की Bपंक्तियों के चौराहों से बनाए गए और स्तंभों
⋄⍬बाकी, एक खाली वेक्टर वापसी (कुछ है कि एक समान नहीं है करने के लिए)
(⊂A)∊⊃की जांच करता है, तो पूरे A(⊂A) किसी भी सबमेट्रिक्स का सदस्य है ( )


पुराना 53-बाइट समाधान:

{(⊂⍺)∊v∘.⌿h/¨⊂⍵⊣v h←(⍴⍺){↓⍉⍺{⍵/⍨⍺=+⌿⍵}(⍵/2)⊤⍳⍵*2}¨⍴⍵}

{... }एक अनाम इनलाइन फ़ंक्शन, जहां बाईं ओर तर्क है और दाएं तर्क
आकार है, उदाहरण के लिए 2-बाय-3 मैट्रिक्स के लिए 2 3
(⍴⍺){... }¨⍴⍵इसी आयाम-लंबाई के प्रत्येक जोड़े के लिए,
⍳⍵*2स्क्वायर के इस अनाम फ़ंक्शन इंडेक्स को लागू करें , अर्थात 2 → 1 2 3 4
(⍵/2)⊤परिवर्तित बाइनरी (बिट्स की संख्या आयाम-लंबाई चुकता है)
{⍵/⍨⍺=+⌿⍵}द्विआधारी तालिका के, कॉलम (चयन ⍵/⍨) जहां 1s (की संख्या +⌿⍵() संभावित submatrix में उस आयाम की लंबाई के बराबर है ⍺=)
↓⍉मेकअप स्तंभों की सूची में तालिका
v h←के रूप में की दुकान v(ertical मास्क) और h(क्षैतिज मास्क)
तो
h/¨⊂⍵सही तर्क मैट्रिक्स के प्रत्येक क्षैतिज मास्क लागू
v∘.⌿
(⊂⍺)∊यदि प्रत्येक लेफ्ट मास्क बड़े मैट्रिक्स चेक के क्षैतिज रूप से मास्क किए गए संस्करणों में से प्रत्येक पर लागू होता है, यदि बाएं तर्क मैट्रिक्स इसके सदस्य है


3

जेली, 12 10 बाइट्स

शुक्रिया @ डेनिस -2 बाइट्स के लिए

ZŒP
ÇÇ€;/i

लगभग @ ही आईसैक के रूप में एक ही एल्गोरिथ्म, सिवाय इसके कि हम सबसेट लेने से पहले मैट्रिक्स को स्थानांतरित करते हैं।

ZŒP      Helper link. Input: z
Z          Transpose z
ZŒP        All subsets of columns of z.

ÇÇ€;/i   Main link. Input: B, A. B is a list of rows.
Ç          Call the helper link on B. This is the subsequences of columns of A.
 ǀ        Call the helper link on each column-subsequence.
           Now we have a list of lists of submatrices of B.
   ;/      Flatten that once. The list of submatrices of B.
     i     then get the 1-based index of A in that list.
           If A is not in the list, returns 0.

इसे यहाँ आज़माएँ ।


पाइथो इंपोस्टर की तुलना में लंबा!
आदम

1
@ N @ मैंने यह नहीं कहा कि यह सबसे छोटा जेली समाधान था।
lirtosiast

1
Zशुरुआत में की तुलना में कम है Z}। आप ZŒPएक सहायक लिंक करके आगे की बाइट बचा सकते हैं ।
डेनिस

@ डेनिस ओके, जो कि पायथ से मेल खाता है। अब गोल्फ एक और बाइट दूर।
आदम

3

गणितज्ञ, 40 65 बाइट्स

!FreeQ[s[# ]&/@(s=Subsets)@#2,# ]&

स्पष्टीकरण: अन्य उत्तरों में से एक देखें - ऐसा लगता है कि वे सभी एक ही काम करते थे।


3

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

⊇z⊇z

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

मैट्रिक्स बी को इनपुट चर और मैट्रिक्स ए के माध्यम से आउटपुट चर के माध्यम से लेता है, और सफलता या विफलता के माध्यम से आउटपुट करता है। यह बहुत अधिक सिर्फ Pyth समाधान है, सिवाय इनपुट के और निहित है और इसमें कोई स्पष्ट पीढ़ी या सदस्यता की जाँच नहीं है।

        B
⊇       has a sublist
 z      which transposed
  ⊇     has a sublist
   z    which transposed
        is A.

1

हास्केल, 66 बाइट्स

import Data.List
t=transpose
s=subsequences
(.((s.t=<<).s)).elem.t

प्रयोग उदाहरण: ( (.((s.t=<<).s)).elem.t ) [[149, 221]] [[177, 149, 44, 221]]-> True

एक गैर-पॉइंटफ़्री संस्करण है

f a b = elem(transpose a) $ (subsequences.transpose=<<) $ subsequences b

                      subsequences b     -- make all subsequences of b, i.e. all 
                                         -- all combinations of rows removed
     (subsequences.transpose=<<)         -- transpose each such sub-matrix and
                                         -- remove rows again. Concatenate into a
                                         -- single list
elem(transpose a)                        -- check if the transposition of a is in
                                         -- the list

0

पायथन + न्यूमपी, 176 173 बाइट्स

from itertools import*
from numpy import*
def f(A,B):
 r,c=A.shape
 R,C=B.shape
 S=combinations
 print any([all(B[ix_(i,j)]==A)for i in S(range(R),r)for j in S(range(C),c)])
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.