Advent Challenge 3: Il est temps de reconditionner les cadeaux!

9

<< Précédent Suivant >>

Malheureusement, le Père Noël n'a pas pu attraper les elfes à temps! Il doit maintenant recommencer à fabriquer des cadeaux. Étant donné que les elfes ne sont certainement pas des esclaves du Père Noël, il doit déterminer les dépenses pour combien les payer.

Défi

Étant donné certaines informations pour les cadeaux, déterminez le coût de fabrication de chacun d'eux.

Chaque cadeau est placé dans une boîte en carton et emballé avec du papier d'emballage, avec un ruban enroulé autour à la fin. Le papier d'emballage est magique et ne nécessite aucun chevauchement, de sorte que la quantité de papier d'emballage utilisée est précisément équivalente à la surface de la boîte. Tous les cadeaux sont des prismes rectangulaires car de cette façon, le Père Noël peut les stocker de manière plus compacte. Le ruban circule dans les trois directions (la longueur du ruban utilisé pour l'emballage est donc égale à la somme des trois périmètres différents).

Le présent lui-même a heureusement un coût connu. Le carton coûte 1 $ le mètre carré et le papier d'emballage coûte 2 $ le mètre carré. (Astuce: vous pouvez simplement multiplier la surface par 3: P). Le ruban coûte 1 $ par mètre.

Spécifications de format

L'entrée sera donnée sous la forme d'une liste de cadeaux où chaque cadeau contient le coût de l'article réel et les trois dimensions de la boîte actuelle. Votre production doit correspondre au coût total requis.

Pour être exact, la formule pour le coût d'un seul présent avec coût de l' article cet les dimensions x, yet zest c + 6 * (x * y + y * z + z * x) + 4 * (x + y + z).

Cas de test

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

Règles

  • Les échappatoires standard s'appliquent
  • L'entrée et la sortie peuvent être données et présentées dans n'importe quel format raisonnable
  • Vous devez prendre l'entrée comme une liste de cadeaux, pas 4 listes d'attributs.
  • Ceci est un , donc la réponse la plus courte en octets l'emporte
  • Aucune réponse ne sera acceptée

J'espère que ce défi est plus facile que les précédents: P

Remarque: je me suis inspiré de cette série de défis d' Advent Of Code . Je n'ai aucune affiliation avec ce site

Vous pouvez voir une liste de tous les défis de la série en consultant la section 'Linked' du premier défi ici .

HyperNeutrino
la source
Avons-nous perdu le "1 mètre supplémentaire pour le ruban" dansc + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)
Graham
@Graham Ouais, il s'avère que j'ai oublié d'ajouter cela. Suppression des spécifications.
HyperNeutrino
@cairdcoinheringaahing Désolé pour la confusion. J'ai décidé de m'en tenir à l'idée originale et j'ai modifié mes cas de test pour refléter cela également. Merci!
HyperNeutrino du
6
J'ai apprécié cette série de défis mais (certes, après quelques bonnes bières!), Celui-ci semble juste quel langage peut exécuter la formule fermée dans le moins d'octets sans aucune place pour un golf créatif, donc, dans ce cas, non + 1 de moi.
Shaggy
1
À l'électeur très proche après avoir clarifié les points commentés existants, que dois-je clarifier de plus?
HyperNeutrino

Réponses:

5

JavaScript (ES6), 58 octets

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

Cas de test

Comment?

La seule astuce utilisée ici est de factoriser (xy + xz) en x (y + z) et de réutiliser la somme (y + z) dans la dernière partie de la formule.

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
la source
3

Mathematica, 34 octets

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

-10 octets de @alephalpha

Essayez-le en ligne!

J42161217
la source
Tr[#+6#2(+##3)+6##3+4(+##2)&@@@#]&
alephalpha
2

Python 3 , 56 octets

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

Essayez-le en ligne!

  • -2 octets grâce à M. Xcoder!
  • -15 octets grâce à notjagan!
  • -1 octet merci à Alix Eisenhardt!
caird coinheringaahing
la source
2

C (gcc) , 104 100 99 93 octets

  • Enregistré quatre cinq onze octets grâce à 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;}

Essayez-le en ligne!

Prend une liste d'attributs présents (longueur de liste divisible par quatre) et un entier spécifiant le nombre de cadeaux. Renvoie le coût de fabrication de tous les cadeaux.

Jonathan Frech
la source
100 octets s'il n'est pas nécessaire de travailler plus d'un, vous pouvez raser de j = t = 0,
PrincePolka
@PrincePolka Merci. Par consensus, une fonction doit fonctionner plusieurs fois, elle j=t=0doit donc rester. Je n'arrivais pas à comprendre comment réorganiser le calcul pour enregistrer un octet; il serait utile que vous vous connectiez à une version complète du code avec votre golf implémenté.
Jonathan Frech
99 octets
PrincePolka
@PrincePolka Merci beaucoup.
Jonathan Frech
1

05AB1E , 17 octets

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

Essayez-le en ligne!

Explication

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
la source
0

Pyth , 39 octets

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

Essayez-le en ligne!

Prend l'entrée comme une représentation sous forme de chaîne d'une liste imbriquée et additionne la formule de coût.

KSmarts
la source
0

Excel, 60 octets

Entrée tirée des colonnes Avers D, nouvelle ligne par cadeau. Formule dans toute autre colonne.

=SUMPRODUCT(A:A+6*(B:B*C:C+C:C*D:D+B:B*D:D)+4*(B:B+C:C+D:D))
Wernisch
la source
Vous pouvez supprimer 2 octets en le transférant vers Google Sheets et en supprimant le terminal))
Taylor Scott