準正方形を六角格子に拡張したいって話

　ペットボトルを整理していて思ったんです。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288125/b17faf92-d58b-cfb9-ab68-cba21a62a78e.png)
　正方形だといい感じに敷き詰められる。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288125/703ae492-43ee-2426-4ddb-0097aa277c88.png)
　六角形でもいい感じに敷き詰められる。むしろ最密充填構造。

　つまり、ペットボトルには、「いい感じに敷き詰められる数」と「そうでない数」が存在する……！

# 正方形になりえる個数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288125/1a10f8a8-5ac0-9da2-a057-85287f993165.png)

　これは単純で、$\lbrace1,4,9, \cdots , n^2\rbrace$。いわゆる平方数。

# 正六角形になりえる個数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288125/db0b2c31-77ef-bb25-8eb8-3b74eb56453f.png)

　中心からの長さ $n$ を持つ六角形の外周を考える。このような敷き詰め方ができる数を **六角平方数** と定義する。

- 中心のマスは $1$
- そのひとつ外側は $6$
- そのひとつ外側は $2 \times 6 = 12$
- そのひとつ外側は $3 \times 6 = 18$
- （以下略）

　まとめると、

- $1$　（初項）
- $6(n-1)$　（初項以外）

　え、なにこの場合分け……合ってるんだけど、なんか気持ち悪い。

　これらの累積和は $1 + \Sigma_{k=1}^{n}{6(k-1)} = 3n^2-3n+1$ です。

　よって、六角平方数は、$\lbrace 1,7,19, \cdots , 3n^2-3n+1 \rbrace$。

# 準正方形になりえる数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288125/905d7785-4fe9-8b1a-e5f7-c74c2130bd29.png)

　これだけだと候補が少なくて寂しいので、短辺と長辺の差が $1$ 以内であるような長方形を作れるような数「いい感じに敷き詰められる」に含めるものとする。これを **準平方数** と定義する。

　準平方数は $\lbrace2,6,12,\cdots,n(n+1)\rbrace$ となる。

# 準正六角形になりえる数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288125/5d9d4f71-eee8-3f98-3659-5a888f29dab0.png)

　この「準」概念を六角形にも適用します。

- 最小辺と最大辺の差がちょうど $1$ であるような六角形を、**準正六角形**　と定義する
- そのような敷き詰め方ができる数を、**準六角平方数** と定義する

　果たしてこれは求められるのか？

## 場合分け

　とりあえず場合分けで考えます。求めたい面積を $A$ とします。準六角形は、正六角形の辺のうちのいくつかが $1$ 膨らむことが必要条件となるので、それらを全部求めます。

- 正六角形のうち $1$ 辺が膨らむ場合
　不可能。なぜなら、膨らんだ先の辺の長さは $n-2$ になるため、準正六角形の条件を満たさない。
 
　また、この考察により、膨らむ辺は連続した辺である必要がわかります。

- 正六角形のうち（連続した）$2$ 辺が膨らむ場合

　$ A = (3n^2-3n+1) + (2n-1) = 3n^2-n$

- 正六角形のうち（連続した）$3$ 辺が膨らむ場合

　$ A = (3n^2-3n+1) + (3n-1) = 3n^2$

- 正六角形のうち（連続した）$4$ 辺が膨らむ場合
 
　$ A = (3n^2-3n+1) + (4n-1) = 3n^2+n$

- 正六角形のうち（連続した）$5$ 辺が膨らむ場合

　不可能。なぜなら、膨らんでいない辺の長さが $n+2$ になるため、準正六角形の条件を満たさない。

　という訳で、準六角平方数は、ある整数 $n$ を用いて、以下のいずれかで表せる数であることがわかりました。

- $3n^2-n$
- $3n^2$
- $3n^2+n$

　これと、六角平方数である $3n^2-3n+1$ も、「いい感じに敷き詰められる」に含まれることがわかります。

## 一般六角数

　なんか、これまでの議論。場合分けを多用したりで、あまりスマートでない……。

　何か、†本質† を見落としている気がする。

　そもそも、一般六角形に対して敷き詰め数を定義できないか？

　言い換えると、

- $6$ 方向それぞれに対して、順番に $a,b,c,d,e,f$ の長さ持つような六角形を実現する敷き詰め数は？

　待て、こういう時は直交座標系に直すと見通しがよくなる。[私は詳しい](https://qiita.com/hibit/items/2b6c593fa534c88eaa2c)んだ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288125/b5d60d26-e122-8836-0694-93adda0b994d.png)

　こう考えると、求める個数は、正方形から左上の直角三角形と右下の直角三角形を引いたもの！

　よって、求める個数 $A$ は、

```math
A = (a+b-1)(c+d-1)-\frac{1}{2}a(a-1) - \frac{1}{2}d(d-1)
```

　具体例を確認します。

　上の図の例だと、$(a,b,c,d,e,f)=(3,2,3,2,3,2)$ となり、

```math
\displaylines{
A= (3+2-1)(3+2-1)-\frac{1}{2} \cdot 3(3-1)-\frac{1}{2} \cdot 2(2-1)\\
= 4 \cdot 4 - 3 - 1 = 12
}
```

　で一致しています。
 
　他にも、$a=b=c=d=n$ を代入すると、

```math
\displaylines{
A = (n+n-1)(n+n-1) - \frac{1}{2}n(n-1) - \frac{1}{2}n(n-1) \\
= (2n-1)^2 - n(n-1) \\
= 4n^2-4n+1 - n^2+n\\
= 3n^2-3n+1
}
```
　六角平方数だ！

　準六角平方数についてはどうでしょう。

　このとき、準正六角形の大元となる四角形の個数 $S$ は

```math
S = 2n \cdot 2n = 4n^2
```
　に限られることがわかります。

<details><summary>証明</summary>
四角形を構成する辺としてありえるのは $2n-1,2n,2n+1$ の $3$ 通り。

このとき、辺の長さは同じである必要がある。
なぜなら、四角形の辺の長さが異なる場合、六角形上には $n+1$ の辺と長さ $n-1$ の辺が存在することになり、その差は $2$ となる。
よって、このような六角形は準正六角形として不適である。
よって、大元の四角形の辺の長さは同じであることが証明された。

このとき、辺の長さが $2n-1,2n-1$ であれば、求める六角形は正六角形。
また、辺の長さが $2n+1,2n+1$ であれば、求める六角形はひと回り上の正六角形。
よって、準正六角形の大きな四角形の辺は $2n,2n$ の場合に限られる。
</details>

　差し引く三角形の個数 $T$ は、

- $T_1 = \frac{1}{2}n(n-1) + \frac{1}{2}n(n-1) = n^2-n$
- $T_2 = \frac{1}{2}n(n-1) + \frac{1}{2}n(n+1) = n^2$
- $T_3 = \frac{1}{2}n(n+1) + \frac{1}{2}n(n+1) = n^2+n$

　に限られるため、

- $S-T_1 = 3n^2+n$
- $S-T_2 = 3n^2$
- $S-T_3 = 3n^2-n$

　準正六角形の場合もいい感じに整理できました。

# 結論

　ペットボトルを「いい感じに敷き詰められる数」は、ある整数 $n$ を用いて以下のいずれかで表現できる数である。

- $n^2$
- $n(n+1)$
- $3n^2-3n+1$
- $3n^2-n$
- $3n^2$
- $3n^2+n$

　$100$ 以下のいい感じ数を列挙します。

```
1 2 3 4 5 6 9 10 12 14 16 17 20 24 25 27 30 35 36 42 44 48 49 52 56 59 64 70 72 75 80 81 89 90
```