Advent Challenge 3: Zeit für die Wiederaufarbeitung der Geschenke!

9

<< Zurück Weiter >>

Leider konnte der Weihnachtsmann die Elfen nicht rechtzeitig fangen! Er muss jetzt wieder Geschenke herstellen. Da die Elfen definitiv keine Sklaven des Weihnachtsmanns sind, muss er die Kosten für die Bezahlung herausfinden.

Herausforderung

Bestimmen Sie anhand einiger Informationen für die Geschenke die Herstellungskosten für alle.

Jedes Geschenk wird in einen Karton gelegt und mit Geschenkpapier umwickelt, ganz am Ende mit einem Band umwickelt. Das Geschenkpapier ist magisch und erfordert keine Überlappung, sodass die Menge des verwendeten Geschenkpapiers genau der Oberfläche der Schachtel entspricht. Alle Geschenke sind rechteckige Prismen, da der Weihnachtsmann sie so kompakter aufbewahren kann. Das Band bewegt sich in alle drei Richtungen (die Länge des zum Umwickeln verwendeten Bandes entspricht also der Summe der drei verschiedenen Umfänge).

Die Gegenwart selbst hat zum Glück bekannte Kosten. Karton kostet 1 USD pro Quadratmeter und Geschenkpapier 2 USD pro Quadratmeter. (Hinweis: Sie können die Oberfläche einfach mit 3: P multiplizieren.) Das Band kostet 1 USD pro Meter.

Formatspezifikationen

Die Eingabe erfolgt als Liste von Geschenken, wobei jedes Geschenk die Kosten des tatsächlichen Artikels und die drei Dimensionen der Geschenkbox enthält. Ihre Ausgabe sollte die erforderlichen Gesamtkosten sein.

Um genau zu sein, die Formel für die Kosten einer einzelnen Gegenwart mit Einzelteilkosten cund Abmessungen x, yund zist c + 6 * (x * y + y * z + z * x) + 4 * (x + y + z).

Testfälle

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

Regeln

  • Standardschlupflöcher gelten
  • Die Eingabe und Ausgabe kann in jedem vernünftigen Format gegeben und präsentiert werden
  • Sie müssen die Eingabe als Liste der Geschenke verwenden, nicht als 4 Listen der Attribute.
  • Dies ist ein , also gewinnt die kürzeste Antwort in Bytes
  • Es werden keine Antworten akzeptiert

Hoffentlich ist diese Herausforderung einfacher als die vorherigen: P.

Hinweis: Ich habe mich für diese Herausforderungsserie von Advent Of Code inspirieren lassen . Ich habe keine Verbindung zu dieser Site

Eine Liste aller Herausforderungen in der Serie finden Sie im Abschnitt "Verknüpft" der ersten Herausforderung hier .

HyperNeutrino
quelle
Haben wir den "zusätzlichen 1 Meter für das Band" inc + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)
Graham
@ Abraham Ja, es stellt sich heraus, dass ich vergessen habe, das hinzuzufügen. Aus den Spezifikationen entfernen.
HyperNeutrino
@cairdcoinheringaahing Entschuldigung für die Verwirrung. Ich habe mich entschlossen, bei der ursprünglichen Idee zu bleiben, und ich habe meine Testfälle bearbeitet, um dies ebenfalls widerzuspiegeln. Vielen Dank!
HyperNeutrino
6
Ich habe diese Reihe von Herausforderungen genossen, aber (zugegebenermaßen nach ein paar Bieren!) Scheint diese nur so, als ob welche Sprache die geschlossene Formel in den wenigsten Bytes ausführen kann, ohne Raum für kreatives Golfen, also in diesem Fall kein + 1 von mir.
Shaggy
1
Was sollte ich dem besonders engen Wähler noch klarstellen, nachdem ich die vorhandenen kommentierten Punkte geklärt habe?
HyperNeutrino

Antworten:

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)

Testfälle

Wie?

Der einzige Trick, der hier verwendet wird, besteht darin, (xy + xz) als x (y + z) zu faktorisieren und die Summe (y + z) im letzten Teil der Formel wiederzuverwenden .

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
quelle
3

Mathematica, 34 Bytes

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

-10 Bytes von @alephalpha

Probieren Sie es online aus!

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

Python 3 , 56 Bytes

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

Probieren Sie es online aus!

  • -2 Bytes danke an Mr. Xcoder!
  • -15 Bytes dank Notjagan!
  • -1 Byte danke an Alix Eisenhardt!
Caird Coinheringaahing
quelle
2

C (gcc) , 104 100 99 93 Bytes

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;}

Probieren Sie es online aus!

Nimmt eine Liste der vorhandenen Attribute (durch vier teilbare Listenlänge) und eine Ganzzahl, die die Anzahl der Geschenke angibt. Gibt die Herstellungskosten aller Geschenke zurück.

Jonathan Frech
quelle
100 Bytes, wenn es nicht erforderlich ist, mehr als eins zu arbeiten, können Sie j = t = 0,
PrincePolka
@ PrincePolka Danke. Laut Konsens muss eine Funktion mehrmals funktionieren, muss also j=t=0bleiben. Ich konnte nicht ganz herausfinden, wie ich die Berechnung neu anordnen sollte, um ein Byte zu sparen. Es wäre hilfreich, wenn Sie mit Ihrem Golfspiel eine vollständige Version des Codes verknüpfen würden.
Jonathan Frech
99 Bytes
PrincePolka
@ PrincePolka Vielen Dank.
Jonathan Frech
1

05AB1E , 17 Bytes

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

Probieren Sie es online aus!

Erläuterung

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
quelle
0

Pyth , 39 Bytes

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

Probieren Sie es online aus!

Übernimmt die Eingabe als Zeichenfolgendarstellung einer verschachtelten Liste und summiert sich über die Kostenformel.

KSmarts
quelle
0

Excel, 60 Bytes

Eingabe aus Spalten Ain D, neue Zeile pro Geschenk. Formel in einer anderen Spalte.

=SUMPRODUCT(A:A+6*(B:B*C:C+C:C*D:D+B:B*D:D)+4*(B:B+C:C+D:D))
Wernisch
quelle
Sie können 2 Bytes löschen, indem Sie dies auf Google Sheets übertragen und das Terminal löschen))
Taylor Scott