Collapsing Matrices


18

संबंधित: आइए डिजिट मोज़ेक डिज़ाइन करें , प्रिंट करें / आउटपुट करें L-phabetयहां सैंडबॉक्स पोस्ट

2 इनपुट दिए जाने के बाद C = columns and rows, S = starting pointएक मैट्रिक्स का उत्पादन होता है:

Input 4, 3

1   2   3   0
2   2   3   0
3   3   3   0
0   0   0   0

व्याख्या

दिया हुआ C = 4, S = 3

1) एक C x Cमैट्रिक्स से भरा बनाएँ0

         4 columns
4     _____|____
     |          |
r  --0  0   0   0
o |  0  0   0   0
w |  0  0   0   0
s  --0  0   0   0

2) Sपंक्ति और स्तंभ के भीतर मान भरें S, फिर 1 को घटाएं Sऔर तब तक दोहराएं S = 0। ये मामलाS = 3

             Column 3 
S = 3           |
                v
        0   0   3   0
        0   0   3   0
Row 3-->3   3   3   0
        0   0   0   0


         Column 2
S = 2       |
            v
        0   2   3   0
Row 2-->2   2   3   0
        3   3   3   0
        0   0   0   0


     Column 1
S=1     |
        v
Row 1-->1   2   3   0
        2   2   3   0
        3   3   3   0
        0   0   0   0



Final Result

1   2   3   0
2   2   3   0
3   3   3   0
0   0   0   0

नियम

  • मान लीजिये C >= S >= 0
  • आउटपुट एक मैट्रिक्स, सूचियों की सूची, सरणी (1-आयामी या 2-आयामी) आदि हो सकता है।
  • आप किसी भी डिफ़ॉल्ट I / O प्रारूप के माध्यम से इनपुट ले सकते हैं
  • आपका प्रोग्राम, फंक्शन आदि ... 1-इंडेक्सिंग या 0-इंडेक्सिंग हो सकता है। कृपया बताएं कि कौन सा है।

नोट स्पष्टीकरण 1-अनुक्रमण है


मानदंड जीतना

जवाबों:


6

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

»>⁴¬×»µþ

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

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

जेली का बाहरी उत्पाद परमाणु ( þ)

आप जेली के बाहरी उत्पाद परमाणु के बारे में सोच सकते हैं þ, एक त्वरित (ऑपरेटर) के रूप में, जो पूर्णांक तर्क और वाई (इस मामले में एक्स = वाई = पहला तर्क  ) दिया गया है, टुपल्स के निम्नलिखित मैट्रिक्स का उत्पादन करता है:एक्सYएक्स=Y=पहला तर्क 

[(1,1)(2,1)(3,1)(एक्स,1)(1,2)(2,2)(3,2)(एक्स,2)(1,Y)(2,Y)(3,Y)(एक्स,Y)]

यह सभी जोड़ों से ठीक पहले लिंक भी लागू करता है, चलो इसे कॉल करें , जो एक फ़ंक्शन की तरह व्यवहार करता है जो दो तर्क लेता है, कुछ इस तरह का उत्पादन करता है:

[(1,1)(2,1)(3,1)(एक्स,1)(1,2)(2,2)(3,2)(एक्स,2)(1,Y)(2,Y)(3,Y)(एक्स,Y)]

यह कार्य हाथ में कैसे प्रासंगिक है?

देख कि उम्मीद उत्पादन में हर मूल्य सिर्फ अधिक से अधिक सूचकांकों की एक मेज, या है से यह काम करता है अगर यह अधिकतम हमारे दूसरा तर्क से अधिक है। इसलिए, हम इस मैपिंग को करने के लिए निम्न लिंक बना सकते हैं:0

»>⁴¬×» – Dyadic (2-argument) link.
»      – Maximum of the X, Y coordinates.
 >⁴    – Check if this exceeds the second argument of the program.
   ¬   – Negate this boolean.
    ×» – And multiply by the maximum, computed again.

6

आर , 47 41 बाइट्स

