N으로 채워진 N 차원 N ^ N 배열


62

In :  충분한 메모리와 양의 정수 N

Out :  N으로 채워진 N 차원 N ^ N 배열. 여기서 N ^ N은 N x N x N x의 N 항을 의미합니다.

예 :

1 : [1]단일 1을 포함하는 길이 1의 1D 배열 (목록)입니다.

2 : [[2,2],[2,2]]2 개의 행과 2 개의 열이 있고 2로 채워진 2D 배열 (테이블)입니다.

3 : [[[3,3,3],[3,3,3],[3,3,3]],[[3,3,3],[3,3,3],[3,3,3]],[[3,3,3],[3,3,3],[3,3,3]]]3 개로 채워진 3 개의 레이어, 3 개의 행 및 3 개의 열이있는 3D 배열 (입방체)

4 : [[[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]],[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]],[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]],[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]]],[[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]],[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]],[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]],[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]]],[[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]],[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]],[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]],[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]]],[[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]],[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]],[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]],[[4,4,4,4],[4,4,4,4],[4,4,4,4],[4,4,4,4]]]]

5와 6 : 답변 중 하나를 참조하십시오.


우리의 언어가 배열을 지원하지 않는다면, 허용되는 출력 형식은 무엇입니까?
Okx

17
"충분한 메모리"가 입력의 일부이기 때문에 실제로 메모리를 입력으로 사용하고 연결하기 전에 로봇을 제어하는 ​​답을보고 싶습니다.
user2357112

1
모든 배열이 별개의 개체 여야합니까?
Neil

1
@ user2357112 이것이 전제 조건 유형 문제에 가깝다고 생각합니다. 나는 op가 실제로 함수가 메모리를 입력으로 받아 들일 것으로 기대한다는 것을 의심합니다.
그레이트 덕

2
@ TheGreatDuck 맞습니다.하지만 user2357112가 농담이라고 생각합니다.
Adám

답변:


50

파이썬 , 32 바이트

lambda n:eval('['*n+'n'+']*n'*n)

온라인으로 사용해보십시오!

곱셈 과 같은 문자열 "[[[n]*n]*n]*n"n만들고 파이썬 코드로 평가합니다. 평가는 함수 범위 내에서 이루어 지므로 변수 이름 n은 함수 입력으로 평가됩니다.


3
스코프 트릭은 천재입니다
Griffin

+1, 그 평가 트릭은 정말 많은 바이트를 깎습니다
MilkyWay90

31

J, 4 바이트

$~#~

온라인으로 사용해보십시오!

설명

$~#~  Input: integer n
  #~  Create n copies of n
$~    Shape n into an array with dimensions n copies of n

6
챌린지 제목을 보자 마자 J를 생각했습니다. J가 Jelly (J에서 영감을 얻은 골프 언어)를 능가하는 것도 멋지다.
데인

1
$~$~자체도 반복하면서 동등한 것도 있습니다
마일

2
$~$~영어로 번역 ... 돈, 더 많이, 돈, 더 많이 ...
Magic Octopus Urn


12

수학, 22 20 바이트

