6.1.26
これは回転を同一視した2つのマスの選び方と等しい。 回転したものが同一視されるので、回転を同一視しない選び方は次の2つの場合に分割できる。
- 回転したときに2つの異なる塗られ方になるもの
- 回転したときに4つの異なる塗られ方になるもの
(1)となるのは2つのマスが中央のマスに対して点対称になるときである。 これは中央のマス以外を1つ選ぶともう片方は自動的に決まるので通りある。 また、全ての塗り方は通りあるので、(2)は通りある。
最後に回転を同一視すると(1)は2で、(2)は4で割ればいいので 最終的な答えは通りである。
以下、確認用のコード
n = 7 # must be odd
c = n // 2
def rot(p):
x = p[0] - c
y = p[1] - c
return (-y + c, x + c)
ans = 0
cnt = set()
for x1 in range(n):
for y1 in range(n):
for x2 in range(n):
for y2 in range(n):
p1 = (x1, y1)
p2 = (x2, y2)
if p1 == p2: continue
if (p1, p2) in cnt: continue
ans += 1
p1_, p2_ = p1, p2
for r in range(4):
cnt.add((p1_,p2_))
cnt.add((p2_,p1_))
p1_ = rot(p1_)
p2_ = rot(p2_)
print(ans)