k/q 中的帕斯卡三角形
Pascal's triangle in k/q
斐波那契很好:
f:|+\
5 f 1
但我还没有找到帕斯卡三角的类似表达式。这是我能得到的最好的:
q){x+\x#1}6
1 1 1 1 1 1
1 2 3 4 5 6
1 3 6 10 15 21
1 4 10 20 35 56
1 5 15 35 70 126
1 6 21 56 126 252
1 7 28 84 210 462
这是一个基于 code.kx http://code.kx.com/q/ref/adverbs/
上的斐波那契示例的解决方案
q)pascal:{{((+':)x),1}/[x;1]}
q)pascal 0
1
q)pascal 6
1 6 15 20 15 6 1
q){{((+':)x),1}\[x;1]} 7
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
上有一个非常漂亮的
q)pt:{0+':x,0}
q)4 pt\ 1
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
original Pascal triangle确实比现代教科书版本旋转了45°,所以OP的解决方案是正确的,但可以提高可读性:
q)sums\[6;6#1]
1 1 1 1 1 1
1 2 3 4 5 6
1 3 6 10 15 21
1 4 10 20 35 56
1 5 15 35 70 126
1 6 21 56 126 252
1 7 28 84 210 462
对于那些喜欢破译混淆的 q 代码的人来说,这里有一个无 lambda 的解决方案:
q)p:(sums\).(-1+;#[;1])@\:
q)p 3
1 1 1
1 2 3
1 3 6
斐波那契很好:
f:|+\
5 f 1
但我还没有找到帕斯卡三角的类似表达式。这是我能得到的最好的:
q){x+\x#1}6
1 1 1 1 1 1
1 2 3 4 5 6
1 3 6 10 15 21
1 4 10 20 35 56
1 5 15 35 70 126
1 6 21 56 126 252
1 7 28 84 210 462
这是一个基于 code.kx http://code.kx.com/q/ref/adverbs/
上的斐波那契示例的解决方案q)pascal:{{((+':)x),1}/[x;1]}
q)pascal 0
1
q)pascal 6
1 6 15 20 15 6 1
q){{((+':)x),1}\[x;1]} 7
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
q)pt:{0+':x,0}
q)4 pt\ 1
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
original Pascal triangle确实比现代教科书版本旋转了45°,所以OP的解决方案是正确的,但可以提高可读性:
q)sums\[6;6#1]
1 1 1 1 1 1
1 2 3 4 5 6
1 3 6 10 15 21
1 4 10 20 35 56
1 5 15 35 70 126
1 6 21 56 126 252
1 7 28 84 210 462
对于那些喜欢破译混淆的 q 代码的人来说,这里有一个无 lambda 的解决方案:
q)p:(sums\).(-1+;#[;1])@\:
q)p 3
1 1 1
1 2 3
1 3 6