(t=Table)@@t[#,#+1]&

(* or *)

Table@@Table[#,#+1]&

9

R, 26

이것은 명백한 대답이지만 아마도 더 영리한 것이 있습니까?

n=scan();array(n,rep(n,n))

입니다 scan()필요?
Adám

다른 답변을 살펴보면 함수이거나 입력을 받아 들여야하는 것처럼 보입니까?
Flounderer

1
R은 전혀 모른다. 방금 함수를 대신 지정할 수 있다고 생각했습니다.
Adám

예, 교체 할 수 n=scan();function(n)있지만 더 길어집니다.
Flounderer

5
당신은 넣어 한 바이트를 저장할 수있는 n내부 할당을 array: array(n<-scan(),rep(n,n)).
rturnbull

8

자바 스크립트 (ES6),  44  40 바이트

f=(n,k=i=n)=>i--?f(n,Array(n).fill(k)):k

데모


8

하스켈 , 52 바이트

f n=iterate(filter(>'"').show.(<$[1..n]))(show n)!!n

온라인으로 사용해보십시오!

@nimi의 답변 에서 영감을 얻었 지만 더 사전 정의 된 기능을 사용합니다.

  • 사용 iterate하고 !!대신 재귀 도움말 기능의.
  • "손으로"목록 구분 기호를 구성하는 대신 filter(>'"').show문자열 목록을 형식화 한 다음 추가 "문자 를 제거 합니다.

8

05AB1E (레거시) , 6 5 바이트

Kevin Cruijssen 에게 -1 감사합니다

F¹.D)

온라인으로 사용해보십시오!

F     # For 0 .. input
 ¹.D) # Push <input> copies of the result of the last step as an array

D입력이 암시 적으로 다시 사용되기 때문에 행간 을 제거 할 수 있습니다 (답을 게시 할 때 이것이 확실하지는 않지만 D더 이상 명시 적으로 필요하지 않음 ).
Kevin Cruijssen

1
@KevinCruijssen 나는 이것이 우리에게 암묵적으로 여러 번 입력하는 아이디어를 준 답 중 하나라고 생각합니다 :)
Riley

그래. 실제로 게시 할 때 아직 암시 적이지는 않을 것으로 기대했지만 내 의견을 게시 한 후 (편집 한) 것을 깨달았습니다. ;) 때로는 오래된 답변 (일반적으로 2017 년 이전)으로 얼마나 명백한 일을하고 있는지, 그리고 지금은 얼마나 짧은지를 할 수 있는지 재미 있습니다.
Kevin Cruijssen

7

옥타브, 35 33 25 23 20 바이트

@(N)ones(N+!(1:N))*N

온라인으로 사용해보십시오!

@(N)ones(N*ones(1,N))*N

@(N)repmat(N,N*ones(1,N))

@LuisMendo 덕분에 8 바이트가 절약되었습니다.

@(N)ones(num2cell(!(1:N)+N){:})*N

온라인으로 사용해보십시오!

이전 답변 :

@(N)repmat(N,num2cell(!(1:N)+N){:})

온라인으로 사용해보십시오!


@LuisMendo 쥐, 난 그냥 그 하나를 게시하려고했다;)
비커

@beaker Whoops :-)
Luis Mendo

7

하스켈, 62 바이트

n#0=show n
n#l='[':tail((',':)=<<n#(l-1)<$[1..n])++"]"
f n=n#n

사용 예 : f 2-> "[[2,2],[2,2]]". 온라인으로 사용해보십시오! .

Haskell의 엄격한 유형 시스템은 깊이가 다른 중첩 목록을 반환하는 함수를 방지하므로 결과를 문자열로 구성합니다.

작동 방식 :

n#l=                         n with the current level l is
    '[':                     a literal [ followed by
           n#(l-1)<$[1..n]   n copies of   n # (l-1)
        (',':)=<<            each prepended by a , and flattened into a single list
      tail                   and the first , removed
                  ++"]"      followed by a literal ]

n#0=show n                   the base case is n as a string

f n=n#n                      main function, start with level n         

더 많은 내장 함수를 사용하여 동일한 아이디어를 더 짧게 할 수 있습니다 f n=iterate(filter(>'#').show.(<$[1..n]))(show n)!!n.
Ørjan Johansen이

@ ØrjanJohansen : 좋은 생각입니다. 별도의 답변으로 게시하십시오.
nimi

