Desafio do Advento 3: Hora de remanufaturar os presentes!

9

<< Anterior Próximo >>

Infelizmente, o Papai Noel não foi capaz de pegar os elfos a tempo! Ele tem que voltar a fabricar presentes agora. Como os elfos definitivamente não são escravos do Papai Noel, ele tem que descobrir as despesas de quanto pagá-los.

Desafio

Dadas algumas informações para os presentes, determine o custo de fabricação de todos eles.

Cada presente é colocado em uma caixa de papelão e embrulhado com papel de embrulho, com uma fita enrolada no final. O papel de embrulho é mágico e não requer sobreposição; portanto, a quantidade de papel de embrulho usada é precisamente equivalente à área da superfície da caixa. Todos os presentes são prismas retangulares, porque dessa maneira o Papai Noel pode armazená-los de forma mais compacta. A fita gira nas três direções (portanto, o comprimento da fita usada para a embalagem é igual à soma dos três perímetros diferentes).

O presente em si tem um custo conhecido, felizmente. O papelão custa US $ 1 por metro quadrado e o papel de embrulho custa US $ 2 por metro quadrado. (Dica: você pode multiplicar a área da superfície por 3: P). A fita custa US $ 1 por metro.

Especificações de formato

A entrada será fornecida como uma lista de presentes, onde cada presente contém o custo do item real e as três dimensões da caixa atual. Sua saída deve ser o custo total necessário.

Para ser exacto, a fórmula para o custo de um único presente com custo do artigo ce as dimensões x, ye zéc + 6 * (x * y + y * z + z * x) + 4 * (x + y + z) .

Casos de teste

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

Regras

  • As brechas padrão se aplicam
  • A entrada e saída podem ser fornecidas e apresentadas em qualquer formato razoável
  • Você deve considerar a entrada como uma lista de presentes, e não 4 listas dos atributos.
  • Este é um , então a resposta mais curta em bytes vence
  • Nenhuma resposta será aceita

Espero que este desafio seja mais fácil do que os anteriores: P

Nota: Eu me inspirei para esta série de desafios da Advent Of Code . Não tenho afiliação com este site

Você pode ver uma lista de todos os desafios da série consultando a seção 'Vinculado' do primeiro desafio aqui .

HyperNeutrino
fonte
Perdemos o "1 metro adicional para a fita" emc + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)
Graham
@ Graham Sim, acontece que eu esqueci de adicionar isso. Removendo das especificações.
HyperNeutrino
@cairdcoinheringaahing Desculpe pela confusão. Decidi seguir a ideia original e editei meus casos de teste para refletir isso também. Obrigado!
HyperNeutrino
6
Apreciei essa série de desafios, mas (reconhecidamente, depois de algumas boas cervejas!), Parece que esse idioma pode executar a fórmula fechada com o menor número de bytes, sem espaço para golfe criativo, portanto, neste caso, não + 1 de mim.
Shaggy
11
Para o eleitor próximo após esclarecer os pontos comentados existentes, o que mais devo esclarecer?
HyperNeutrino 4/17/17

Respostas:

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 teste

Como?

O único truque usado aqui é fatorar (xy + xz) como x (y + z) e reutilizar a soma (y + z) na última parte da 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
fonte
3

Mathematica, 34 bytes

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

-10 bytes de @alephalpha

Experimente online!

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

Experimente online!

  • -2 bytes graças ao Sr. Xcoder!
  • -15 bytes graças a notjagan!
  • -1 byte graças a Alix Eisenhardt!
caird coinheringaahing
fonte
2

C (gcc) , 104 100 99 93 bytes

  • Economizou quatro cinco onze bytes graças ao 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;}

Experimente online!

Leva uma lista de atributos presentes (comprimento da lista divisível por quatro) e um número inteiro especificando o número de presentes. Retorna o custo de fabricação de todos os presentes.

Jonathan Frech
fonte
100 bytes , se não é obrigado a trabalhar mais do que você pode raspar de j = t = 0,
PrincePolka
@PrincePolka Obrigado. Por consenso, uma função precisa funcionar várias vezes, portanto, j=t=0precisa permanecer. Não consegui descobrir como reorganizar o cálculo para salvar um byte; ajudaria se você vinculasse a uma versão completa do código com seu golfe implementado.
Jonathan Frech
99 bytes
PrincePolka
@PrincePolka Muito obrigado.
Jonathan Frech
1

05AB1E , 17 bytes

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

Experimente online!

Explicaçã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
Emigna
fonte
0

Pitão , 39 bytes

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

Experimente online!

Recebe a entrada como uma representação de sequência de uma lista aninhada e soma a fórmula de custo.

KSmarts
fonte
0

Limpo , 64 bytes

import StdEnv
f l=sum[c+6*(x*y+y*z+z*x)+4*(x+y+z)\\[c,x,y,z]<-l]

Experimente online!

Furioso
fonte
0

Excel, 60 bytes

Entrada retirada de Colunas Apara D, nova linha por presente. Fórmula em qualquer outra coluna.

=SUMPRODUCT(A:A+6*(B:B*C:C+C:C*D:D+B:B*D:D)+4*(B:B+C:C+D:D))
Wernisch
fonte
Você pode soltar 2 bytes transferindo isso para o Google Sheets e soltando o terminal))
Taylor Scott