前書き
長い戦いの後、謎のコンテストでスフィンクスを倒すことに成功しました。あなたのスキルに感銘を受けたスフィンクスは、あなたにあなたの賢さに見合った報酬を与えたいと望み、それぞれ数字を含む8つの箱に分割された魔法の羊皮紙のストリップを存在に想起させます。
「羊皮紙を減らしてください」とスフィンクスは言います、「箱が重なり、それらの箱が足し算または掛け算のいずれかによって融合するように。1つの箱が残っているとき、その価値は金貨であなたの報酬になります。」
仕事
8つの自然数のリスト/配列/いずれかを入力として受け取り、一連の「折り目」操作を通じて取得可能な最大の報酬を返す/印刷するプログラムまたは関数を作成する必要があります。
力学
「折り目」操作は、いくつかのセルに対して、+
または*
演算子として、または演算子として実行されます。リストの最初の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