당신은 바이트를 면도 할 수 (#0)=show있습니까? Haskell
Cyoce에

@Cyoce : 아니요, 구문 오류입니다. 올바른 구문을 사용하려면 인수를 뒤집고 사용할 수 (#)0=show있지만 함수의 모든 정의에는 동일한 개수의 인수가 있어야합니다. 두 번째 줄 ( n#l='['...)에는 두 개의 인수가 필요하므로 첫 번째 줄에도 두 개의 인수가 있어야합니다.
nimi

6

MATL, 8 바이트

ttY"l$l*

MATL Online 에서 시도해보십시오 ( MATL의 모든 n 차원 출력이 모든 차원> 2가 두 번째 차원으로 병합되는 2D 행렬로 표시되므로 실제 출력 크기를 보여주는 코드를 추가했습니다 ).

설명

        % Implicitly grab the input (N)
tt      % Make two copies of N
Y"      % Perform run-length decoding to create N copies of N
l$1     % Create a matrix of ones that is this size  
*       % Multiply this matrix of ones by N
        % Implicitly display the result  

귀하의 제출물이 올바른지 MATL 온라인에서 알 수 없습니다. 모든 대답은 넓은 행렬처럼 보입니다.
Adám

4
@ Adám 두 번째 이후의 치수는 두 번째로 축소 된 것으로 표시됩니다. 따라서이 예제는 생성 된 3x3x3 배열 대신 3x9 배열을 보여줍니다. Zy코드의 끝에 추가 하면 실제 크기를 알려줍니다
Luis Mendo

6

파이썬 2 , 36 바이트

@CalculatorFeline 덕분에 -2 바이트

a=n=input()
exec"a=[a]*n;"*n
print a

온라인으로 사용해보십시오!


~-n== (n-1).
CalculatorFeline

TIO 링크 를 포함시킬 수 있습니까?
Adám

1
사실, 이것! (최적화 된 알고리즘으로 인해 8 바이트, 출력을 추가하기 위해 +9 바이트)
CalculatorFeline

@CalculatorFeline 바이트 수에 포함되지 않도록 머리글과 바닥 글에 항목을 넣을 수 있습니다.
Adám

1
전체 프로그램 제출에 입력 및 출력이 필요하지 않습니까?
CalculatorFeline


5

젤리 , 5 바이트

⁾Wẋẋv

온라인으로 사용해보십시오!

어떻게?

⁾Wẋẋv - Main link: n                            e.g.       3
⁾Wẋ   - character pair literal ['W','ẋ']                  "Wẋ"
   ẋ  - repeat list n times                               "WẋWẋWẋ"
    v - evaluate as Jelly code with input n          eval("WẋWẋWẋ", 3)
      - ...
        WẋWẋ... - toEval: n                e.g. 3
        W        - wrap                        [3]
         ẋ       - repeat list n times         [3,3,3]
          Wẋ     - wrap and repeat            [[3,3,3],[3,3,3],[3,3,3]]
            ...  - n times total             [[[3,3,3],[3,3,3],[3,3,3]],[[3,3,3],[3,3,3],[3,3,3]],[[3,3,3],[3,3,3],[3,3,3]]]

두 번째 5 바이트 젤리 답변. J :-)에 비해 여전히 용납 할 수없는 시간
Adám

2
... 그리고 시도하고 싶지 않다 : D
Jonathan Allan

5

자바 97 96 95 바이트

Object c(int n,int i){Object[]a=new Object[n];for(int j=0;j<n;)a[j++]=i<2?n:c(n,i-1);return a;}

언 골프 드 :

public class N_Dim {

    public static Object create(int n) {
        return create(n, n);
    }

    public static Object create(int n, int i) {
        Object[] array = new Object[n];
        for(int j=0;j<n;j++) {
            array[j] = i<2?n:create(n, i - 1);
        }
        return array;
    }

    public static void main(String[] args) {
        System.out.println(Arrays.deepToString((Object[]) create(3)));
    }

}

1
당신은 대체 할 수 i<=1와 함께 i<2?
cliffroot

예 @ cliffrott. 효과가있었습니다. 감사!!
anacron

1
람다로 몇 바이트를 절약 할 수 있습니다.(n,i)->{...}

자바 8 람다 ftw

1
흠, 추가 입력이 필요한 것 같습니다. 이것이 유효하려면 하나의 매개 변수만으로 별도의 메소드를 작성해야합니다.
Jakob

5

자바 스크립트 (ES6), 38 바이트

f=(n,m=n)=>m?Array(n).fill(f(n,m-1)):n

이 메모리 부족 버전은 45 바이트입니다.

f=(n,m=n)=>m?[...Array(n)].map(_=>f(n,m-1)):n

5

Bash + GNU 유틸리티, 117 바이트

n=$[$1**$1]
seq -f$1o%.fd$n+1-p $n|dc|rev|sed -r "s/(0+|$[$1-1]*).*$/\1/;s/^(0*)/\1$1/;s/^1/[1]/"|tr \\n0$[$1-1] \ []

온라인으로 사용해보십시오!


프로그램은 기본적으로 n의 입력에서 0부터 (n ^ n) -1까지 계산합니다. 여기서 n은 입력입니다. 카운트의 각 n 수 k에 대해 다음을 수행합니다.

  1. k가 하나 이상의 숫자 0으로 끝나는 경우 k의 끝에 각 숫자 0에 대해 '['를 인쇄하십시오.
  2. 인쇄 n.
  3. k가 하나 이상의 숫자 n-1로 끝나는 경우 k의 끝에 각 숫자 n-1에 대해 ']'를 인쇄하십시오.

(n = 1 값은 특수한 경우에 대괄호를 추가해야합니다.이 입력 값은 표준 PPCG 규칙에서 무시할 수있는 stderr에 일부 출력도 생성합니다.)

이 아이디어를 구현하는 더 짧은 방법이있을 수 있습니다.


샘플 실행 :

./array 3
[[[3 3 3] [3 3 3] [3 3 3]] [[3 3 3] [3 3 3] [3 3 3]] [[3 3 3] [3 3 3] [3 3 3]]]

5

젤리 , 4 바이트

R»µ¡

온라인으로 사용해보십시오!

R»µ¡
R     Range. 2 -> [1, 2]
 »    Max between left arg and right arg. Vectorizes. -> [2, 2]
  µ   Separates into a new chain.
   ¡  Repeat 2 times. After another iteration this yields [[2, 2], [2, 2]].

단 하나의 모나드를 사용하지만 체인 분리기가 필요하지 않은 것 :

4 바이트

»€`¡


4

파이썬 3 , 57 53 50 38 바이트

f=lambda n,c=0:n-c and[f(n,c+1)*n]or 1

온라인으로 사용해보십시오!


@CalculatorFeline 덕분에 -4 바이트


34 바이트 :

f=lambda c,n:c and[f(c-1,n)*n]or 1

로 불릴 필요가있다 f(4,4)


코드 라인이 TIO 링크와 반대로 바뀌는 이유는 무엇입니까?
Adám

당신은 대체 할 수 c>1c 1 바이트를 저장합니다. (Markdown, `s에서 중복 제거를 중지 )
CalculatorFeline

