Advent Challenge 3 : 선물을 다시 만들 시간입니다!


9

<< 이전 다음 >>

불행하게도, 산타는 시간 내에 엘프를 잡을 수 없었습니다! 그는 이제 선물 제조로 돌아 가야합니다. 엘프는 확실히 산타의 노예가 아니기 때문에 지불해야 할 비용을 계산해야합니다.

도전

선물에 대한 정보가 제공되면 모든 선물의 제조 비용을 결정하십시오.

각 선물은 골판지 상자에 넣고 포장지로 싸서 리본을 맨 끝에 감습니다. 포장지는 마법이어서 겹칠 필요가 없으므로 사용되는 포장지의 양은 상자의 표면적과 정확히 동일합니다. 모든 선물은 직사각형 프리즘입니다. 산타가 더 컴팩트하게 저장할 수 있기 때문입니다. 리본은 세 방향 모두에서 이동합니다 (따라서 래핑에 사용되는 리본의 길이는 세 가지 다른 둘레의 합과 같습니다).

다행스럽게도 현재 자체에는 알려진 비용이 있습니다. 골판지 비용은 평방 미터당 $ 1이고 포장지 비용은 평방 미터당 $ 2입니다. (힌트 : 표면적에 3 : P를 곱하면됩니다). 리본 비용은 미터당 $ 1입니다.

형식 사양

각 선물에 실제 품목의 비용과 선물 상자의 3 차원이 포함 된 선물 목록이 입력됩니다. 출력은 필요한 총 비용이어야합니다.

정확하게는, 상품 비용 단일 본 비용의 수식 c과 치수 x, yz이다 c + 6 * (x * y + y * z + z * x) + 4 * (x + y + z).

테스트 사례

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

규칙

  • 표준 허점 적용
  • 입력 및 출력은 합리적인 형식으로 제공 및 제시 될 수 있습니다.
  • 입력을 속성 목록이 아닌 선물 목록으로 가져와야합니다.
  • 이것은 바이트 단위의 최단 답변이 이깁니다.
  • 응답이 없습니다

바라건대이 도전은 이전의 도전보다 쉽다 : P

참고 : Advent Of Code 에서이 챌린지 시리즈에 대한 영감을 얻었습니다 . 이 사이트와 관련이 없습니다

여기서 첫 번째 도전 과제의 '링크 된'섹션을 보면 시리즈의 모든 도전 과제 목록을 볼 수 있습니다 .


우리의 "리본에 대한 추가 1m"손실이c + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)
그레이엄

그래 @Graham, I 판명이있는 것을 추가하는 것을 잊었다. 사양에서 제거.
HyperNeutrino

@cairdcoinheringaahing 혼란을 드려 죄송합니다. 나는 원래의 아이디어를 고수하기로 결정했고 그것을 반영하기 위해 테스트 케이스를 편집했습니다. 감사!
HyperNeutrino

6
나는이 일련의 도전을 즐기고 있었지만 (확실히 몇 가지 맥주를 마신 후에도) 이것은 창조적 인 골프를위한 공간없이 가장 적은 바이트로 닫힌 수식을 실행할 수있는 언어처럼 보입니다.이 경우에는 + 나에게서 1
얽히고 설킨 Shaggy

1
기존의 의견을 명확히 한 후 추가 투표권 자에게 무엇을 더 명확히해야합니까?
HyperNeutrino

답변:


5

자바 스크립트 (ES6), 58 바이트

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

테스트 사례

어떻게?

여기에서 사용되는 유일한 트릭은 (xy + xz)x (y + z) 로 분해 하고 수식의 마지막 부분에서 합 (y + z) 을 재사용 하는 것입니다.

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 바이트

  • 저장된 다섯 11 개의 바이트 덕분에 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;}

온라인으로 사용해보십시오!

현재 속성 목록 (목록 길이를 4로 나눌 수 있음)과 선물 수를 지정하는 정수를 가져옵니다. 모든 선물의 제조 비용을 반환합니다.


100 바이트 가 하나 이상의 작업에 필요하지 않다면 당신은, J = t = 0의 면도를 할 수 있습니다
PrincePolka


@PrincePolka 감사합니다. 합의에 따라 기능은 여러 번 작동해야하므로 j=t=0그대로 있어야합니다. 바이트를 저장하기 위해 계산을 다시 정렬하는 방법을 알 수 없었습니다. 골프가 구현 된 코드의 전체 버전에 연결하면 도움이됩니다.
Jonathan Frech


@PrincePolka 감사합니다.
Jonathan Frech

1

05AB1E , 17 바이트

vyćsO4*y¦æ2ùPO6*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



0

Excel, 60 바이트

열에서 촬영 입력 AD존재하는 당 새 행. 다른 열의 공식.

=SUMPRODUCT(A:A+6*(B:B*C:C+C:C*D:D+B:B*D:D)+4*(B:B+C:C+D:D))

이것을 Google 스프레드 시트로 전송하고 터미널을 삭제하여 2 바이트를 삭제할 수 있습니다.))
Taylor Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.