パスカルの三角形を生成する


35

パスカルの三角形は、最初の行の1から開始して生成されます。後続の行では、数値は、そのすぐ上の左右の2つの数値の合計によって決定されます。

デモンストレーションのために、Pascalの三角形の最初の5行は次のとおりです。

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

チャレンジ

入力n(ただし、選択した言語で最も便利な場合)を指定すると、Pascalの三角形の最初の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 Olson:ラチェットフリークの「好きなようにフォーマットできます」という解釈についてはどう思いますか?彼の解釈に従えば、18文字を剃ることができました。
スティーブンランバルスキー

@StevenRumbalski彼は元気です。各行の間に改行があり、各番号の間にスペースがあるため、基準を満たしています。
ピーターオルソン

@ピーターオルソン:説明をありがとう。nがすでに定義されているというTomas Tの仮定はどうですか?
スティーブンランバルスキー

4
@Gaffiおそらくそうではないでしょう。答えを受け入れると、コンテストを終了し、新しい、おそらくはより良い答えを思いとどまらせているような気分になります。
ピーターオルソン

回答:


30

J、12文字

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

   i.5
0 1 2 3 4
   {:i.5
4
   (i.5)!{:i.5
1 4 6 4 1
   (!{:) i.5
1 4 6 4 1
   (!{:)\ i.5
10000
1 1 0 0 0
1 2 1 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に勝ちますか?面白い。時間があれば、このコードの説明をご覧ください。
ミスターウィザード

4
すでに分割されていますが、追加の英語が必要な場合は、ここに1行ずつ示します。行1 i.5は、最初の5つのナチュラルを返します。行2は{:「Tail」を追加します(最後に戻る)。行3は、それらを!「Out Of」(組み合わせの数)と組み合わせます。行4 (!{:)i.5も同じです。フックを分解します。そう(!:)最初の変換操作であるn個のパスカルの三角形のn番目の行にナチュラルで。5行目は、0..4のすべてのプレフィックス(バックスラッシュ)に適用されますが、Jは未使用のスポットを0で埋めるので、操作は@文字列フォーマット操作と結合されます()":。非常にクールなJ、賛成。
JB

@JBは違います!ここで階乗を意味しますか?また、右側の@を削除することもできます。
defhlt

@ArtemIce Monadic !は階乗を意味します。二項!カウントの組み合わせ。最後@にあるの":@(!{:)\@i.は、これをスタンドアロンの動詞にするためだけです。
一時的な

18

Python、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
スティーブンランバルスキー


14

Mathematica: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

1
賢い:)賛成票を持っている。たぶん勝者候補ではなく、創造的な候補者です!
Accatyyc

11

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


擬似コードまたは説明を提供していただけますか?私は何が起こっているのかをある程度理解していますが、スワッピングの部分を完全には理解していません。
ロブ

詳細な説明と優れた回答(+1)をありがとうございますが、今はさらに混乱しています。ロジック(プロセス)が正しくありません。
ロブ

@MikeDtrick、説明にわずかな誤りがありました。また、説明が必要な微妙な点もありますが、コードを書いてから非常に長いので見落としていました。
ピーターテイラー

さて、それは理にかなっています。私の最後の質問は、印刷および実行プロセスがトップダウンまたはボトムアップ(1、1 1、1 2 1:トップダウン、1 2 1、1 1、1:ボトムアップ)で機能するかどうかです。
ロブ

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

Scala、81 78 72 70文字

81文字:最初の試行、Pythonバージョンから恥知らずにコピーされた:)

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は恥知らずなコピー用です!
スティーブンランバルスキー

最後のバージョンは、50のようなreadIntの巨大な値には慎重に使用する必要があります。;)
ユーザー不明

@userunknownおそらくその質問は... 25の上限を指定する理由の
ルイジ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
p.map!{|i|(v=n)+n=i}
-jsvnm

素晴らしいもの、@ jsvnm!男、私はその部分を短くするためにどのくらい結合したか。ありがとう。
マナトワーク

1
少し遅れるかもしれませんが、なぜ変数vを使用するのですか?
GB

良いキャッチ、@ GB!それは、最初のリビジョンから置き去りにされました。どこも役に立たなかった。私はそれが使用され.mapたときの以前の試みから来ると思う。ありがとうございました。
マナトワーク

5

JavaScript(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への変換forと組み合わせにより5文字を削除

編集2s=文を内部に移動しfor、2文字を保存します

編集3s=1,j=1初期化子を結合しs=j=1て2文字を保存する


いいね!あなたは「S * = ...」に「* ... S = s」を変更することにより、1つの以上の文字を保存することができます
デレクKurth

@DerekKurth:私が最初に最適化を行っていたとき、私はそうである必要があるのでs*(i-j)/j、それはロジックを台無しにするだろうと思っていましたs*((i-j)/j)
mellamokb

うーん、jsfiddleでs * = ...として試してみましたが、うまくいくようです。たぶん私は何か間違ったことをした。
デレクカート

1
@DerekKurth:技術的には同じですが、アイデアは、結果を常に整数にする必要があるため、で(i-j)割る前に乗算すればj、浮動小数点演算の必要がないということです。((i-j)/j)最初に行うと、エラーの原因となる可能性のある10進値になり、少なくとも丸め/切り捨てのために余分なコードが必要になります。約n>11に到達するまでこれを見始めず、出力に10進値が表示されます。つまり、1 11 55 165 330 461.99999999999994 461.99999999999994...
mellamokb

ああ、それは理にかなっています!
デレクカース

5

R、39文字

Rはこのタスクに最適なツールのようです:-)

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

3
要件の1つが欠落しています:「入力nを指定(ただし、選択した言語で最も便利な場合)」
Steven Rumbalski

@Steven、「入力nが与えられた」... nが与えられたと仮定できますか?コードを修正しました。これで大丈夫ですか?
トマス

ピーター・オルソンに明確にするように頼まれます。
スティーブンランバルスキー

@StevenRumbalski入力を受け取らない限り、これは有効だとは思いません。私はRを知らないので、おそらくコンパイラは未定義の変数が入力を促すようにそれを作るので、それは大丈夫かもしれませんが、その点で他のほとんどの言語のようであれば、そうではないと思います。
ピーターオルソン

1
基本的に、n実行時に外部ソースから提供される必要があり、それをキャプチャする装置はプログラムに含まれています。通常、これはコマンドライン引数、またはstdin、またはファイルを意味します。ファイルごとは、他の2つのオプションよりも常に長いため、ほとんど使用されません。
スティーブンランバルスキー

5

in Q (25 characters/20 with shorter version)

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

Shorter

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

Sample usage:

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

Or alternatively, 20 characters t:{(x-1){0+':x,0}\1}
skeevey

Nice, shorter than the GolfScript solution now.
sinedcm

4

awk - 73 chars

fairly straightforward implementation:

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

sample run:

% 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

Perl, 52, 49 characters

Edit: using say instead of print

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

4

Perl, 47 54 characters

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

It takes a number from the command line, but doesn't perform any error checks.

Just realized it only works up to n=4. It was some old code I had on my hd.

This works though:

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

n has to be input into the script though, or it would be one character more.



3

Perl, 77 Chars

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

Example input

5

Example output

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

3

C, 132 127 characters

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

Pascal: 216 192 characters

(Not a real competitor, just an honorific presence.)

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.

Sample run:

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 bytes

Language created after this challenge

1iq:"tTTY+

Try it online!

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

non-competing but a holy disaster, none from previous submissions (even J) succeeded to reduce it up to how much Matl did !!!
Abr001am

I'm pretty sure Jelly or 05AB1E would be shorter though :-)
Luis Mendo

2

D 134 128 chars

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

output for 9 is

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

taking full advantage of "you may format it however you like"; there is a space between each number and a linebreak

edit repositioned the assignment to l to shave of some chars


2

Scala, 131 characters

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

Takes the input from the command line.

Output for 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

What's with all those 0s :-)?
mellamokb

@mellamokb Bit of re-arranging made them go away and shortened the code. :-)
Gareth

2

F♯ - 203 characters

My first attempt at a round of code golf, and first attempt at functional programming. There is probably some obvious way to shorten it I haven't quite figured out yet. It complies in VS2010s F♯ compiler (which has the effect of running #light by default unlike earlier versions), and also works in the F♯ interpreter. Accepts input via stdin. Wish there was a better way for the input/output though! Lots of characters!

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

Why is there no accepted answer to this question?

VBA - 249 chars

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 chars (63 if you count -dn= to get the number of rows in)

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

run with

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

to get

[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

Mathematica 35 chars

Here is the dull and lazy way of slicing Pascal's triangle:

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 characters

A bit late to the party, perhaps?

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

It doesn't beat the J entry, though.

This assumes that the index origin (⎕IO) is set to 0. Unfortunately, with an index origin of 1, we need 25 18 characters:

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

There are two s in the code to express my frustration.

Demo:

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

Explanations

Short version:

  • ⍳⍵ (with an index origin of 0) produces an array of the numbers from 0 to ⍵-1 inclusive, where is the right argument to the function.
  • ⍳⍵+1 generates all numbers from 0 to
  • {⍵!⍨⍳⍵+1} generates choose k for every element k in ⍳⍵+1. The (commute) operator swaps the arguments to a function around, such that the right hand argument becomes the left, and vice versa.
  • {⍵!⍨⍳⍵+1}¨⍳⍵ passes each element in ⍳⍵ using the ¨ (each) operator. The result is a one dimensional array containing the first rows of the Pascal's Triangle.
  • The one argument form of takes a one dimensional vector, and makes it a column rather than a row. Each row of the triangle is put on its own line.

Long answer:

  • Virtually the same as the other version, except that 1-⍨ is placed before an to replicate an index origin of 0.
  • 0,⍳⍵ with an index origin of 1 replicates ⍳⍵+1 with an index origin of 0.

2

Maple, 46

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

Usage:

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

Saved 22 bytes thanks to Taylor Scott.

This is an old question now but I saw a shorter solution for VBA.

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

This is meant to be run in the immediate window. Input is in cell A1 of the active worksheet. Output is in the active worksheet starting at B2 and using however many cells are required based on the input. The COLUMN()>ROW() check keeps the top right of the triangle blank. The ROW()=2 check makes the first value 1 to initiate the triangle. I could have shifted the output down and dropped this check, but it introduces a lot of extraneous output before the actual triangle and I didn't feel that it was in the spirit of the challenge.

I originally posted a much more complicated method that calculated every value based on its row and column. All this method does, though, is to use in-cell formulas. I start at B2 so I can reference the row above it without #REF! errors. Then, it copies and pastes the same formula over a block of cells n wide and n tall. The input and output for n=25 looks like this:

Output


Very cool answer, but you can golf this quite a bit. Converting Function p(r) to Sub p(r) since you have no function output value, removing the space from debug.? c(n,k); and converting the multiline if-then-else statement to a single line (If k Then c=c(n-1,k-1)*n/k Else c=1) brings the byte-count down to 130 by my count
Taylor Scott

@TaylorScott Thanks! I'm pretty new at golfing and only slightly less new to programming in general. I counted 142 because of the line breaks. From what I could find, those are supposed to count.
Engineer Toast

Ah, you are right, I did forget to count my newlines, and as it turns out, at least one other golfing trick For n=0 To... can be condensed to For n=0To... bringing my version of the code to 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 with a byte count of 139
Taylor Scott

A second look at this suggests that if you break it down into an immediate window function with a helper function, you can get it down to 112 Bytes (Immediate Window Function: For n=0To[A1-1]:For k=0To n:?c(n,k);:Next:?:Next Helper Function: Function c(n,k) If k Then c=c(n-1,k-1)*n/k Else c=1 End Function)
Taylor Scott

1
@TaylorScott What about just dropping them entirely? With a change in the formula, it works just fine. I think that output starting at B2 instead of A1 is acceptable.
Engineer Toast

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.