@CalculatorFeline 나는 그가 할 수 있다고 생각하지 않습니다; 그 것 c>0이 특정한 경우에.
Erik the Outgolfer

그런 다음 끝을로 변경하십시오 <space>n. 문제 해결 및 보너스 – 더 많은 바이트 절약! : D (따라서 인라인 코드의 끝에 공백이 가능하지만 시작이 아닌가? 이상하다 ...) TIO 링크
CalculatorFeline

@ Adám : TIO에서 메인 기능을 헤더에 할당하고 메인 기능을 마지막 라인에 유지합니다.
CalculatorFeline


4

루비, 27 바이트

->a{(z=a).times{z=[z]*a};z}

1 바이트 이상이지만 xnor의 훌륭한 Python 답변의 'eval'트릭 대신 다른 접근법을 사용합니다.


3

펄 6 , 25 바이트

{($^n,{$_ xx$n}...*)[$n]}

로 시작 하고 추가 중첩 수준을 만들 때마다 n"반복 n 번"변환 n시간을 반복적으로 적용합니다 List.

온라인으로 사용해보십시오!


$_바이트를 저장하기 위해 대신 사용하십시오
Jo King

@ JoKing : 나는 이미 $_내부 블록의 매개 변수로 사용하고 있기 때문에 외부 블록의 매개 변수로도 사용할 수 없습니다.
smls

