रेंज में मैट्रिक्स


18

चुनौती

एक पूर्णांक को देखते हुए n>0उत्पादन एक n+1 X n+1मैट्रिक्स से सभी पूर्णांकों युक्त 1करने के लिए 2nके रूप में परीक्षण मामलों में दिखाया गया bellow

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

n=1  

1  2  
2  2

n=2

1   2   4  
2   3   4  
4   4   4

n=5  

1   2   3   4   5   10  
2   3   4   5   6   10  
3   4   5   6   7   10   
4   5   6   7   8   10  
5   6   7   8   9   10  
10  10  10  10  10  10  

n=10  

1   2   3   4   5   6   7   8   9   10  20  
2   3   4   5   6   7   8   9   10  11  20  
3   4   5   6   7   8   9   10  11  12  20  
4   5   6   7   8   9   10  11  12  13  20  
5   6   7   8   9   10  11  12  13  14  20  
6   7   8   9   10  11  12  13  14  15  20  
7   8   9   10  11  12  13  14  15  16  20  
8   9   10  11  12  13  14  15  16  17  20  
9   10  11  12  13  14  15  16  17  18  20  
10  11  12  13  14  15  16  17  18  19  20  
20  20  20  20  20  20  20  20  20  20  20  

मुझे लगता है कि पैटर्न बहुत आसान है, तो चलिए देखते हैं कि बाइट्स में सबसे छोटा जवाब कौन देगा।
यह

नियम

इनपुट पूर्णांक होना चाहिए ( 1-अनुक्रमित )

आउटपुट एक मैट्रिक्स हो सकता है (जैसा कि परीक्षण मामलों में दिखाया गया है) या सूचियों की सूची

जवाबों:


10

आर , 53 बाइट्स

function(n)rbind(cbind(outer(1:n,1:n,`+`)-1,2*n),2*n)

का उपयोग करता है outerरेंज के सभी रकम उत्पन्न करने के लिए "उत्पाद" 1,...,nएक मैट्रिक्स, घटाता के रूप में 1, प्रत्येक से तो bindहै 2*nसही पर एक कॉलम और तल पर एक पंक्ति के रूप में, जरूरत के रूप में रीसाइक्लिंग, और रिटर्न परिणाम के रूप में एक मैट्रिक्स।

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

आर , 78 बाइट्स

अधिक भोली कार्यान्वयन।

function(n){m=matrix(2*n,n+1,n+1)
for(i in seq(n))m[1:n,i]=(0:(2*n))[1:n+i]
m}

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


+1 अच्छा, मैं बाहरी के बारे में सोच रहा था, लेकिन वहाँ नहीं मिला
— मिकी

7

गणितज्ञ, ६१ ४६ बाइट्स

