Pyth、15バイト
Ls*V+KyMb1+t_K1
これは関数を定義しますy
。オンラインで試す:デモンストレーション
説明:
してみましょうy[n]
ことがn
目Motzkin数。私y[n]
は式で計算します
y[n] = dot product of (y[0], ..., y[n-1], 1) and (y[n-2], ..., y[0], 1)
最初のベクトルが2番目のベクトルよりも大きいことに注意してください(計算時を除くy[0]
)。この場合、Pythは最初のベクトルの最後にある1を自動的に無視するため、両方のベクトルの長さが等しくなります。
Ls*V+KyMb1+t_K1
L define a function y(b), which returns:
yMb compute the list [y[0], y[1], ..., y[b-1]]
K assign it to K
*V vectorized multiplication of
+K 1 * K with a 1 at the end
+t_K1 * reverse(K), remove the first element, and append 1
s return the sum (dot product)
この式は、OEISにリストされている式の1つのバリエーションです。それは少し愚かかもしれません。最初のベクトルの最後に1があるため(長さが等しくなりません)、実際には再帰に基本ケースを指定する必要はありません。そして、私は2つ+...1
のsが何とかゴルフできるという希望を持っていました。できません。
同じ長さのベクトルのドット積で同様の再帰を定義y[0] = 1
し、同じバイトカウントで基本ケースを定義できます。