Ma trận trong phạm vi


18

Các thách thức

Cho một n>0đầu ra số nguyên một n+1 X n+1ma trận chứa tất cả các số nguyên từ 1đến 2nnhư được hiển thị trong các trường hợp thử nghiệm dưới đây

Các trường hợp thử nghiệm

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  

Tôi nghĩ rằng mô hình này khá dễ, vì vậy hãy xem ai sẽ đưa ra câu trả lời ngắn nhất bằng byte.
Đây là

Quy tắc

Đầu vào phải là số nguyên ( 1 chỉ mục )

Đầu ra có thể là một ma trận (như thể hiện trong các trường hợp thử nghiệm) hoặc một danh sách các danh sách

Câu trả lời:


10

R , 53 byte

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

Sử dụng outer"sản phẩm" để tạo ra toàn bộ số tiền của dãy núi này 1,...,nnhư một ma trận, trừ 1từ mỗi, sau đó bind2*nnhư một cột bên phải và một hàng ở phía dưới, tái chế khi cần thiết, và trả về một ma trận như kết quả.

Hãy thử trực tuyến!

R , 78 byte

Thực hiện ngây thơ hơn.

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}

Hãy thử trực tuyến!


+1 tốt đẹp, tôi đã suy nghĩ về bên ngoài nhưng không hoàn toàn đến đó
MickyT

7

Toán học, 61 46 byte

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

thanx @alephalpha cho -15 byte


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

+##-1&chỉ có thể ##-1&và bạn có thể sử dụng infix Array:ArrayFlatten@{{##-1&~Array~{#,#},2#},{2#,2#}}&
ngenisis

5

MATL , 12 10 byte

:&+q,!GEYc

Hãy thử trực tuyến!

Giải trình

:       % Input n (implicit). Push range [1 2 ... n]
&+      % matrix of pairwise additions
q       % Subtract 1
,       % Do twice
  !     %   Transpose
  GE    %   Push 2*n
  Yc    %   Concatenate that value to all rows, thus extending the matrix
        % End (implicit). Display (implicit)




4

JavaScript (ES6), 64 byte

f=
n=>[...Array(n+1)].map((_,i,a)=>a.map((_,j)=>n-i&&n-j?i-~j:n+n))
<input type=number min=0 oninput="t.innerHTML=f(+this.value).map(a=>`<tr>${a.map(b=>`<td>${b}</td>`).join``}</tr>`).join``"><table id=t>


4

Java 8, 99 byte

Lambda từ Integerđến int[][](ví dụ Function<Integer, int[][]>). Đáng ngạc nhiên chống lại việc chơi golf.

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;}

Dùng thử trực tuyến

Lambda

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;
}

Lời cảm ơn

  • -1 byte nhờ Kevin Cruijssen

Bạn có thể chơi một byte bằng cách bắt đầu i=0và đặt ++tại [c=i++%p].
Kevin Cruijssen

3

Python 2 , 64 62 61 byte

-3 byte nhờ ông Xcoder.

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

Hãy thử trực tuyến!

Có lẽ tôi đang thiếu một mẫu chính.

Python 2 , 76 byte

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

Hãy thử trực tuyến!


1
Như thường lệ, *(n+1)*-~n.
Ông Xcoder


Nếu bạn cũng muốn áp dụng phiên bản Python 3, thời gian ngắn nhất tôi có thể nhận được là 64 byte
Ông Xcoder

Phiên bản 76 byte có thể giảm xuống còn 72 byte
Halvard Hummel



2

R , 54 63 67 byte

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

Hãy thử trực tuyến!

Cảm ơn @Guiseppe cho con trỏ cho sapply và 9 byte


Trên thực tế, cách tiếp cận này cũng có thể được cải thiện: sapply(1:n-1,'+',1:n)nhưng sau đó, nó chỉ hơn 1 byte so với sử dụng outer(các trích dẫn rõ ràng là backticks)
Giuseppe

1
\`hoạt động để thoát backticks trong một khối mã được giới hạn bởi backticks @Giuseppe
Cyoce


2

Đệ quy , 50 byte

  • Chỉ ngắn hơn 10 byte so với python và do đó nó là chính thức, Recursiva hoàn toàn không phải là ngôn ngữ chơi gôn ... Mặc dù vậy, đây là một esolang. : D
|{Ba+++++'PJ"	"W+Z~}B+~}'Va'+}'Va'AD'VaJ"	"W*;aADa

Hãy thử trực tuyến!



1

Röda , 44 byte

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

Hãy thử trực tuyến!

Giải trình:

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

APL Dyalog, 29 byte

Đòi hỏi ⎕IO←0

{(S,⍨1+¯1 ¯1↓∘.+⍨⍳⍵+1)⍪S←2×⍵}

Hãy thử trực tuyến!

Làm sao?

  • 1+¯1 ¯1↓∘.+⍨⍳⍵+1 phần trên bên trái của mảng
  • (S,⍨...)⍪S←2×⍵ góc

1

> <>, 84 + 2 byte

+2 cho cờ -v

In với các tab giữa các giá trị và dòng mới giữa các hàng. Cũng in một tab dấu trên dòng cuối cùng.

Dùng thử trực tuyến

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

Chơi golf trước

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





0

Clojure, 153 135 byte

Danh sách danh sách? Yay, Lisp

(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))))

Ung dung:

(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))))

Hàm ẩn danh lấy đầu vào làm đối số và trả về danh sách các danh sách.

Đầu ra của 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 byte

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

Hãy thử trực tuyến!

Giải trình

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

J, 29 byte

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

vô dụng

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

giải trình

(}:@(] [\ 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

Hãy thử trực tuyến!


Heh, câu trả lời APL của tôi và câu trả lời của bạn có cùng số byte! Bạn có thể thêm một lời giải thích xin vui lòng?
Zacharý

@ Zacharý, cập nhật. fwiw, điều này có lẽ có thể được chơi golf ít nhất một chút bởi một người như tôi, và có lẽ bởi hơn 10 byte bởi một chuyên gia J.
Giô-na

0

Trên thực tế , 23 byte

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

Hãy thử trực tuyến!

Giải trình:

;;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

Clojure v1.8, 97 byte

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

Hãy thử trực tuyến!

Giải trình

(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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.