Advent Challenge 3: Час переробляти подарунки!


9

<< Попередня Наступна >>

На жаль, Санта не зміг вчасно зловити ельфів! Він повинен повернутися до виготовлення подарунків зараз. Оскільки ельфи, безумовно, не є рабами Санта-Клауса, він повинен з'ясувати витрати, скільки їх заплатити.

Виклик

Давши деяку інформацію для подарунків, визначте вартість виготовлення всіх.

Кожен подарунок кладеться в картонну коробку і обмотується обгортковим папером, навколо нього обертається стрічка в самому кінці. Пакувальний папір магічний і не вимагає перекриття, тому кількість використовуваного обгорткового паперу точно еквівалентна площі поверхні коробки. Усі подарунки мають прямокутні призми, тому що Санта може зберігати їх більш компактно. Стрічка проходить навколо у всіх трьох напрямках (тому довжина стрічки, яка використовується для обгортання, дорівнює сумі трьох різних периметрів).

Сам подарунок, на щастя, має відому ціну. Картон коштує 1 долар за квадратний метр, а обгортковий папір коштує 2 долари за квадратний метр. (Підказка: Ви можете просто помножити площу поверхні на 3: P). Стрічка коштує 1 долар за метр.

Технічні характеристики формату

Вхід буде подано у вигляді списку подарунків, де кожен подарунок містить вартість фактичного товару та три виміри цього вікна. Ваш вихід повинен бути загальною необхідною вартістю.

Щоб бути точним, то формула для вартості одного даний з вартістю елемента cі розмірів x, yі 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 Так, виявляється, я забув додати це. Видалення із специфікацій.
HyperNeutrino

@cairdcoinheringaahing Вибачте за плутанину. Я вирішив дотримуватися оригінальної ідеї, і я відредагував свої тестові приклади, щоб також це відобразити. Дякую!
HyperNeutrino

6
Я насолоджувався цією низкою викликів, але (правда, після декількох хороших сортів пива!) Цей лише здається, яка мова може виконати закриту формулу в найменших байтах, не маючи місця для творчого гольфу, тому, в цьому випадку, немає + 1 від мене.
Кудлатий

1
Після того, як я уточнив наявні коментовані моменти, що я маю ще більше, я маю уточнити?
HyperNeutrino

Відповіді:


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 байт

  • Збережено чотири п'ять одинадцять байтів завдяки 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;}

Спробуйте в Інтернеті!

Візьме список присутніх атрибутів (довжина списку, що ділиться на чотири) та ціле число із зазначенням кількості подарунків. Повертає вартість виготовлення всіх подарунків.


100 байт, якщо не потрібно працювати більше, ніж один, ви можете поголити j = t = 0,
PrincePolka


@PrincePolka Дякую Згідно консенсусу, функція повинна працювати кілька разів, тому j=t=0вона повинна залишатися. Я не міг зовсім зрозуміти, як переставити обчислення, щоб зберегти байт; Це допоможе, якщо ви зв’яжете повну версію коду з реалізованим вашим гольфом.
Джонатан Фрех


@PrincePolka Дякую велике
Джонатан Фрех

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 байт

Введення даних, взятих із стовпців 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))

Ви можете скинути 2 байти, перенісши це в Google Sheets і скинувши термінал))
Тейлор Скотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.