介绍
经过漫长的战斗,您在一场谜语竞赛中击败了狮身人面像。狮身人面像对您的技巧印象深刻,希望为您提供与您的机灵相称的奖励,并将一条神奇的羊皮纸条分成八个盒子,每个盒子中都包含一个数字,以实现它们的存在。
狮身人面像说:“减少羊皮纸,使盒子重叠,这些盒子将通过加法或乘法合并。当剩下一个盒子时,它的价值将是用金币作为奖励。”
任务
您必须编写一个程序或函数,该程序或函数将一个列表/数组/八个自然数作为输入,并返回/打印通过一系列“折痕”操作可获得的最大奖励。
机械学
“折痕”操作是在某些单元格上执行的,操作者为+
或*
作为操作者。使用运算符将列表的前n个单元格折叠起来并与其目标单元格合并。合并操作中未消耗的任何单元均保持不变。
这是使用n = 3个单元格进行折痕的示例:
使用任何一种加法,将导致以下结果:
或乘法,将导致以下结果:
注意:为简单起见,不允许使用少于1个单元格的折痕,也不允许具有大于或等于列表长度的单元格的折痕。但是,列表的单元格数量可以增加一半以上。
可以将8个单元格的列表加5,从而产生一个新的长度为5的列表:
[0,1,2,3,4,5,6,7]
使用+
操作员会给5个单元格增加一个[9,9,9,1,0]
。
计分
标准代码高尔夫规则-产生正确输出且获胜字节数最少的代码。
奖励:如果您的代码还返回/打印了导致最大奖励的折痕操作序列,请将分数乘以0.8。输出示例如下:
crease 5 +
crease 2 *
crease 2 +
crease 1 *
例子
使用以下输入和结果测试您的代码,格式为input - maximum reward
:
[0, 1, 2, 3, 4, 5, 6, 7] - 7560
[0, 9, 0, 3, 2, 6, 1, 5] - 1944
[0, 1, 0, 3, 0, 2, 0, 4] - 36
[6, 0, 9, 1, 9, 0, 7, 3] - 11907
[0, 5, 2, 0, 1, 3, 8, 8] - 2560