Advent Challenge 3: Hediyeleri yeniden üretme zamanı!


9

<< Önceki Sonraki >>

Ne yazık ki, Santa zamanında elfleri yakalayamadı! Şimdi imalat hediyelerine geri dönmek zorunda. Elfler kesinlikle Noel Baba'nın köleleri olmadığından, onlara ne kadar ödeme yapılacağını bilmek zorunda.

Meydan okuma

Hediyeler için bazı bilgiler verildiğinde, hepsinin üretim maliyetini belirleyin.

Her hediye bir karton kutuya konur ve ambalaj kağıdı ile sarılır, en sonunda etrafına bir şerit sarılır. Ambalaj kağıdı büyülüdür ve üst üste binme gerektirmez, bu nedenle kullanılan ambalaj kağıdı miktarı kutunun yüzey alanına tam olarak eşittir. Tüm hediyeler dikdörtgen prizmalardır, çünkü Santa bu şekilde onları daha kompakt bir şekilde saklayabilir. Şerit her üç yönde de dolaşır (böylece sarma için kullanılan şeridin uzunluğu üç farklı çevrenin toplamına eşittir).

Neyse ki, şimdiki zamanın bilinen bir maliyeti var. Kartonun metrekare başına 1 dolar, ambalaj kağıdının metrekare başına maliyeti 2 dolar. (İpucu: Yüzey alanını 3: P ile çarpabilirsiniz). Şerit ücreti metre başına 1 $ 'dır.

Biçim Özellikleri

Girdi, her bir hediyenin gerçek öğenin maliyetini ve mevcut kutunun üç boyutunu içerdiği bir hediye listesi olarak verilecektir. Çıktınız gereken toplam maliyet olmalıdır.

Tam olarak, madde maliyeti ile tek mevcut maliyet formülü cve boyutları x, yve zbir c + 6 * (x * y + y * z + z * x) + 4 * (x + y + z).

Test Durumları

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

kurallar

  • Standart Loopholes Uygula
  • Girdi ve çıktı herhangi bir makul biçimde verilebilir ve sunulabilir
  • Girdiyi 4 öznitelik listesi değil, hediye listesi olarak almalısınız.
  • Bu bir , bayt cinsinden en kısa cevap kazanır
  • Hiçbir cevap kabul edilmeyecek

Umarım bu meydan okuma öncekilerden daha kolaydır: P

Not: Advent Of Code'dan bu meydan okuma serisi için ilham aldım . Bu siteyle hiçbir bağlantım yok

Buradaki ilk zorluğun 'Bağlantılı' bölümüne bakarak dizideki tüm zorlukların bir listesini görebilirsiniz .


Biz "şerit için ek 1 metre" kaybetti mic + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)
Graham

@Graham Evet, çıkıyor bunu eklemeyi unuttum. Spesifikasyonlardan çıkarılıyor.
HyperNeutrino

@cairdcoinheringaahing Karışıklık için üzgünüm. Orijinal fikre bağlı kalmaya karar verdim ve test davalarımı da bunu yansıtacak şekilde düzenledim. Teşekkürler!
HyperNeutrino

6
Bu zorluklar dizisinden hoşlanıyordum ama (kuşkusuz, birkaç biradan sonra!) Bu, yaratıcı bir golf için yer kalmadan, hangi dilin kapalı formülü en az baytta yürütebileceği gibi görünüyor, bu durumda, + 1 benden.
Shaggy

1
Mevcut yorum noktalarını netleştirdikten sonra fazladan seçmene daha ne açıklamalıyım?
HyperNeutrino

Yanıtlar:


5

JavaScript (ES6), 58 bayt

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

Test senaryoları

Nasıl?

Burada kullanılan tek hile (xy + xz) 'yi x (y + z) olarak çarpanlarına ayırmak ve formülün son kısmında toplamı (y + z) yeniden kullanmaktır .

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 bayt

  • Kaydedilen dört beş -e doğru on bir bayt sayesinde 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;}

Çevrimiçi deneyin!

Mevcut özelliklerin bir listesini (dörde bölünebilen liste uzunluğu) ve hediye sayısını belirten bir tamsayıyı alır. Tüm hediyelerin üretim maliyetini verir.


Birden fazla çalışmak gerekmiyorsa 100 bayt j = t = 0 tıraş edebilirsiniz,
PrincePolka


@PrincePolka Teşekkürler. Uzlaşma başına, bir işlev birden çok kez çalışmak j=t=0zorundadır , bu yüzden kalmak gerekir. Bir bayt kaydetmek için hesaplamanın nasıl yeniden düzenleneceğini tam olarak anlayamadım; Eğer golf uygulanmış kod tam bir sürümüne bağladıysanız yardımcı olacaktır.
Jonathan Frech


@PrincePolka Çok teşekkürler.
Jonathan Frech

1

05AB1E , 17 bayt

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

Çevrimiçi deneyin!

açıklama

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 bayt

Girdi Sütunlar , her satır Aiçin Dyeni satır alınır . Diğer herhangi bir sütunda formül.

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

Bunu Google E-Tablolar'a aktararak ve terminali bırakarak 2 bayt düşürebilirsiniz))
Taylor Scott
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.