アドベントチャレンジ3:プレゼントを再生する時間です。


9

<<前 へ次へ>>

残念ながら、サンタはエルフを間に合わせることができませんでした!彼は今製造のプレゼントに戻らなければなりません。エルフは間違いなくサンタの奴隷ではないので、彼は彼らにいくら支払うかについての費用を理解しなければなりません。

チャレンジ

プレゼントの情報を考慮して、それらすべてを製造するコストを決定します。

それぞれのプレゼントは段ボール箱に入れられ、最後にリボンが巻き付けられて包装紙で包まれます。包装紙は魔法のようで、重なり合う必要がないので、使用される包装紙の量は箱の表面積と正確に同等です。サンタがよりコンパクトに保管できるので、すべてのプレゼントは直角プリズムです。リボンは3方向すべてに回ります(そのため、ラッピングに使用されるリボンの長さは、3つの異なる周囲の長さの合計に等しくなります)。

幸いにも現在自体には既知のコストがあります。段ボールは1平方メートルあたり1ドル、包装紙は1平方メートルあたり2ドルです。(ヒント:表面積に3:Pを掛けるだけです)。リボンの価格は1メートルあたり1ドルです。

フォーマット仕様

入力はプレゼントのリストとして与えられ、各プレゼントには実際のアイテムのコストとプレゼントボックスの3つの寸法が含まれます。あなたの出力は、必要な総コストでなければなりません。

正確には、アイテムのコストを有する単一本のコストのための式c及び寸法xy及びzですc + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)

テストケース

[[7, 8, 6, 7], [7, 7, 5, 5], [8, 9, 6, 7], [6, 5, 10, 10], [5, 9, 6, 7], [9, 9, 10, 6], [8, 10, 10, 6], [6, 5, 7, 9], [7, 10, 8, 8], [5, 9, 9, 10]] -> 11866
[[5, 10, 8, 9], [8, 8, 5, 8], [8, 7, 7, 6], [5, 9, 9, 10], [9, 7, 5, 8], [9, 8, 9, 5], [7, 5, 6, 7], [5, 7, 6, 10]] -> 8854
[[9, 8, 8, 8], [10, 9, 8, 5], [10, 7, 5, 5], [10, 10, 6, 6], [8, 5, 8, 7]] -> 4853
[[7, 7, 8, 10], [8, 10, 7, 8], [9, 7, 7, 8], [8, 5, 10, 5], [6, 6, 6, 8], [8, 9, 7, 5], [8, 5, 6, 5], [7, 9, 8, 5], [10, 10, 10, 8]] -> 9717
[[5, 8, 9, 7], [5, 8, 7, 10], [5, 7, 7, 6], [5, 5, 5, 6], [9, 9, 5, 7], [5, 6, 7, 8], [8, 5, 8, 7], [6, 9, 5, 5], [10, 10, 9, 10]] -> 9418
[[9, 9, 7, 10], [5, 8, 7, 9], [5, 5, 9, 8], [10, 5, 9, 10], [8, 5, 10, 7], [8, 9, 5, 5], [5, 10, 6, 10]] -> 8178
[[5, 9, 5, 8], [7, 8, 10, 6], [7, 10, 7, 10], [8, 9, 7, 5], [5, 7, 8, 6], [9, 9, 6, 10], [6, 5, 9, 9], [7, 9, 9, 9]] -> 9766
[[7, 10, 5, 10], [8, 10, 8, 9], [8, 6, 7, 8], [6, 9, 8, 5], [6, 7, 10, 9], [7, 6, 5, 8]] -> 7118
[[10, 6, 7, 5], [5, 9, 5, 9], [9, 7, 8, 5], [6, 6, 9, 9], [9, 9, 6, 9], [10, 5, 8, 9], [7, 5, 6, 10], [9, 10, 5, 5]] -> 8007
[[8, 10, 7, 8], [9, 10, 5, 8], [6, 7, 5, 6], [10, 10, 9, 8], [7, 5, 8, 9], [10, 10, 6, 7], [10, 8, 9, 10], [5, 10, 5, 5]] -> 9331

