Project Euler 68

Project Euler 68

题目

Magic $5$-gon ring

Consider the following “magic” $3$-gon ring, filled with the numbers $1$ to $6$, and each line adding to nine.

Working clockwise, and starting from the group of three with the numerically lowest external node ($4,3,2$ in this example), each solution can be described uniquely. For example, the above solution can be described by the set: $4,3,2; 6,2,1; 5,1,3$.

It is possible to complete the ring with four different totals: $9, 10, 11$, and $12$. There are eight solutions in total.

Total Solution Set
$9$ $4,2,3; 5,3,1; 6,1,2$
$9$ $4,3,2; 6,2,1; 5,1,3$
$10$ $2,3,5; 4,5,1; 6,1,3$
$10$ $2,5,3; 6,3,1; 4,1,5$
$11$ $1,4,6; 3,6,2; 5,2,4$
$11$ $1,6,4; 5,4,2; 3,2,6$
$12$ $1,5,6; 2,6,4; 3,4,5$
$12$ $1,6,5; 3,5,4; 2,4,6$

By concatenating each group it is possible to form $9$-digit strings; the maximum string for a $3$-gon ring is $432621513$.

Using the numbers $1$ to $10$, and depending on arrangements, it is possible to form $16$- and $17$-digit strings. What is the maximum $16$-digit string for a “magic” $5$-gon ring?

解决方案

为每个圈进行编号:

其中,外圈用$0\sim 4$标记,内圈用$5\sim9$来标记。

由于输出的是$16$位数,因此枚举过程中需要排除$10$在内圈的情况。

最终,枚举全排列,一个个进行判断。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from itertools import permutations

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ans = 0
for a in permutations(a):
# 外圈最小的在首个,因此确保最小的下标是在0。
# 输出值只能有16位数,因此10只能在外圈。
if min(a[0:5]) != a[0] or 10 in a[5:10]:
continue
if a[0] + a[6] + a[7] == a[1] + a[7] + a[8] == a[2] + a[8] + a[9] == a[3] + a[9] + a[5] == a[4] + a[5] + a[6]:
s = [str(x) for x in a]
t = s[0] + s[6] + s[7] + s[1] + s[7] + s[8] + s[2] + s[8] + s[9] + s[3] + s[9] + s[5] + s[4] + s[5] + s[6]
ans = max(ans, int(t))
print(ans)
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
Ujimatsu Chiya 微信 微信
Ujimatsu Chiya 支付宝 支付宝