ラティスを分割しましょう


8

n×nの格子があるとしましょう。次に、ラティスに線を引くことにより、ラティスを2つのセクションに分割できます。ラインの片側にあるすべてが1つのセットにあり、他のすべてが別のセットにあります。

この方法でラティスを分割する方法はいくつありますか?

たとえば、2×2の格子を考えてみましょう。

. .
. .

次のように、ラティスを半分に分割する2つのパーティションを作成できます。

× ×    × o
o o    × o

各コーナーを分割することもできます。

× o    o ×    o o    o o
o o    o o    × o    o ×

最後に、格子を完全になくすことで、すべてのポイントを1つのパーティションに配置できます。

× ×
× ×

これにより、合計7つのパーティションが作成されます。次のパーティションは単一の直線では作成できないため、有効ではないことに注意してください。

× o
o ×

これは3×3の格子です

. . .
. . .
. . .

純粋に水平または垂直のパーティションが4つあります

× × ×    × × ×    × o o    × × o
× × ×    o o o    × o o    × × o
o o o    o o o    × o o    × × o

4つのコーナーパーティションがあります

× o o    o o ×    o o o    o o o    
o o o    o o o    o o o    o o o
o o o    o o o    o o ×    × o o

4つの大きいコーナーパーティションがあります

× × o    o × ×    o o o    o o o
× o o    o o ×    o o ×    × o o
o o o    o o o    o × ×    × × o

部分的なコーナーの8つのパーティションがあります

× × o    o × ×    o o ×    o o o    o o o    o o o    o o o    × o o
o o o    o o o    o o ×    o o ×    o o o    o o o    × o o    × o o
o o o    o o o    o o o    o o ×    o × ×    × × o    × o o    o o o

8騎士の移動パーティションがあります

× × o    o × ×    × × ×    o o o    o o ×    × o o    o o o    × × ×
× o o    o o ×    o o ×    o o ×    o o ×    × o o    × o o    × o o
× o o    o o ×    o o o    × × ×    o × ×    × × o    × × ×    o o o

そして、1つのパーティション全体があります

× × ×
× × ×
× × ×

合計で29パーティションになります。

仕事

数値nを入力として、n×nラティスのこの方法で作成できるパーティションの数を出力します。

これは質問なので、回答はバイト単位でスコアリングされ、バイト数が少ないほど優れています。

テストケース

OEISの最初の34の礼儀は次のとおりです。

1, 7, 29, 87, 201, 419, 749, 1283, 2041, 3107, 4493, 6395, 8745, 11823, 15557, 20075, 25457, 32087, 39725, 48935, 59457, 71555, 85253, 101251, 119041, 139351, 161933, 187255, 215137, 246691, 280917, 319347, 361329, 407303

OEIS A114043


2×2より大きい格子の例を追加できますか?
Erik the Outgolfer 2017

@EriktheOutgolferが追加されました。
アドホックガーフハンター

回答:


2

JavaScript(ES6)、113 111バイト

guest44851のおかげで2バイト節約

0インデックス。

n=>[...Array(n)].map((_,i,a)=>a.map((_,j)=>x+=(g=(a,b)=>b?g(b,a%b):a<2&&(n-i-1)*(n-j))(i+1,++j)),x=n*++n)|x+x+1

OEISで言及された式に基づいて:

V(m、n)= Sum_ {i = 1..m、j = 1..n、gcd(i、j)= 1}(m + 1-i)(n + 1-j)
a(n +1)= 2(n 2 + n + V(n、n))+ 1

デモ


あなたは置き換えることができa==1&&a<2&&

@ guest44851はい、これは機能します。:-)ありがとう!
Arnauld 2017

また、置き換えることができ&&x+x+1|x+x+1


1

ゼリー、14バイト

ạþ`Fgþ`FỊS_²H‘

オンラインでお試しください!

説明

ạþ`Fgþ`FỊS_²H‘  Input: integer n
ạþ`             Form the table of absolute differences on [1, 2, ..., n]
   F            Flatten
    gþ`         Form a GCD table on that
       F        Flatten
        Ị       Test if the absolute value of each is <= 1
         S      Sum (Count the number of true's)
          _     Subtract
           ²    Square of n
            H   Halve
             ‘  Increment

1

Mathematica、59バイト

2Sum[(#-i)(#-j)Boole[i~GCD~j<2],{i,#-1},{j,#-1}]+2#^2-2#+1&

OEISの礼儀(ちょうど質問のように)

-1バイト@ovsから

オンラインでお試しください!


1
これは、ほぼ逐語的にOEISページからコピーされたものです
nmjcman101 '20

3
質問はOEISの好意によるものであり、この回答も同様です。元の質問には元の回答があります
J42161217

3
私はあなたに反対しません。私が反対票を投じなかったのはそのためです。私はただ透明性を好みます。
nmjcman101 2017

4
私も!しかし、OEISの質問は、簡単に評判ポイントを得るための簡単なトリックだと思います。だから私も同じように答えて、この状況を説明します
J42161217

あなたは置き換えることができ==1<2 TIO
2017

0

Python 2、90バイト

lambda n:4*n*n-6*n+3+4*sum((n-i)*(n-k/i)for i in range(n)for k in range(i*i)if k/i*k%i==1)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.