파스칼의 삼각형 생성


35

파스칼의 삼각형 은 첫 번째 행에서 1로 시작하여 생성됩니다. 다음 행에서 숫자는 바로 위와 왼쪽에있는 두 숫자의 합으로 결정됩니다.

다음은 파스칼 삼각형의 첫 5 행입니다.

    1
   1 1
  1 2 1
 1 3 3 1
1 4 6 4 1

도전

입력 n이 주어지면 (그러나 선택한 언어에서 가장 편리함) 파스칼 삼각형 의 첫 n 행을 생성하십시오 . n 은 1과 25 사이의 정수 라고 가정 할 수 있습니다 . 각 행과 각 숫자 사이에 공백이 있어야하지만 그 외에는 원하는대로 형식을 지정할 수 있습니다.

이것은 code-golf 이므로 가장 짧은 솔루션이 승리합니다.

예제 I / O

> 1
1
> 9
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1

NB 어떤 의미에서 이것은 공 분배의
Peter Taylor

@ 피터 올슨 : "당신이 원하는대로 포맷 할 수 있습니다"에 대한 래칫 괴물의 해석에 대한 당신의 의견은 무엇입니까? 그의 해석을 따르면 18자를 면도 할 수있었습니다.
Steven Rumbalski

@StevenRumbalski 그는 괜찮아. 각 행 사이에 줄 바꿈이 있으며 각 숫자 사이에 공백이 있으므로 기준을 충족시킵니다.
피터 올슨

@ 피터 올슨 : 설명 주셔서 감사합니다. n이 이미 정의되어 있다고 Tomas T의 가정은 어떻습니까?
Steven Rumbalski

4
@Gaffi 아마도 대답을 받아들이지 않으면 컨테스트를 끝내고 새롭고 더 나은 답변을 권장하지 않는 것 같습니다.
피터 올슨

답변:


30

J , 12 자

":@(!{:)\@i.

   i.5
