Project Euler 90
Project Euler 90
题目
Cube digit pairs
Each of the six faces on a cube has a different digit (\(0\) to \(9\)) written on it; the same is done to a second cube. By placing the two cubes side-by-side in different positions we can form a variety of \(2\)-digit numbers. For example, the square number \(64\) could be formed:
In fact, by carefully choosing the digits on both cubes it is possible to display all of the square numbers below one-hundred: \(01, 04, 09, 16, 25, 36, 49, 64\), and \(81\).
For example, one way this can be achieved is by placing \(\{0, 5, 6, 7, 8, 9\}\) on one cube and \(\{1, 2, 3, 4, 8, 9\}\) on the other cube.
However, for this problem we shall allow the \(6\) or \(9\) to be turned upside-down so that an arrangement like \(\{0, 5, 6, 7, 8, 9\}\) and \(\{1, 2, 3, 4, 6, 7\}\) allows for all nine square numbers to be displayed; otherwise it would be impossible to obtain \(09\).
In determining a distinct arrangement we are interested in the digits on each cube, not the order.
\(\{1, 2, 3, 4, 5, 6\}\) is equivalent to \(\{3, 6, 4, 1, 2, 5\}\) \(\{1, 2, 3, 4, 5, 6\}\) is distinct from \(\{1, 2, 3, 4, 5, 9\}\)
But because we are allowing \(6\) and \(9\) to be reversed, the two distinct sets in the last example both represent the extended set \(\{1, 2, 3, 4, 5, 6, 9\}\) for the purpose of forming \(2\)-digit numbers.
How many distinct arrangements of the two cubes allow for all of the square numbers to be displayed?
解决方案
每个盒子一共有\(\dbinom{10}{6}=210\)种情况可以填数。两个盒子一起则有\(\dfrac{210\times(210+1)}{2}=22155\)种。
此处使用itertools
库的combinations
产生所有组合。
枚举所有的组合,然后判断平方数中的两个位是否分别在两个集合中。
代码
1 | from itertools import combinations |