ルビー、58バイト
これは、Releasing Helium NucleiのC answerのアルゴリズムの簡単な実装です。
g=->m,n{n>m ?g[n,m]:m*~m*n*~n/4+n*((2*m-n)*(4*n*n-1)-3)/6}
私は、この式がなぜ成功するかについて調査しました。直立した長方形の数がに等しいことを確認するのは簡単(m+1)*m/2 * (n+1)*n/2
です、対角線の長方形の数はもう少しわかりにくいです。
ニールはいる確認のためm==n
に傾斜矩形の数というn*n
の正方形である(4*n**4-n*n-3*n)/6
とことをするとき m>n
は、追加追加する必要がある(m-n)(n*(4*n*n-1)/3)
(に関連OEIS A000447)、これは説明しませんが、これらの2つの式はどこから来たのか。答えの一部を見つけました。
の場合m==n
、グリッド内の形状はアステカのダイヤモンドです。

アステカダイヤモンドにおける矩形の数は、(に見出される第四のダイヤモンドのために作るために大きな矩形の数の和重畳される5x5
グリッド、2x8
、4x6
、6x4
、と8x2
)マイナス矩形の数が二倍(の数を数え前のアステカダイヤモンドの四角形)。
ここでの式は次のとおりです(後で追加されるTeX):
# superimposed rectangles, 2x(2n-2), 4*(2n-4), ...
f = lambda n: sum( (2*k)*(2*k+1)/2 * (2*n-2*k)*(2*n-2*k+1)/2 for k in range(1, n) )
aztec_rect = f(n) - f(n-1)
Wolfram Alphaによると、f
is 1/30*(n-1)*n*(4*n**3+14*n**2+19*n+9)
の閉じた形式とaztec_rect
is の閉じた形式は、ニールが発見したように、1/6*n*(n-1)*(4*n**2+4*n+3) == 1/6*(4*n**4-n**2-3*n)
です。
なぜ(m-n)(n*(4*n*n-1)/3)
機能するのかはまだわかっていませんが、A000447の定義の1 つがであるためと思われますbinomial(2*n+1, 3)
。投稿し続けます。
更新:拡張されたAztecダイヤモンドの長方形の数の関数は、ダイヤモンドのマイナスの長方形m>n
の重ね合わせに関係していると信じる理由があります。私がそれらを持っているときより多くの結果。2k*2(n-k)
F(m-1,n-1)
更新:別のルートを試してみたところ、ほとんどが説明可能な拡張アステカダイヤモンドの別の公式になりましたが、まだ理解していない用語が1つあります。ハザ!:D
def f(m,n):
if n > m:
return f(n,m)
if n == 0:
return 0
else:
return(m-n+1)*(4*n**4-n*n-3*n)/6-f(m-1,n-1)+(m-n)*2+(m-n)*(n-2)-(m-n-1)*f(n-1,n-1)
最後の式の簡単な内訳:
(m-n+1)*(4*n**4-n*n-3*n)/6
は、n
構造内のサイズのAztecダイヤモンドを重ねた数です(など)f(n,n) = (4*n**4-n*n-3*n)/6
。f(7,3)
5個のアズテックダイヤモンドサイズが重ねられていますが3
、ダイヤモンドf(3,3)
は1個しかありません。
-f(m-1,n-1)
重ねられたダイヤモンドの中央から重複する長方形の一部を削除します。
+(m-n)*2
2つの余分を占め2
行列の(2n-1)
各余分なダイヤモンドのための長方形。
+(m-n)*(n-2)
余分を占めn
行列のn
各余分なダイヤモンドのための正方形。
-(m-n-1)*f(n-1,n-1)
これは新しい不可解な用語です。どうやら、カウントの際にいくつかの余分な正方形を考慮していないようですが、それらが拡張ダイヤモンドのどこにあるのかわかりません。
注:、、の場合m==n
、m-n-1 = -1
この最後の項はカウントに平方を追加することを意味します。通常の式で何かが足りないかもしれません。完全な開示。これは、たまたま機能したこの式の初期のドラフトへのパッチであることを意図したものです。明らかに、私はまだ何が起こっているのかを掘り下げる必要があり、私の式にはいくつかのバグがあるかもしれません。投稿し続けます。
ラッセル、ゲイリー、ワイスシュタイン、エリックW.「アステカダイヤモンド」MathWorldから-Wolfram Webリソース。http://mathworld.wolfram.com/AztecDiamond.html