这是另一个谜题的“对应”,即 Puzzling.SE上的公平之王的八枚硬币。
您可以阅读以上背景拼图。有关此难题的详细信息如下。
创建了一组8种不同值的硬币,国王希望您找出最大的N,以便可以使用不超过8个硬币的组合并免费支付从0到N的任意数量的价格。
例如,(摘自Glorfindel的答案)。如果给出一组值分别为1、2、5、13、34、89、233、610的硬币,则程序应输出1596,因为0到1596(含)之间的每个数字都不能用总和表示给定列表中的8个数字(数字可以重复),而1597不能以这种方式表示。
以数学的方式,如果输入是由8个正整数组成的集合S,则所需的输出N满足对于介于0和N之间的任何数字n的情况,存在x1,x2,x3,...,x8,从而
您的目标是编写一个程序,一个函数或一个片段,以8个数字作为输入,并如上所述输出最大N。
规则:
- 允许灵活的I / O,因此您的程序可以采用最合适的任何形式进行输入。您可能会假设输入数字的排序方式最适合您的程序。
- 如果您的程序取决于输入顺序,请在答案中注明
- 输入是一组8个不同的正整数(无零)。输出是一个非负整数。
- 如果输入集中没有1,则您的程序应输出0,因为从0到0的任何数字都满足要求。
- 在输入无效的情况下(集合包含零,负或重复的数字),您的程序可以执行任何操作。
- 禁止出现标准漏洞。
- 您的程序应在几分钟后在现代计算机上运行。
测试用例(大部分取自有关“困惑”的链接问题下的答案):
[1, 2, 3, 4, 5, 6, 7, 8] => 64
[2, 3, 4, 5, 6, 7, 8, 9] => 0
[1, 3, 4, 5, 6, 7, 8, 9] => 72
[1, 2, 5, 13, 34, 89, 233, 610] => 1596
[1, 5, 16, 51, 130, 332, 471, 1082] => 2721
[1, 6, 20, 75, 175, 474, 756, 785] => 3356
这是一个代码高尔夫球,因此每种语言中最短的程序或代码片段将获胜!