네,하지만 $n그리고 $_항상 같은 값을 갖는다. 온라인으로 사용해보십시오!
Jo King

3

PHP, 70 62 바이트

이것은 내가 생각해 낼 수있는 가장 간단한 것입니다.

for(;$i++<$n=$argv[1];)$F=array_fill(0,$n,$F?:$n);print_r($F);

입력을 첫 번째 인수로 사용하고 결과 배열을 화면에 인쇄합니다.


8 바이트 를 절약 해 준 @ user59178 에게 감사 합니다 !


이와 같은 사전 할당 변수는 필요하지 않습니다 $l. 떨어지는 $i=0,및 교체 $l와 함께하는 $n 7 바이트를 저장합니다. 를 할당하지 않고 조건부에서 $F할당 하고$n$F?:$narray_fill()
user59178

@ user59178 이것이 당신이 생각한 것인지 아닌지는 모르겠지만 팁을 주셔서 감사합니다. 당신은 8 바이트를 저장했습니다!
Ismael Miguel

3

클로저, 36 바이트

#(nth(iterate(fn[a](repeat % a))%)%)

인수 n시간 을 반복하는 함수를 반복하고 이러한 요소를 무한대로 생성 한 다음 해당 요소를 가져옵니다 n.

온라인으로보십시오



3

배치, 141 바이트

@set t=.
@for /l %%i in (2,1,%1)do @call set t=%%t%%,.
@set s=%1
@for /l %%i in (1,1,%1)do @call call set s=[%%%%t:.=%%s%%%%%%]
@echo %s%

배치에는 실제로 배열이 없으므로 배열의 문자열 표현 만 인쇄합니다. 설명 : 처음 두 행 은 변수에서 N .s로 구분 된 반복 패턴을 구성 N-1 ,합니다 t. 그런 다음 네 번째 줄은이를 대체 패턴 N시간으로 사용하여 N차원 배열 을 만듭니다 . and 문이 작동 call하는 방식 때문에 이중 이 필요 합니다. 먼저, 명령은 변수를 대체합니다. 그것이 일어날 때, 내 모든 표지판이 두 배가되므로 이것은 모두를 인용 부호로 묶는 것 외에는 아무것도하지 않습니다 . 그런 다음 결과 명령문 시간 을 반복합니다 . 매번 명령이 변수를 대체합니다. 이 시점에서 변수에는 단일 세트 만 있습니다forsetfor%call call set s=[%%t:.=%s%%%]Ncalls%s가 치환되어 (예) call set s=[%t:.=[2,2]%]. 그런 다음 내부 호출은 t변수 를 대체하여 (예) set s=[[2,2],[2,2]]원하는 할당을 수행합니다. s그런 다음 최종 값이 인쇄됩니다.


+1 와우, 나는 그것을 기대하지 않았을 것입니다. 모두 겸손한 .bat 파일을 환영합니다!
Adám

3

클로저, 49 바이트

(defmacro r[n]`(->> ~n ~@(repeat n`(repeat ~n))))

가장 짧은 Clojure의 예는 아니지만 인용과 인용을 인용하면서 나 자신을 즐겁게했습니다.


3

I , 7 바이트

나는 이것을 내 동료 인 동료로부터 얻었습니다.

#Bbhph~

#Bb     복사 #기능 B의 아 운드가하기 inding
   hp  시간 (의 우측)에 OOK에게 인수 P는 (반복) 심고 함수
     h~H의 OOK를 왼쪽 인수 ~(전체 생성 기능)을

온라인으로 사용해보십시오!


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.