function(C,S,m=outer(1:C,1:C,pmax))m*!m>S

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

1 अनुक्रमित। S==C(शून्य नहीं) के लिए आउटपुट उत्पन्न करता है फिर शून्य कोशिकाओं >Sका उपयोग करता है, जिसमें मैट्रिक्स गुणन का उपयोग करके मूल्य होता है (धन्यवाद 4 बाइट्स के लिए Giuseppe!)।


साफ! गुणन आपको कुछ अच्छा लाभ मिलेगा: 43 बाइट्स
Giuseppe

@Giuseppe tx! मैं दो और बचाने में सक्षम था :)
JayCe


5

हास्केल , 47 45 बाइट्स

आउटपुट प्रारूप को एक-आयामी सूची में बदलकर -2 बाइट्स।

c&s|x<-[1..c]=[sum[j|j<=s]|j<-x>>=(<$>x).max]

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

व्याख्या

यह शब्द x >>= (<$> x) . maxएक गोल्फ संस्करण है

concat [ max i <$> x | i <- x ]

जो मूल्यांकन करता है [1,2,3,4..c, 2,2,3,4..c, 3,3,3,4..c, ..., c,c,c,c..c]। अब हमें केवल उन मूल्यों को बाध्य करने की आवश्यकता है, जिनसे 0वे अधिक sप्राप्त करते हैं sum [ j | j <= s]



3

क्या कुछ ऐसा करने की o×⎕≥o←∘.⌈⍨⍳अनुमति दी जाएगी, या आपको इसे गिनने के लिए किसी फ़ंक्शन को असाइन करना होगा?
ज़ाचरी

@ Zacharý मेरा अनुमान है कि किसी को एक तर्क या एक dfns के साथ एक ट्रेडफ़न के अंदर रखना होगा
Uriel

3

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

करी सिंटैक्स में इनपुट लेता है (c)(s), जहां s 1-अनुक्रमित है। 1-आयामी सरणी देता है।

c=>s=>[...Array(c*c)].map((_,k)=>(k=k%c>k/c?k%c:k/c)<s?-~k:0)

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


3

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

⁴Ri»µþ

पूर्ण कार्यक्रम * पूर्णांक ले रहा है Cऔर Sजो पूर्णांक की सूचियों की सूची के रूप में परिभाषित (1-अनुक्रमित) के जेली प्रतिनिधित्व को प्रिंट करता है।

इसे ऑनलाइन आज़माएं! (आसान पढ़ने के लिए संख्याओं के ग्रिड के रूप में रंग का परिणाम स्वरूप)

कैसे?

⁴Ri»µþ - Main Link: C, S
     þ - outer product with:
    µ  -   the monadic function (i.e. f(x,y) for x in [1..C] for y in [1..C]):
   »   -     maximum (of x and y)
⁴      -     program's 4th argument = 2nd input = S
 R     -     range = [1,2,3,...S]
  i    -     first index of (the maximum) in (the range) or 0 if not found
       - as a full program: implicit print

