Advent Challenge 3: Saatnya membuat ulang hadiah!


9

<< Sebelumnya Berikutnya >>

Sayangnya, Santa tidak dapat menangkap peri tepat waktu! Dia harus kembali ke hadiah manufaktur sekarang. Karena para elf jelas-jelas bukan budak Santa, dia harus mencari tahu berapa banyak untuk membayar mereka.

Tantangan

Diberikan beberapa informasi untuk hadiah, tentukan biaya pembuatan semuanya.

Setiap hadiah dimasukkan ke dalam kotak kardus dan dibungkus dengan kertas kado, dengan pita yang melilit di bagian paling akhir. Kertas pembungkus ajaib dan tidak membutuhkan tumpang tindih, sehingga jumlah kertas pembungkus yang digunakan tepat setara dengan luas permukaan kotak. Semua hadiah adalah prisma segi empat karena dengan cara itu Santa dapat menyimpannya dengan lebih kompak. Pita itu berputar di ketiga arah (sehingga panjang pita yang digunakan untuk pembungkus sama dengan jumlah dari tiga perimeter yang berbeda).

Untungnya, hadiah itu sendiri dikenal mahal. Kardus berharga $ 1 per meter persegi, dan kertas kado berharga $ 2 per meter persegi. (Petunjuk: Anda bisa mengalikan luas permukaan dengan 3: P). Pita harganya $ 1 per meter.

Spesifikasi Format

Input akan diberikan sebagai daftar hadiah di mana setiap hadiah berisi biaya item aktual dan tiga dimensi dari kotak ini. Output Anda harus menjadi total biaya yang diperlukan.

Tepatnya, rumus untuk biaya hadiah tunggal dengan item biaya cdan dimensi x, y, dan zadalah c + 6 * (x * y + y * z + z * x) + 4 * (x + y + z).

Uji Kasus

[[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

Aturan

  • Celah Standar Berlaku
  • Input dan output dapat diberikan dan disajikan dalam format apa pun yang wajar
  • Anda harus mengambil input sebagai daftar hadiah, bukan 4 daftar atribut.
  • Ini adalah , jadi jawaban tersingkat dalam byte menang
  • Tidak ada jawaban yang akan diterima

Semoga tantangan ini lebih mudah dari yang sebelumnya: P

Catatan: Saya mendapat inspirasi untuk seri tantangan ini dari Advent Of Code . Saya tidak memiliki afiliasi dengan situs ini

Anda dapat melihat daftar semua tantangan dalam seri ini dengan melihat bagian 'Tertaut' dari tantangan pertama di sini .


Apakah kita kehilangan "tambahan 1 meter untuk pita" dic + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)
Graham

@ Ya Tuhan, ternyata saya lupa menambahkan itu. Menghapus dari spesifikasi.
HyperNeutrino

@cairdcoinheringaahing Maaf atas kebingungan ini. Saya memutuskan untuk tetap dengan ide asli dan saya telah mengedit kasus uji saya untuk mencerminkan itu juga. Terima kasih!
HyperNeutrino

6
Saya telah menikmati serangkaian tantangan ini tetapi (harus diakui, setelah beberapa bir yang baik!) Yang satu ini sepertinya bahasa yang dapat mengeksekusi formula tertutup dalam byte paling sedikit tanpa ruang untuk bermain golf kreatif jadi, dalam hal ini, tidak ada + 1 dari saya.
Shaggy

1
Kepada pemilih ekstra dekat setelah saya mengklarifikasi poin komentar yang ada, apa lagi yang harus saya klarifikasi?
HyperNeutrino

Jawaban:


5

JavaScript (ES6), 58 byte

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

Uji kasus

Bagaimana?

Satu-satunya trik yang digunakan di sini adalah memfaktisasi (xy + xz) sebagai x (y + z) dan menggunakan kembali jumlah (y + z) di bagian terakhir rumus.

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 byte

  • Disimpan empat lima sebelas byte berkat 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;}

Cobalah online!

Mengambil daftar atribut sekarang (panjang daftar dapat dibagi empat) dan bilangan bulat yang menentukan jumlah hadiah. Mengembalikan biaya pembuatan semua hadiah.


100 byte jika tidak diperlukan untuk bekerja lebih dari satu, Anda dapat mencukur j = t = 0,
PrincePolka


@PrincePolka Terima kasih. Per konsensus, suatu fungsi harus bekerja beberapa kali, jadi j=t=0harus tetap ada. Saya tidak tahu bagaimana mengatur ulang perhitungan untuk menghemat satu byte; ini akan membantu jika Anda ditautkan ke versi kode lengkap dengan golf Anda diimplementasikan.
Jonathan Frech


@ PrincePolka Terima kasih banyak.
Jonathan Frech

1

05AB1E , 17 byte

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

Cobalah online!

Penjelasan

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

Pyth , 39 byte

u+G++hH*6++*@H1@H2*@H1@H3*@H2@H3*4stHQ0

Cobalah online!

Mengambil input sebagai representasi string dari daftar bersarang dan menjumlahkan rumus biaya.



0

Excel, 60 byte

Masukan diambil dari Kolom Ake D, baris baru per sekarang. Formula di kolom lainnya.

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

Anda dapat menjatuhkan 2 byte dengan mentransfer ini ke Google Sheets, dan menjatuhkan terminal))
Taylor Scott
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.