Advent Challenge 3: ¡Es hora de refabricar los regalos!

9

<< Anterior Siguiente >>

¡Desafortunadamente, Santa no pudo atrapar a los elfos a tiempo! Tiene que volver a fabricar regalos ahora. Dado que los elfos definitivamente no son esclavos de Santa, tiene que calcular los gastos de cuánto pagarles.

Desafío

Dada alguna información para los regalos, determine el costo de fabricación de todos ellos.

Cada regalo se coloca en una caja de cartón y se envuelve con papel de regalo, con una cinta envuelta al final. El papel de regalo es mágico y no requiere superposición, por lo que la cantidad de papel de regalo utilizada es exactamente equivalente al área de superficie de la caja. Todos los regalos son prismas rectangulares porque de esa manera Santa puede almacenarlos de manera más compacta. La cinta gira en las tres direcciones (por lo que la longitud de la cinta utilizada para envolver es igual a la suma de los tres perímetros diferentes).

El presente en sí tiene un costo conocido, afortunadamente. El cartón cuesta $ 1 por metro cuadrado y el papel de regalo cuesta $ 2 por metro cuadrado. (Sugerencia: puede multiplicar el área de la superficie por 3: P). La cinta cuesta $ 1 por metro.

Especificaciones de formato

La entrada se dará como una lista de regalos donde cada regalo contiene el costo del artículo real y las tres dimensiones de la caja de regalo. Su salida debe ser el costo total requerido.

Para ser exactos, la fórmula para el costo de un solo presente con costo del artículo cy dimensiones x, yy zes c + 6 * (x * y + y * z + z * x) + 4 * (x + y + z).

Casos de prueba

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

Reglas

  • Se aplican lagunas estándar
  • La entrada y la salida pueden darse y presentarse en cualquier formato razonable
  • Debe tomar la entrada como una lista de regalos, no 4 listas de los atributos.
  • Este es un , por lo que gana la respuesta más corta en bytes
  • No se aceptarán respuestas.

Esperemos que este desafío sea más fácil que los anteriores: P

Nota: Me inspiré para esta serie de desafíos de Advent Of Code . No estoy afiliado a este sitio

Puede ver una lista de todos los desafíos de la serie mirando la sección 'Vinculados' del primer desafío aquí .

Hiperneutrino
fuente
¿Hemos perdido el "1 metro adicional para la cinta" enc + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)
Graham
@Graham Sí, resulta que olvidé agregar eso. Eliminar de las especificaciones.
HyperNeutrino
@cairdcoinheringaahing Perdón por la confusión. Decidí seguir con la idea original y he editado mis casos de prueba para reflejar eso también. ¡Gracias!
HyperNeutrino
66
He estado disfrutando de esta serie de desafíos pero (¡lo admito, después de unas buenas cervezas!) Parece que este idioma puede ejecutar la fórmula cerrada en la menor cantidad de bytes sin espacio para el golf creativo, por lo que, en este caso, no + 1 de mi parte.
Shaggy
1
Para el votante cercano adicional después de aclarar los puntos comentados existentes, ¿qué más debo aclarar?
HyperNeutrino

Respuestas:

5

JavaScript (ES6), 58 bytes

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

Casos de prueba

¿Cómo?

El único truco utilizado aquí es factorizar (xy + xz) como x (y + z) y reutilizar la suma (y + z) en la última parte de la fórmula.

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

Mathematica, 34 bytes

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

-10 bytes de @alephalpha

Pruébalo en línea!

J42161217
fuente
Tr[#+6#2(+##3)+6##3+4(+##2)&@@@#]&
alephalpha
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)

Pruébalo en línea!

  • -2 bytes gracias al Sr. Xcoder!
  • -15 bytes gracias a notjagan!
  • -1 byte gracias a Alix Eisenhardt!
caird coinheringaahing
fuente
2

C (gcc) , 104 100 99 93 bytes

  • Ahorró cuatro cinco once bytes gracias a 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;}

Pruébalo en línea!

Toma una lista de atributos presentes (longitud de la lista divisible por cuatro) y un número entero que especifica el número de regalos. Devuelve el costo de fabricación de todos los regalos.

Jonathan Frech
fuente
100 bytes si no es necesario para trabajar más de uno, puede afeitarse de j = t = 0,
PrincePolka
@PrincePolka Gracias. Por consenso, una función tiene que funcionar varias veces, por lo que j=t=0debe permanecer. No pude entender cómo reorganizar el cálculo para guardar un byte; Sería útil si se vincula a una versión completa del código con su golf implementado.
Jonathan Frech
99 bytes
PrincePolka
@PrincePolka Muchas gracias.
Jonathan Frech
1

05AB1E , 17 bytes

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

Pruébalo en línea!

Explicación

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

Pyth , 39 bytes

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

Pruébalo en línea!

Toma datos como una representación de cadena de una lista anidada y suma la fórmula de costo.

KSmarts
fuente
0

Excel, 60 bytes

Entrada tomada de columnas Aa D, nueva fila por presente. Fórmula en cualquier otra columna.

=SUMPRODUCT(A:A+6*(B:B*C:C+C:C*D:D+B:B*D:D)+4*(B:B+C:C+D:D))
Wernisch
fuente
Puede soltar 2 bytes transfiriendo esto a Hojas de cálculo de Google y soltando el terminal))
Taylor Scott