ルール

  • 標準抜け穴が適用されます
  • 入力と出力は、適切な形式で与えられ、提示されます。
  • 入力は、属性の4つのリストではなく、プレゼントのリストとして受け取る必要があります。
  • これはので、バイト単位の最短の答えが勝ちます
  • 回答は受け付けられません

うまくいけば、この課題は以前の課題よりも簡単です:P

注:このチャレンジシリーズは、Advent Of Codeからインスピレーションを得ました。このサイトとは関係ありません

こちらの最初のチャレンジの「リンクされた」セクションを見ると、シリーズのすべてのチャレンジのリストを確認できます


「リボンの追加の1メートル」を失ったかc + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)
Graham

@Grahamええ、私はそれを追加するのを忘れていました。仕様から削除しています。
HyperNeutrino 2017

@cairdcoinheringaahing混乱してすみません。私は元のアイデアに固執することに決め、それを反映するようにテストケースを編集しました。ありがとう!
HyperNeutrino 2017

6
私はこの一連の課題を楽しんできましたが、(確かに、ビールを少し飲んだ後で!)これは、創造的なゴルフの余地なしに、どの言語が最小バイト数でクローズドフォーミュラを実行できるかのようです。この場合、+私から1。
Shaggy

1
既存のコメントポイントを明確にした後、追加の投票者に、さらに何を明確にする必要がありますか?
HyperNeutrino 2017

回答:


5

JavaScript(ES6)、58バイト

a=>a.reduce((p,[c,x,y,z])=>p+c+6*(y*z+x*(y+=z))+4*(x+y),0)

テストケース

どうやって?

ここで使用される唯一のトリックは、(xy + xz)x(y + z)として因数分解し、式の最後の部分で合計(y + z)を再利用することです。

a => a.reduce(                    // for each present in a:
  (s, [c, x, y, z]) =>            //   s = sum, [c, x, y, z] = present parameters
    s +                           //   add to s:
    c +                           //     c
    6 * (y * z + x * (y += z)) +  //     6(yz + x(y + z))
    4 * (x + y),                  //     4(x + (y + z))
  0                               //   initial sum = 0
)                                 // end of reduce()




2

C(gcc)104 100 99 93バイト

  • 保存された4つの 5に11バイトの感謝をPrincePolka
t,x,y,z;f(A,a)int*A;{for(t=0;a--;)t+=*A+++6*((x=*A++)*(y=*A++)+(z=*A++)*(x+=y))+4*(x+z);t=t;}

オンラインでお試しください!

現在の属性のリスト(4で割り切れるリストの長さ)と、現在の数を指定する整数を受け取ります。すべてのプレゼントの製造コストを返します。


1つ以上動作させる必要がない場合は100バイト、j = t = 0のシェービングが可能
PrincePolka


@PrincePolkaありがとうございます。コンセンサスごとに、機能は複数回機能する必要j=t=0があるため、とどまる必要があります。計算を並べ替えてバイトを節約する方法を理解できませんでした。ゴルフを実装したコードの完全なバージョンにリンクすると役立ちます。
Jonathan Frech 2017


@PrincePolkaありがとうございます。
Jonathan Frech 2017

1

05AB1E、17バイト

vyćsO4*y¦æ2ùPO6*O

オンラインでお試しください!

説明

v                  # for each present y
 yć                # extract the head (cost)
   s               # swap the dimensions to the top
    O4*            # sum and multiply by 4
       y¦          # push y with the head (cost) removed
         æ         # compute the powerset
          2ù       # keep only elements of length 2
            PO     # product and sum
              6*   # multiply by 6
                O  # sum everything



0

Excel、60バイト

Columns Aからへの入力D、現在ごとの新しい行。他の列の数式。

=SUMPRODUCT(A:A+6*(B:B*C:C+C:C*D:D+B:B*D:D)+4*(B:B+C:C+D:D))

これをGoogleスプレッドシートに転送してターミナルをドロップすると、2バイトをドロップできます))
Taylor Scott
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.