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í .


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




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.


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


@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

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.



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

Puede soltar 2 bytes transfiriendo esto a Hojas de cálculo de Google y soltando el terminal))
Taylor Scott
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.