Advent Challenge 3: Czas na regenerację prezentów!

9

<< Poprzedni Następny >>

Niestety, Mikołajowi nie udało się złapać elfów na czas! Musi teraz wrócić do produkcji prezentów. Ponieważ elfy zdecydowanie nie są niewolnikami Świętego Mikołaja, musi obliczyć wydatki za ich zapłacenie.

Wyzwanie

Biorąc pod uwagę pewne informacje dotyczące prezentów, określ koszt ich wytworzenia.

Każdy prezent jest pakowany w pudełko tekturowe i owinięty papierem do pakowania, a na samym końcu owinięty jest wstążką. Papier do pakowania jest magiczny i nie wymaga nakładania się, więc ilość użytego papieru do pakowania jest dokładnie równa powierzchni pudełka. Wszystkie prezenty są prostokątnymi pryzmatami, ponieważ w ten sposób Święty Mikołaj może przechowywać je bardziej kompaktowo. Wstążka porusza się we wszystkich trzech kierunkach (więc długość wstążki używanej do owijania jest równa sumie trzech różnych obwodów).

Na szczęście sam prezent ma znany koszt. Tektura kosztuje 1 USD za metr kwadratowy, a papier do pakowania kosztuje 2 USD za metr kwadratowy. (Wskazówka: Możesz po prostu pomnożyć powierzchnię przez 3: P). Wstążka kosztuje 1 USD za metr.

Specyfikacja formatu

Dane wejściowe zostaną podane jako lista prezentów, gdzie każdy prezent zawiera koszt rzeczywistej pozycji i trzy wymiary obecnego pudełka. Twój wynik powinien być wymaganym całkowitym kosztem.

A dokładniej, wzór na koszt jednego obecne w tym elemencie ci wymiarach x, yi zjest c + 6 * (x * y + y * z + z * x) + 4 * (x + y + z).

Przypadki testowe

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

Zasady

  • Obowiązują standardowe luki
  • Dane wejściowe i wyjściowe mogą być podawane i prezentowane w dowolnym rozsądnym formacie
  • Musisz wziąć dane wejściowe jako listę prezentów, a nie 4 listy atrybutów.
  • To jest , więc wygrywa najkrótsza odpowiedź w bajtach
  • Żadne odpowiedzi nie będą akceptowane

Mam nadzieję, że to wyzwanie jest łatwiejsze niż poprzednie: P

Uwaga: Inspirację do tej serii wyzwań czerpałem z Advent Of Code . Nie mam powiązań z tą stroną

Możesz zobaczyć listę wszystkich wyzwań w serii, patrząc na sekcję „Połączone” pierwszego wyzwania tutaj .

HyperNeutrino
źródło
Czy zgubiliśmy „dodatkowy 1 metr na wstążkę” wc + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)
Graham
@Graham Tak, okazuje się, że zapomniałem to dodać. Usuwanie ze specyfikacji.
HyperNeutrino,
@cairdcoinheringaahing Przepraszamy za zamieszanie. Postanowiłem trzymać się oryginalnego pomysłu i edytowałem moje przypadki testowe, aby to również odzwierciedlić. Dzięki!
HyperNeutrino,
6
Cieszyłem się z tej serii wyzwań, ale (co prawda po kilku dobrych piwach!) Ten wydaje się po prostu, który język może wykonać zamkniętą formułę w jak najmniejszej liczbie bajtów bez miejsca na kreatywne granie w golfa, więc w tym przypadku nie ma + 1 ode mnie.
Kudłaty
1
Dla dodatkowego bliskiego wyborcy po wyjaśnieniu istniejących skomentowanych punktów, co jeszcze powinienem wyjaśnić?
HyperNeutrino,

Odpowiedzi:

5

JavaScript (ES6), 58 bajtów

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

Przypadki testowe

W jaki sposób?

Jedyną sztuczką stosowaną tutaj jest faktoryzacja (xy + xz) jako x (y + z) i ponowne użycie sumy (y + z) w ostatniej części formuły.

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()
Arnauld
źródło
3

Mathematica, 34 bajty

Tr[#+6#2(+##3)+6##3+4(+##2)&@@@#]&  

-10 bajtów od @alephalpha

Wypróbuj online!

J42161217
źródło
Tr[#+6#2(+##3)+6##3+4(+##2)&@@@#]&
alephalpha
2

Python 3 , 56 bajtów

lambda*a:sum(c+(6*x+4)*(y+z)+6*y*z+4*x for(c,x,y,z)in a)

Wypróbuj online!

  • -2 bajty dzięki Mr. Xcoder!
  • -15 bajtów dzięki notjagan!
  • -1 bajt dzięki Alix Eisenhardt!
Cairney Coheringaahing
źródło
2

C (gcc) , 104 100 99 93 bajtów

  • Zaoszczędź cztery pięć jedenaście bajtów dzięki 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;}

Wypróbuj online!

Pobiera listę obecnych atrybutów (długość listy dzieli się przez cztery) i liczbę całkowitą określającą liczbę prezentów. Zwraca koszt wytworzenia wszystkich prezentów.

Jonathan Frech
źródło
100 bajtów, jeśli nie jest wymagane, aby pracować więcej niż jeden można ogolić z j = t = 0,
PrincePolka
@PrincePolka Dziękujemy. Zgodnie z konsensusem funkcja musi działać wiele razy, więc j=t=0musi pozostać. Nie mogłem do końca wymyślić, jak zmienić kolejność obliczeń, aby zaoszczędzić bajt; pomogłoby to, gdybyś połączył się z pełną wersją kodu ze swoim golfem.
Jonathan Frech,
99 bajtów
PrincePolka
@PrincePolka Wielkie dzięki.
Jonathan Frech,
1

05AB1E , 17 bajtów

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

Wypróbuj online!

Wyjaśnienie

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
Emigna
źródło
0

Pyth , 39 bajtów

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

Wypróbuj online!

Pobiera dane wejściowe jako ciąg znaków reprezentujący zagnieżdżoną listę i sumuje nad formułą kosztu.

KSmarts
źródło
0

Czysty , 64 bajty

import StdEnv
f l=sum[c+6*(x*y+y*z+z*x)+4*(x+y+z)\\[c,x,y,z]<-l]

Wypróbuj online!

Obrzydliwe
źródło
0

Excel, 60 bajtów

Dane wejściowe pobrane z kolumn Ado D, nowy wiersz na prezent. Formuła w dowolnej innej kolumnie.

=SUMPRODUCT(A:A+6*(B:B*C:C+C:C*D:D+B:B*D:D)+4*(B:B+C:C+D:D))
Wernisch
źródło
Możesz upuścić 2 bajty, przenosząc je do Arkuszy Google i upuszczając terminal))
Taylor Scott