012 34
   {: i.5
4
   (i.5)! {: i.5
1 4 6 4 1
   (! {:) i.5
1 4 6 4 1
   (! {:) \ i.5
1000 년
1,010
1 2 0 0
1 3 3 1 0
1 4 6 4 1
   ": @ (! {:) \ i.5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
   ( ": @ (! {:) \ @ i.)` ''
+ ---------------------------------- +
| +-+ ------------------------------ + |
|| @ | + ------------------------- +-+ ||
|| || +-+ --------------------- + | i. |||
|| ||| \ | + ------------------- + || |||
|| ||| || +-+ ----------------- + ||| |||
|| ||| ||| @ | +-+ ---------- + |||| |||
|| ||| ||| || ": | +-+ ------ + ||||| |||
|| ||| ||| || || 2 | +-+-+ |||||| |||
|| ||| ||| || || ||! | {: ||||||| |||
|| ||| ||| || || | +-+-+ |||||| |||
|| ||| ||| || | +-+ ------ + ||||| |||
|| ||| ||| | +-+ ---------- + |||| |||
|| ||| || +-+ ----------------- + ||| |||
|| ||| | + ------------------- + || |||
|| || +-+ --------------------- + | |||
|| | + ------------------------- +-+ ||
| +-+ ------------------------------ + |
+ ---------------------------------- +

1
J가 GolfScript를 이겼습니까? 흥미 롭군 시간이 있으면이 코드에 대한 설명을보고 싶습니다.
Mr.Wizard

4
이미 분할되었지만 추가 영어를 원할 경우 한 줄씩 표시됩니다. 1 행 i.5은 처음 5 개의 내추럴을 반환합니다. 2 행은 {:"꼬리말"을 추가합니다 (마지막으로 돌아갑니다). 3 행은 !"Out Of"(조합 수)와 결합합니다. 4 행 (!{:)i.5은 동일합니다. 훅 아웃 팩토링. (!:)첫 번째 n 내추럴을 파스칼 삼각형의 n 번째 줄로 변환하는 작업도 마찬가지 입니다 . 5 행은이 문자를 0..4의 모든 접두사 (백 슬래시)에 적용하지만 J는 사용되지 않은 스팟을 0으로 채우므로 작업은 @문자열 형식화 작업과 결합됩니다 ( ) ":. 매우 멋진 J, upvoted.
JB

@JB 아냐! 여기서 계승을 의미합니까? 또한 오른쪽에서 @를 제거 할 수 있습니다.
defhlt

@ArtemIce Monadic !는 계승을 의미합니다. 이분법 !카운트 조합. 마지막 @":@(!{:)\@i.이것을 독립형 동사로 만드는 것입니다.
ephemient

18

파이썬, 56 바이트

a=[1];exec"print a;a=map(sum,zip([0]+a,a+[0]));"*input()

샘플 사용법 :

echo 9 | python filename.py

생산 :

[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]

1
+1 똑똑한 방법으로 루프를 exec피하십시오 for.
Steven Rumbalski


14

매스 매 티카 : 36 (41?)


Mathematica에는 Binomial기능이 있지만, 이것으로 인해 재미가 사라집니다. 내가 제안:

NestList[{0,##}+{##,0}&@@#&,{1},n-1]

위의 줄은 다음과 같이 비정형 배열을 렌더링합니다.

{{1}, {1, 1}, {1, 2, 1}, {1, 3, 3, 1}, {1, 4, 6, 4, 1},
 {1, 5, 10, 10, 5, 1}, {1, 6, 15, 20, 15, 6, 1}}

이것이 Mathematica의 기본 형식이므로 허용 될 것이라고 생각했지만 규칙을 다시 읽으면 그렇지 않을 수도 있습니다. 추가 Grid@하면 총 41 자까지 분명하게 허용되는 출력이 생성됩니다 .

Grid@NestList[{0,##}+{##,0}&@@#&,{1},n-1]

n = 6:

1                       
1   1                   
1   2   1               
1   3   3   1           
1   4   6   4   1       
1   5   10  10  5   1   
1   6   15  20  15  6   1

14

C, 522

C 답변을 보여주는 자기. 더 명확하지 못했습니다! 추가 캐릭터를 찾기위한 보너스 포인트.

#define returns return 0
#define fr for
#define twentyonechexpressis0 0
                                                                                i
                                                                               , x
                                                                              [ 52 ]
                                                                            [ 52] ,j, y
                                                                       ; main (c){fr (;i< c
                                                                    ; i++){ x[i][i]=x[ i][0]= 1
                                                         ; }for(i =2;i<c;i++){for (j=1;j<i;j++){x [i][j] =
                                    1 +x[i][j ]+x[i-1][j-1]+x[i-1] [j]+1-1+1-1+1-1+1-1+1-1+111-11- twentyonechexpressis0 -100-1; }
} ;for(i=0 ;i<c;i++){for(j=0;j<=i;j++){ printf("%3d%c",x[i][j],(1+1+1+1)*(1+1+1+1+1+1+1+1)) ;}putchar(1+1+(1<<1+1)+1+1+1+1+1+111111-111111-1);} /*thiscomment_takes28chars*/ returns; }

4
나는 이것이 코드 골프의 요점을 놓친다고 생각할 수는 없다. (또한 추가 문자가 \ binom {5} {4} 위치에 있음을 지적하는 데 도움을 줄 수 없습니다).
피터 테일러

2
쓰는 것이 재미있었습니다. 그것은 일반적으로 내가 codegolf에 오는 것입니다.
walpen 2016

1
영리한 :) 공감하십시오. 어쩌면 승자 후보가 아니라 창조적 인 후보 일 수도 있습니다!
Accatyyc

11

골프 스크립트 (21 문자)

~]({0\{.@+\}/;1].p}*;

설명이 요청 된 이후 :

# Stack contains 'n'
~](
# Stack: [] n
{
    # prev_row is [\binom{i,0} ... \binom{i,i}]
    # We loop to generate almost all of the next row as
    #     [(\binom{i,-1} + \binom{i,0}) ... (\binom{i,i-1} + \binom{i,i})]
    # \binom{i,-1} is, of course, 0
    # Stack: prev_row
    0\
    # Stack: 0 prev_row
    {
        # Stack: ... \binom{i,j-1} \binom{i,j}
        .@+\
        # Stack: ... (\binom{i,j-1} + \binom{i,j}) \binom{i,j}
    }/
    # Stack: \binom{i+1,0} ... \binom{i+1,i} \binom{i,i}
    # unless it's the first time round, when we still have 0
    # so we need to pop and then push a 1 for \binom{i+1,i+1}
    ;1]
    # next_row
    .p
}*
# final_row
;


의사 코드 나 설명을 제공해 주시겠습니까? 나는 무슨 일이 일어나고 있는지 이해하지만 교환 부분을 완전히 이해하지는 못합니다.
Rob

자세한 설명과 탁월한 답변 (+1)에 감사하지만 지금은 더 혼란 스럽습니다. 논리 (프로세스)가 올바르게 앉아 있지 않습니다.
Rob

@ MikeDtrick, 설명에 약간의 오류가있었습니다. 설명이 필요한 미묘한 점이 있지만 코드를 작성한 지 너무 오래되어 놓쳤습니다.
피터 테일러

이제 이해가 시작됩니다. 마지막 질문은 인쇄 및 실행 프로세스가 하향식 또는 상향식 (1, 1 1, 1 2 1 : 하향식, 1 2 1, 1 1, 1 : 상향식)에서 작동합니까?
Rob

7

하스켈, 94 92

f=[1]:[zipWith(+)(0:x)x++[1]|x<-f]
main=readLn>>=mapM_(putStrLn.unwords.map show).(`take`f)

산출:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

각 숫자 사이에 공백을 인쇄하지 않는 71 자 버전 :

f=[1]:[zipWith(+)(0:x)x++[1]|x<-f]
main=readLn>>=mapM_ print.(`take`f)

산출:

[1]
[1,1]
[1,2,1]
[1,3,3,1]

mapM대신을 사용하여 문자를 저장할 수 있습니다 mapM_.
dfeuer

7

스칼라, 81 78 72 70 자

81 문자 : 첫 번째 시도, 뻔뻔스럽게 파이썬 버전에서 복사 :)

var x=Seq(1)
for(i<-1 to args(0).toInt){println(x)
x=(0+:x,x:+0).zipped.map(_+_)}

스크립트로 실행하거나 REPL에서 직접 실행하십시오.

놀랍도록 읽기 쉽고 관용적 인 것으로 70 자로 자릅니다.

Seq.iterate(Seq(1),readInt)(a=>(0+:a,a:+0).zipped.map(_+_))map println

또는 완전히 다른 방법으로 72 70 문자 :

0 to(readInt-1)map(i=>println(0 to i map(1 to i combinations(_)size)))

뻔뻔한 복사 + 1!
Steven Rumbalski

마지막 버전은 50과 같은 큰 값의 readInt에주의해서 사용해야합니다.;)
사용자 불명

@userunknown 아마도 이것이 질문이 25의 상한을 지정하는 이유 일 것입니다.
Luigi Plinge

그것은 단지 호기심을 경고하기위한 비판이 아닙니다.
사용자가 알 수 없음

6

루비 : 51 49 46 자

(45 자 코드 + 1 자 명령 행 옵션)

p=[];$_.to_i.times{n=0;p p.map!{|i|n+n=i}<<1}

덕분에 :

  • jsvnm값 전환을위한 대안을 제안하는 (2 자)
  • GB이전 개선 후 사용하지 않은 변수를 발견하기위한 (4 자)

샘플 실행 :

bash-4.4$ ruby -ne 'p=[];$_.to_i.times{n=0;p p.map!{|i|n+n=i}<<1}' <<< 1
[1]

bash-4.4$ ruby -ne 'p=[];$_.to_i.times{n=0;p p.map!{|i|n+n=i}<<1}' <<< 9
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]

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


1
당신은 2 문자를 저장할 수 있습니다p.map!{|i|(v=n)+n=i}
jsvnm

위대한 하나, @jsvnm! 남자, 내가 그 부분을 짧게하기 위해 얼마나 오래 결합 했어? 감사.
manatwork

1
어쩌면 조금 늦었지만 변수 v를 사용하는 이유는 무엇입니까?
GB

잘 잡아라, @GB! 그것은 1 차 개정판 보다 뒤쳐 졌고, 어디에… 어디… 쓸모없는 곳도있었습니다. 나는 그것이 사용될 때 초기 시도에서 온 것 같아요 .map. 고맙습니다.
manatwork

5

자바 스크립트 ( 90 85 83 81)

for(n=prompt(o=i='');i++<n;o+='\n')for(s=j=1;j<=i;s=s*(i-j)/j++)o+=s+' ';alert(o)

데모 : http://jsfiddle.net/tcRCS/3/

참고 : 숫자는 내장 정수 데이터 유형을 오버플로하고 부동 소수점 숫자가되기 때문에 실제로 n> 30 정도에서는 제대로 작동하지 않습니다.


편집 1 :로 변환 while하여 5자를 제거 했습니다.for 문을과 결합

편집 2 : s=명령문을 내부 로 이동 for하고 2 문자 저장

편집 3 : s=1,j=1이니셜 라이저를 결합하여 s=j=12 문자 저장


좋은! "s = s * ..."를 "s * = ..."로 변경하여 하나 이상의 문자를 저장할 수 있습니다
Derek Kurth

@DerekKurth : 나는 생각했다 그 처음 최적화를하고 있지만 때 논리까지겠습니까 엉망이 될 필요가 있기 때문 s*(i-j)/j이 아니라 s*((i-j)/j).
mellamokb

흠, jsfiddle에서 s * = ...로 시도했지만 작동하는 것 같습니다. 어쩌면 내가 잘못했을 수도 있습니다.
Derek Kurth

1
@DerekKurth : 기술적으로는 동일하지만 아이디어는로 (i-j)나누기 전에 곱하면 j부동 소수점 산술이 필요하지 않습니다. 결과는 항상 정수 여야하기 때문입니다. 먼저 수행하면 ((i-j)/j)10 진수 값이 발생하여 오류의 원인이 될 수 있으며 최소한 반올림 / 잘림에 추가 코드가 필요합니다. about에 도달 할 때까지이 메시지를 표시하지 않으며 n>11출력에 10 진수 값이 표시됩니다.1 11 55 165 330 461.99999999999994 461.99999999999994...
mellamokb

아 이해가 되네요!
Derek Kurth

5

R, 39 자

R 은이 작업에 가장 적합한 도구 인 것 같습니다 :-)

x=1;for(i in 1:n)x=c(print(x),0)+c(0,x)

3
요구 사항 중 하나가 누락되었습니다. "입력 n 제공 (단, 선택한 언어로 가장 편리한 경우 제공)"
Steven Rumbalski

@Steven, "입력 n 제공"... n이 주어진 다고 가정해도 될까요? 코드를 수정했습니다. 이제 괜찮습니까?
Tomas

Peter Olson에게 설명을 요청했습니다.
Steven Rumbalski

@StevenRumbalski 입력이 필요하지 않으면 그것이 유효하지 않다고 생각합니다. 나는 R을 모른다. 그래서 컴파일러는 정의되지 않은 변수가 입력을 프롬프트하도록 할 수 있으므로 괜찮을 수도 있지만, 그 점에서 다른 언어와 비슷하다면 그렇지 않다고 생각한다.
피터 올슨

1
기본적으로 n런타임에 외부 소스에서이 소스를 제공해야하며이를 캡처하는 장치가 프로그램에 포함되어 있습니다. 일반적으로 이는 명령 행 인수 또는 stdin 또는 파일을 의미합니다. 파일별로 다른 두 옵션보다 길이가 길기 때문에 거의 사용되지 않습니다.
Steven Rumbalski

5

Q로 (더 짧은 버전의 경우 25 자 / 20 자)

t:{(x-1) (p:{0+':x,0})\1}

더 짧은

t:{(x-1){0+':x,0}\1}

샘플 사용법 :

q)t 4
1
1 1
1 2 1
1 3 3 1

또는 20 자t:{(x-1){0+':x,0}\1}
skeevey

이제 GolfScript 솔루션보다 짧습니다.
sinedcm

4

awk-73 자

상당히 간단한 구현 :

{for(i=0;i<$1;++i)for(j=i;j>=0;)printf"%d%c",Y[j]+=i?Y[j-1]:1,j--?32:10}

샘플 실행 :

% awk -f pascal.awk <<<10
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1

4

펄, 52 , 49 자

편집 : say대신 사용print

map{@_=(1,map$_[$_-1]+$_[$_],1..@_);say"@_"}1..<>

4

펄, 47 54 자

$p=1;map{print"@{[split//,$p]}\n";$p*=11}1..<>

명령 행에서 숫자를 가져 오지만 오류 검사는 수행하지 않습니다.

그것은 단지 n = 4까지만 작동한다는 것을 깨달았습니다. 내 HD에 있던 오래된 코드였습니다.

그래도 작동합니다.

map{@a=(1,map$a[$_-1]+=$a[$_],1..@a);print"@a\n"}a..n

스크립트에 n을 입력해야합니다. 그렇지 않으면 한 문자 이상이됩니다.



3

펄, 77 문자

$o[0]=1;for(1..<>){$"=" ";for(1..$_){$n[$_]=$o[$_]+$o[$_-1]}@o=@n;print"@o
"}

입력 예

5

출력 예

 1
 1 1
 1 2 1
 1 3 3 1
 1 4 6 4 1

3

C, 132 개 (127) 문자

c[25][25],n,i,j;main(){for(scanf("%d",&n);i<n;i++)for(j=0;j<=i;j++)printf("%d%c",c[i][j]=j?c[i-1][j-1]+c[i-1][j]:1,i-j?32:10);}

3

파스칼 : (216) 192 자

(진정한 경쟁자가 아니라 단지 명예로운 존재입니다.)

var p:array[0..1,0..25]of LongInt;i,j,n,u:Word;begin
Read(n);u:=0;for i:=1to n do begin
p[1,1]:=1;for j:=1to i do begin
p[u,j]:=p[1-u,j-1]+p[1-u,j];Write(p[u,j],' ')end;u:=1-u;Writeln
end
end.

샘플 실행 :

bash-4.2$ fpc pascal.pas 
/usr/bin/ld: warning: link.res contains output sections; did you forget -T?

bash-4.2$ ./pascal <<< 1
1 

bash-4.2$ ./pascal <<< 9
1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 
1 7 21 35 35 21 7 1 
1 8 28 56 70 56 28 8 1 

3

MATL , 10 바이트

이 도전 후에 만들어진 언어

1iq:"tTTY+

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

1       % Push a 1. This will be the first row
iq:     % Take input n. Generate range [1,2,...,n-1]
"       % For each (that is, repeat n-1 times)
  t     %   Duplicate latest row
  TT    %   Push [1 1]
  Y+    %   Convolve latest row with [1 1] to produce next row
        % Implicitly end for each
        % Implicitly display stack contents

경쟁이 아닌 성스러운 재앙으로, 이전의 제출 (J조차도)에서 Matl 이 얼마나 많은 양으로 그것을 줄일 수 없었습니다 !!!
Abr001am

나는 젤리 또는 05AB1E가 더 짧을 것이라고 확신합니다 :-)
Luis Mendo

2

D 134 128 개 문자

import std.stdio;void main(){int n,m;int[]l,k=[0,1];readf("%d",&n);foreach(i;0..n){writeln(l=k~0);k=[];foreach(e;l)k~=m+(m=e);}}

9의 출력은

>9
[0, 1, 0]
[0, 1, 1, 0]
[0, 1, 2, 1, 0]
[0, 1, 3, 3, 1, 0]
[0, 1, 4, 6, 4, 1, 0]
[0, 1, 5, 10, 10, 5, 1, 0]
[0, 1, 6, 15, 20, 15, 6, 1, 0]
[0, 1, 7, 21, 35, 35, 21, 7, 1, 0]
[0, 1, 8, 28, 56, 70, 56, 28, 8, 1, 0]

"하지만 원하는대로 포맷 할 수 있습니다"를 최대한 활용합니다. 각 숫자와 줄 바꿈 사이에 공백이 있습니다

편집 l은 일부 문자를 면도 하기 위해 할당을 재배치했습니다.


2

스칼라, 131 자

object P extends App{var x=List(1)
while(x.size<=args(0).toInt){println(x.mkString(" "))
x=(0+:x:+0).sliding(2).map(_.sum).toList}}

명령 행에서 입력을 가져옵니다.

n = 10에 대한 출력 :

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1

그 모든 것들과 함께 무엇입니까 0:-)?
mellamokb

@mellamokb 비트를 다시 정리하면 코드가 사라졌습니다. :-)
Gareth

2

F♯-203 자

코드 골프 라운드에서 처음 시도하고 함수형 프로그래밍에서 처음 시도했습니다. 아마 아직 알지 못했던 그것을 줄이는 확실한 방법이있을 것입니다. VS2010s F♯ 컴파일러 (이전 버전과 달리 기본적으로 #light를 실행하는 효과가 있음)를 준수하며 F♯ 인터프리터에서도 작동합니다. stdin을 통한 입력을 허용합니다. 그래도 입 / 출력을위한 더 좋은 방법이 있었으면 좋겠다! 많은 캐릭터!

open System
let rec C r m =if r=0||m<=0||m>=r then 1 else C(r-1)m+C(r-1)(m-1)
for j = 0 to Convert.ToInt32(Console.ReadLine ()) do (
 [0..j]|>List.map(C j)|>List.iter(fun k->printf "%i " k)
 printf "\n")

2

이 질문에 대한 대답이없는 이유는 무엇입니까?

VBA-249 자

Sub t(n)
ReDim a(1 To n,1 To n*2)
a(1,n)=1:y=vbCr:z=" ":d=z & 1 & z & y:For b=2 To n:For c=1 To n*2:x=a(b-1,c)
If c>1 Then a(b,c)=a(b-1,c-1)+x
If c<n*2 Then a(b,c)=a(b-1,c+1)+x
d=IIf(a(b,c)<>0,d & z & a(b,c) & z,d):Next:d=d & y:Next:MsgBox d
End Sub

2

postscript-59 문자 ( -dn=행 수 를 계산 하는 경우 63 )

[1]n{dup ==[0 3 2 roll{dup 3 2 roll add exch}forall]}repeat

와 실행

gs -q -dn=10 -dBATCH pascal.ps 

얻을

[1]
[1 1]
[1 2 1]
[1 3 3 1]
[1 4 6 4 1]
[1 5 10 10 5 1]
[1 6 15 20 15 6 1]
[1 7 21 35 35 21 7 1]
[1 8 28 56 70 56 28 8 1]
[1 9 36 84 126 126 84 36 9 1]

2

매스 매 티카 35 자

파스칼의 삼각형을 자르는 둔하고 게으른 방법은 다음과 같습니다.

Table[n~Binomial~k,{n,0,5},{k,0,n}]

(* out *)
{{1}, {1, 1}, {1, 2, 1}, {1, 3, 3, 1}, {1, 4, 6, 4, 1}, {1, 5, 10, 10,5, 1}}

2

APL, 19 15 자

파티에 좀 늦었 을까?

{⍪{⍵!⍨⍳⍵+1}¨⍳⍵}

그러나 J 항목을이기는 것은 아닙니다.

이것은 인덱스 원점 ( ⎕IO) 이로 설정되어 있다고 가정합니다 0. 불행하게도의 인덱스 출처는 25 18 문자 1가 필요 합니다.

{⍪{⍵!⍨0,⍳⍵}¨1-⍨⍳⍵}

내 좌절감을 표현하는 코드 에는 두 가지가 있습니다 .

데모:

      {⍪{⍵!⍨⍳⍵+1}¨⍳⍵}5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

설명

짧은 버전 :

  • ⍳⍵(인덱스 원점 0)은 0에서 ⍵-1포괄적 인 숫자의 배열을 생성 합니다. 여기서 함수에 대한 올바른 인수입니다.
  • ⍳⍵+1 0에서 0까지의 모든 숫자를 생성합니다
  • {⍵!⍨⍳⍵+1}의 모든 요소 에 대한 선택 k을 생성 합니다 . (통근) 작업자는 오른손 인수 반대 왼쪽 및 바이스 지도록 주위 함수의 인수 스왑.k⍳⍵+1
  • {⍵!⍨⍳⍵+1}¨⍳⍵(각) 연산자 를 ⍳⍵사용하여 각 요소를 전달합니다 ¨. 결과는 첫 번째를 포함하는 1 차원 배열입니다 파스칼 삼각형 행을 입니다.
  • 의 하나의 인수 형식은 1 차원 벡터 를 취하여 행이 아닌 열로 만듭니다. 삼각형의 각 행은 자체 선에 배치됩니다.

긴 대답 :

  • 인덱스 원점을 0으로 복제 1-⍨하기 전에 배치 된 것을 제외하고 는 다른 버전과 거의 동일합니다 .
  • 0,⍳⍵인덱스 오리진이 1 ⍳⍵+1인 인덱스 오리진이 0 인 복제 .

2

메이플, 46

seq(print(seq(binomial(i,k),k=0..i)),i=0..n-1)

용법:

> f:=n->seq(print(seq(binomial(i,k),k=0..i)),i=0..n-1);
> f(3)
    1
   1 1
  1 2 1

2

VBA, 162 (142) 102 80 바이트

Taylor Scott 덕분에 22 바이트를 절약했습니다.

이것은 오래된 질문이지만 VBA에 대한 더 짧은 솔루션을 보았습니다.

[B2].Resize([A1],[A1])="=IF(COLUMN()>ROW(),"""",IF(ROW()=2,1,IFERROR(A1+B1,1)))"

이것은 바로 창에서 실행됩니다. 입력이 A1활성 워크 시트의 셀 에 있습니다. 출력은 시작 B2및 사용 중인 활성 워크 시트 에 있지만 입력을 기반으로 많은 셀이 필요합니다. 이 COLUMN()>ROW()검사는 삼각형의 오른쪽 상단을 비워 둡니다. ROW()=2검사는 첫 번째 값 만드는 1삼각형을 시작할 수 있습니다. 나는 출력을 낮추고이 검사를 떨어 뜨릴 수 있었지만 실제 삼각형 앞에 많은 외부 출력을 도입했으며 이것이 도전의 정신에 있다고 생각하지 않았습니다.

원래 행과 열을 기준으로 모든 값을 계산하는 훨씬 복잡한 방법을 게시했습니다. 그러나이 모든 방법은 셀 내 수식을 사용하는 것입니다. 시작하여 오류 B2없이 위의 행을 참조 할 수 #REF!있습니다. 이어서, 셀 블록 위에 복사하기 및 붙여 같은 화학식 NN 키. 입력 및 출력은 n=25다음과 같습니다.

산출


매우 멋진 대답이지만, 당신은 이것을 꽤 골프 할 수 있습니다. 변환 Function p(r)Sub p(r)에서 공간을 제거, 더 기능 출력 값이 없기 때문에 debug.? c(n,k);여러 줄로 변환 if-then-else한 줄 (에 문을 If k Then c=c(n-1,k-1)*n/k Else c=1받는 내려 바이트-계산) 가져온다 130내 계산에 의해
테일러 스콧

@TaylorScott 감사합니다! 나는 골프를 처음 접했고 프로그래밍에 익숙하지 않다. 줄 바꿈 때문에 142를 세었습니다. 에서 내가 찾을 수 있는지 , 사람들이 계산되어있다.
엔지니어 토스트

아, 당신은 내 줄 바꿈을 계산 오른쪽 잊지 않았다, 그리고 그것을 밝혀, 적어도 하나의 다른 골프를 치는 트릭 For n=0 To...에 응축 할 수 있습니다 For n=0To...에 코드의 내 버전을 가져 Sub p(r):For n=0To r-1:For k=0To n:Debug.?c(n,k);:Next:Debug.?:Next:End Sub Function c(n,k):If k Then c=1 Else c=c(n-1,k-1)*n/k[CHAR (10)] End Function의 바이트 수와139
테일러 Scott

(: 직접 실행 창 기능이에서 두 번째보기는 도우미 기능을 즉시 윈도우 함수로 그것을 무너 뜨리는 경우가 112 바이트로 다운받을 수 있음을 시사 For n=0To[A1-1]:For k=0To n:?c(n,k);:Next:?:Next도우미 기능 : Function c(n,k) If k Then c=c(n-1,k-1)*n/k Else c=1 End Function)
테일러 스콧

1
@TaylorScott 그것들을 완전히 떨어 뜨리는 것은 어떻습니까? 수식이 변경되면 제대로 작동합니다. 나는 B2대신에 시작하는 출력 A1이 수용 가능 하다고 생각합니다 .
엔지니어 토스트

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