* कारण यह एक पूर्ण कार्यक्रम है प्रोग्राम तर्क पहुंच के उपयोग के लिए नीचे है ,। एक डायडिक लिंक के रूप में यह कोड इस बात पर निर्भर करेगा कि जो प्रोग्राम इसका उपयोग कर रहा है उसे कैसे कहा जाता है।
8 बाइट्स में पुन: प्रयोज्य डायैडिक लिंक (बाईं ओर S को दाईं ओर ले जाना): 8 बाइट्स में पुन : प्रयोज्य डायैडिक लिंक (दाईं ओर C और बाईं ओर C) लेना:RiⱮⱮ»þ`}
RiⱮⱮ⁹»þ¤


2

जावा 10, 88 बाइट्स

C->S->{var r=new int[C][C];for(;S>0;)for(int s=S--;s-->0;)r[S][s]=r[s][S]=S+1;return r;}

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

स्पष्टीकरण:

C->S->{                     // Method with two int parameters and int-matrix return-type
  var r=new int[C][C];      //  Result-matrix of size `C` by `C`
  for(;S>0;)                //  Loop as long as `S` is not 0 yet:
    for(int s=S--;s-->0;)   //   Inner loop `s` in the range (`S`, 0]
                            //   (and decrease `S` by 1 in the process with `S--`)
      r[S][s]=r[s][S]=S+1;  //    Set the values at both {`S`,`s`} and {`s`,`S`} to `S+1`
  return r;}                //  Return the result

2

PHP , 92 बाइट्स

यह "1-इंडेक्सिंग" है।

<?list(,$c,$s)=$argv;for(;$i++<$c;print"\n")for($j=0;$j++<$c;)echo$s<$i||$s<$j?0:max($i,$j);

इसे चलाने के लिए:

php -n <filename> <c> <s>

उदाहरण:

php -n collapsing_matrice.php 8 6

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


2

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

▓╜.→,cΘ○╤æ

इसे चलाएं और डीबग करें

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

R(Xm]i*xit+J Full program, implicit input.
R            1-based range of S
 (           Right-pad with zeroes to length C
  X          Save to X register
   m         Map (same as here):
    ]          Wrap in list
     i*        repeat by iteration index
       xit     Remove first  elements from X register
          +    Append
           J   Stringify each element, and join by space


2

एक्सेल VBA, 65 बाइट्स

एक तत्काल विंडो फ़ंक्शन जो इनपुट [A1:B1]और आउटपुट को रेंज से लेता है [C1].Resize([A1],[A1])

[C1].Resize([A1],[A1])=0:For s=-[B1]To-1:[C1].Resize(-s,-s)=-s:Next

इनपुट आउटपुट

इनपुट रेंज में है [A1:B1]

आई / ओ



2

MATLAB, 58 बाइट्स (अनाम उपयोगकर्ता के लिए धन्यवाद)

function o=f(c,s);o=zeros(c);for j=s:-1:1;o(1:j,1:j)=j;end

बस लूप चलाकर उचित संख्या के साथ मैट्रिक्स के तत्वों को भरना। शायद के साथ चालाक होना संभव हैarrayfun


आपको फ़ंक्शन को नाम देने की आवश्यकता नहीं है और आप zeros(c)कुछ बाइट्स का उपयोग कर सकते हैं । आपने इस ऑक्टेव उत्तर को भी देखा था , मुझे लगता है कि यह मतलाब में भी काम करेगा?
ბიმო

@ OM @ ऑक्टेव आप matlab में अनाम कार्यों के अंदर चर का नाम नहीं दे सकते। इसके अलावा, max()एक ही आकार की दलीलें लेनी हैं
आआआआ कहते हैं कि मोनिका

1
एक अनाम उपयोगकर्ता ने सुझाव दिया function o=f(c,s);o=zeros(c);for j=s:-1:1;o(1:s,1:s)=j;end
जोनाथन फ्रीच

@JonathanFrech ओह मेरी इतनी सरल :-( बस जरूरत हैo(1:j,1:j)=j
आआआआ कहती है मोनिका



1

चारकोल , 19 बाइट्स

Eθ⪫IEEθ⌈⟦ιλ⟧∧‹λη⊕λ 

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। 3 बाइट्स का उपयोग आउटपुट को दशमलव में बदलने और इसे अच्छी तरह से प्रारूपित करने के लिए किया जाता है। स्पष्टीकरण:

 θ                  Input `C`
E                   Map over implicit range
      θ             Input `C`
     E              Map over implicit range
          λ         Inner index
         ι          Outer index
       ⌈⟦  ⟧        Maximium
    E               Map over results
              λ     Current value
               η    Input `S`
             ‹      Less than
                 λ  Current value
                ⊕   Incremented
            ∧       Logical AND
   I                Cast to string
  ⪫                 Join with spaces
                    Implicitly print on separate lines



0

मैथेमेटिका 44 बाइट्स

Table[If[i <= s && j <= s, Max[i, j], 0], {i, c}, {j, c}]

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