戦利品の折り目


12

前書き

長い戦いの後、謎のコンテストでスフィンクスを倒すことに成功しました。あなたのスキルに感銘を受けたスフィンクスは、あなたにあなたの賢さに見合った報酬を与えたいと望み、それぞれ数字を含む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

「スコア」見出しの下の出力例は無効です。5と2の折り目を付けた後、残っているセルは3つだけなので、3の折り目は意味がありません。
ハンドEフード

いい視点ね。変更します。
ホスゲン

回答:


2

Pyth、31バイト

Le+bSyMsm,sMJ.T,_<bd>bdm*FkJtUb

これはy、折り目値を計算する関数を定義します。

デモンストレーション。

これは、すべての可能な後継者のスコアの最大値を使用して、recusiveメソッドを使用します。

再帰の基本ケースは、可能な後続操作のソートされた値に入力を連結し、結果リストの最後を取得することにより実装されます。入力に要素が1つしかない場合、後続要素はないため、リストの最後は入力の1つの要素になります。


これがbeatられることを想像するのは難しいです。たぶん、CJamにはチャンスがありますか?
ホスゲン

2

C#、275 272バイト

これは、すべてのブランチを横断して最高のスコアを返す単純な再帰関数です。

明確にするためにインデント:

using M=System.Math;
int F(int[]n){
    int b=0,g,h,i=0,j,k,l=n.Length;
    if(l<2)
        return n[0];
    for(;++i<l;){
        int[]m=new int[k=M.Max(i,l-i)],o=new int[k];
        for(j=0;j<k;j++){
            m[j]=((g=i-j-1)<0?0:n[g])+((h=i+j)<l?n[h]:0);
            o[j]=h<l&g>=0?n[g]*n[h]:m[j];
        }
        b=M.Max(b,M.Max(F(m),F(o)));
    }
    return b;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.