ArrayFlatten@{{##-1&~Array~{#,#},2#},{2#,2#}}&

thanx @alephalpha -15 बाइट्स के लिए


ArrayFlatten@{{Array[+##-1&,{#,#}],2#},{2#,2#}}&
— alephalpha

+##-1&बस हो सकता है ##-1&और आप infix का उपयोग कर सकते हैं Array:ArrayFlatten@{{##-1&~Array~{#,#},2#},{2#,2#}}&
— ngenisis




4

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

+þḶ;€Ḥ;ḤzḤG

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


सिर्फ बाइट के लिए बाइट पोस्ट करने के बारे में था, Gजो आवश्यकताओं के लिए बहुत ही शानदार है
— जोनाथन एलन

बाहरी उत्पाद का अच्छा उपयोग
— Zacharý

@JonathanAllan एक अन्य समाधान का उपयोग करता है ;€ḤZ;€Ḥ...
— लीक नून

... और अभी तक एक और है Ḷ;Ḥ©µ+þ‘«®, पी
— जोनाथन एलन

1
@ +€Ḷ;Ḥṁ€;€Ḥ
— जोनाथनअल्लन


4

जावा 8, 99 बाइट्स

से लैम्ब्डा Integerके लिए int[][](उदाहरण के लिए Function<Integer, int[][]>)। आश्चर्यजनक रूप से गोल्फ के लिए प्रतिरोधी।

n->{int p=n+1,o[][]=new int[p][p],i=0,r,c;while(i<p*p)o[r=i/p][c=i++%p]=r<n&c<n?r-~c:2*n;return o;}

यह ऑनलाइन की कोशिश करो

अघोषित लंबोदर

n -> {
    int
        p = n + 1,
        o[][] = new int[p][p],
        i = 0,
        r, c
    ;
    while (i < p * p)
        o[r = i / p][c = i++ % p] =
            r < n & c < n ?
                r - ~c
                : 2 * n
        ;
    return o;
}

स्वीकृतियाँ

  • केविन क्रूज़सेन के लिए धन्यवाद

आप एक बाइट को गोल्फ में शुरू i=0और डालकर कर सकते ++हैं [c=i++%p]।
— केविन क्रूज़सेन

3

पायथन 2 , 64 62 61 बाइट्स

-3 बाइट्स मिस्टर एक्सकोडर की बदौलत।

lambda n:[range(i+1,i-~n)+[n*2]for i in range(n)]+[[n*2]*-~n]

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

मैं शायद एक महत्वपूर्ण पैटर्न याद कर रहा हूँ।

पायथन 2 , 76 बाइट्स

lambda n:[[[n*2,i-~j][n-i and n-j>0]for j in range(n+1)]for i in range(n+1)]

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


1
हमेशा की तरह, *(n+1)है *-~n।
— मिस्टर एक्सकोडर


यदि आप पायथन 3 संस्करण को भी अपनाना चाहते हैं, तो सबसे कम मैं 64 बाइट्स प्राप्त कर सकता हूं
— श्री एक्सकोडर

76 बाइट्स संस्करण को 72 बाइट्स
— Halvard Wil



2

आर , 54 63 67 बाइट्स

function(n)cbind(rbind(sapply(1:n-1,'+',1:n),2*n),2*n)

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

सैप्ली और 9 बाइट्स के लिए पॉइंटर के लिए @Guiseppe का धन्यवाद


वास्तव में, इस दृष्टिकोण में भी सुधार किया जा सकता है: sapply(1:n-1,'+',1:n)लेकिन फिर यह एक मात्र 1 बाइट का उपयोग करने से अधिक है outer(उद्धरण स्पष्ट रूप से बैकटिक्स हैं)
— Giuseppe

1
\` backticks @Giuseppe द्वारा सीमांकित ब्लॉक कोड में बैकटिक्स से बचने के लिए कार्य करता है
— Cyoce


2

रिकर्सिवा , 50 बाइट्स

  • केवल 10 बाइट्स अजगर से छोटी होती हैं और इस तरह यह आधिकारिक है, रिकर्सिवा गोल्फिंग-लैंग्वेज बिल्कुल भी नहीं है ... हालांकि यह एक इसोलंग है। : डी
|{Ba+++++'PJ"	"W+Z~}B+~}'Va'+}'Va'AD'VaJ"	"W*;aADa

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



1

रोड़ा , 44 बाइट्स

f n{seq 1,n|[[seq(_,_1+n-1)]+2*n];[[2*n]*n]}

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

स्पष्टीकरण:

f n{seq 1,n|[[seq(_,_1+n-1)]+2*n];[[2*n]*n]}
f n{                                       } /* Function f(n)         */
    seq 1,n                                  /* Sequence 1..n         */
           |                                 /* For each _1:          */
              seq(_,_1+n-1)                  /*   Sequence _1.._1+n-1 */
             [             ]                 /*   As list             */
                            +2*n             /*   Append 2*n          */
            [                   ]            /*   Push to the stream  */
                                   [2*n]     /* List [2*n]            */
                                        *n   /* Multiplied by n       */
                                  [       ]  /* Push to the stream    */


1

> <>, 84 + 2 बाइट्स

+2 -v ध्वज के लिए

मूल्यों के बीच टैब के साथ प्रिंट, और पंक्तियों के बीच नई रूपरेखा। अंतिम पंक्ति पर एक अनुगामी टैब प्रिंट करता है।

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

1:r:&r&)?\0:r:&r&(?\~$:@2*nao1+!
a0./:r:0~<.17+1o9\ \$:@$:@+n9o1+
   \&r&)?;$:@2*n /

पूर्व गोल्फ

1>:r:&r&)?\0>    :r:&r&(?\~$:@2*nao1+\
            \+1o9n+@:$@:$/
 \                                   /
          \~0>:r:&r&)?;$:@2*n9o1+\
             \                   /





0

Clojure, 153 135 बाइट्स

सूचियों की सूची? याय, लिस्प

(fn[n](loop[r[] i 0 d (* 2 n)](if(= i n)(conj r(conj(repeat n d)d))(recur(conj r(conj(vec(map #(+ i %)(range 1(inc n))))d))(inc i)d))))

Ungolfed:

(defn a[n]
  (loop [r[] i 0 d (* 2 n)]
    (if(= i n)
      (conj r(conj(repeat n d)d))
      (recur
        (conj r
            (conj (vec (map #(+ i %)(range 1(inc n)))) d))
        (inc i)
        d))))

अनाम फ़ंक्शन जो इनपुट को तर्क के रूप में लेता है और सूचियों की एक सूची देता है।

N = 5 का आउटपुट:

[[1 2 3 4 5 10] [2 3 4 5 6 10] [3 4 5 6 7 10] [4 5 6 7 8 10] [5 6 7 8 9 10] (10 10 10 10 10 10)]

0

05AB1E , 17 बाइट्स

FLN+I·¸«ˆ}·¸I>.׈

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

व्याख्या

F                   # for N in [0 ... input-1]
 L                  # push range [1 ... input]
  N+                # add N to each
    I·¸«            # append input*2
        ˆ           # add to global list
         }          # end loop
          ·¸        # push [input*2]
            I>.×    # repeat it input+1 times
                ˆ   # add to global list
                    # implicitly output global list

0

जे, 29 बाइट्स

(}:@(][\1+i.@+:),]#+:),.>:#+:

ungolfed

(}:@(] [\ 1+i.@+:) , ]#+:) ,. >:#+:

व्याख्या

(}:@(] [\ 1+i.@+:)                   NB. make the inner part of the matrix
          1+i.@+:                      NB. 1..2*n, where n is the input
    (] [\ 1+i.@+:)                     NB. fork: infixes (sliding window) of length n, over 1..2*n
(}:@                                   NB. remove last element
                   , ]#+:)           NB. add a row of 2*n to the end
                           ,. >:#+:  NB. add a column of 2*n to entire result above

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


हे, मेरे एपीएल जवाब और आपके जवाब में एक ही बाइट गिनती है! क्या आप कृपया स्पष्टीकरण जोड़ सकते हैं?
— 2

@ Zacharý, अपडेट किया गया। fwiw, यह संभवतः अपने जैसे किसी व्यक्ति द्वारा कम से कम थोड़ा और आगे बढ़ाया जा सकता है , और शायद J विशेषज्ञ द्वारा अतिरिक्त 10+ बाइट्स द्वारा।
— जोनाह

0

दरअसल , 23 बाइट्स

;;Rnkp@;r♀+@;τ;(♀q)@α@q

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

स्पष्टीकरण:

;;Rnkp@;r♀+@;τ;(♀q)@α@q
;;                       two copies of input
  R                      range(1, input+1)
   n                     copy input times
    kp@                  push stack to list, remove first element
       ;r                push range(input)
         ♀+              pairwise addition (add the value in the range to each value in the corresponding list)
           @;            duplicate input again
             τ;          input*2, duplicate that
               (♀q)      append input*2 to each list
                   @α@q  append a row of input*2

0

क्लोजर v1.8, 97 बाइट्स

#(conj(mapv(fn[i](conj(vec(range i(+ % i)))(* 2 %)))(range 1(inc %)))(vec(repeat(inc %)(* 2 %))))

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

व्याख्या

(range 1(inc %))                           Numbers from 1 to 'n'
(mapv ... (range 1(inc %)))                For each one of these numbers
(fn[i](conj(vec(range i(+ % i)))(* 2 %)))  Create the numbers from 'i' to (n+i-1), convert to vector and insert '2*n' to the vector
#(conj ... (vec(repeat(inc %)(* 2 %))))    Insert to the previous vector a vector of repeated '2*n's

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