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 .


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()




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.


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,


@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

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.



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

Możesz upuścić 2 bajty, przenosząc je do Arkuszy Google i upuszczając terminal))
Taylor Scott
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.