내 날개 순서를 최적화


17

이 트윗 은 중식당 1의 날개 주문 가능 목록입니다 :

날개 메뉴

피자를 주문할 때 나는 보통 어떤 크기가 간단한 계산 인 최고의 피자 가격 비율을 제공하는지 계산합니다. 그러나이 식당에서 주문 가격을 최소화하는 것은 간단한 일이 아니므로 다음 주문을 준비하고 싶습니다.

도전

이상의 정수가 주어지면 태스크는 가격 (전체적으로 가장 저렴한)과 거래 수를 최소화하는 하나의 가능한 주문을 리턴하는 것입니다.4

내가 날개 를 주문한다면 , 최고의 거래 가격은 이라는 것이 밝혀졌습니다 . 그러나 해당 금액을 지불하는 여러 주문이 있습니다.100$111.20

[50,50],[25,25,50],[25,25,25,25]

첫 번째 주문은 최소량의 거래 ( )를 사용하므로 결과는 다음과 같습니다 .2[50,50]

규칙

  • 입력은 정수n4
  • 결과는 까지 합계 하고 주문 가격을 최소화하는 주문 크기의 목록 / 배열 / ...입니다.
    • 가능한 모든 주문을 반품하도록 선택할 수 있습니다

테스트 케이스

4 -> [4]  (4.55)
23 -> [23]  (26.10)
24 -> [6,18],[9,15],[12,12]  (27.20)
31 -> [6,25]  (34.60)
32 -> [4,28],[6,26],[7,25]  (35.75)
33 -> [4,29],[5,28],[6,27],[7,26],[8,25]  (36.90)
34 -> [6,28],[9,25]  (38.00)
35 -> [35]  (39.15)
125 -> [125]  (139.00)
200 -> [25,50,125]  (222.40)
201 -> [26,50,125]  (223.55)
250 -> [125,125]  (278.00)
251 -> [26,50,50,125]  (279.15)
418 -> [15,28,125,125,125],[18,25,125,125,125]  (465.20)
1001 -> [26,50,50,125,125,125,125,125,125,125]  (1113.15)
12345 -> [15,80,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125],[25,70,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125],[45,50,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125]  (13728.10)

참고 : 이을 testcases 나열 모든 가격을 포함하여 가능한 출력 만 출력이 필요하고 하나 당신이있어 하지 가격은 출력에 필요한!


1 : 여기 에서 데이터를 CSV로 찾을 수 있습니다 .


3
진짜 질문은 누가 200 개 또는 100 개의 날개를 주문 하는가입니다. ...
Outgolfer Erik

2
@Quintec : 왜 더 많은 테스트 케이스가 필요합니까?
ბიმო

1
가격을 최소화하기 만하면되기 때문에 두 가지 답변이 요구 사항을 잘못 해석했습니다. 가격과 거래의 수를 최소화하기 때문에 그것은 가치가 더 명시 적으로 요구 사항을 편집 모호한 (최저 가격과 방법에서 사용할 수있는 거래의 가장 낮은 번호 또는 거래의 가장 낮은 번호의 방법에서 가능한 최저 가격을) 것입니다
trichoplax


1
것을 알았습니다.n23120(68n3)25<n<=5025n25n<297080125

답변:


7

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

순서를 공백으로 구분 된 문자열로 반환합니다.

f=n=>n?(x=n>128|n==125?125:n>50?n<54?25:n-70?302256705>>n-80&n>79&n<109?80:50:n:n-24&&n-49?n<31|n%5<1?n:25:9)+' '+f(n-x):''

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

어떻게?

n

n>128=125

125129125

125<<1294

n<31

n<31n=242×1218+615+99

31n50

25

  • n5
  • =4940+928+219

5153

504252×26n=5225+27

54n128n125

50

  • n=70
  • n{80,86,89,92,98,105,108}8080108

    10010000001000001001001000001(2)=302256705(10)


4

자바 스크립트 (Node.js를) , 112 (108) 106 105 바이트

f=n=>n?(x=n>128|n==125?125:n>53&n!=70?1629>>n/3+6&n<99==n%3/2?80:50:~n%25?n>30&&n%5?25:n:9)+' '+f(n-x):''

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

Arnauld의 답변에서 최적화

차이점

  • 51≤n≤53이 31≤n≤50으로 병합 됨 (8 바이트 저장)
  • 비트 맵을 다시 작성하십시오 (3 바이트 저장).
  • 일부 논리 재 배열 ( 4 6 7 바이트 저장)

2

망막 0.8.2 , 160 155 바이트

.+
$*
{`\b(1{80}(?=((111){2,6}|1{25}|1{28})?$)|1{70}$|1{9}(?=.{15}$|.{40}$)|(1{5}){6,9}$|1{26,29}$|1{4,23}$|1{125}|1{50}|1{25})+$
$1,$&
(1+),\1(1*)$
$.1,$2

.+
$*

단항으로 변환합니다.

{`

더 이상 거래를 구입할 수 없을 때까지 반복하십시오.

{`\b(1{80}(?=((111){2,6}|1{25}|1{28})?$)|1{70}$|1{9}(?=.{15}$|.{40}$)|(1{5}){6,9}$|1{26,29}$|1{4,23}$|1{125}|1{50}|1{25})+$
$1,$&

거래 구매 방법을 찾고 거래 중 하나를 캡처하고 복제하십시오.

(1+),\1(1*)$
$.1,$2

거래는 다음 조건에서 구매합니다.

1{80}(?=((111){2,6}|1{25}|1{28})?$)

날개가 0, 6, 9, 12, 15, 18, 25 또는 28 개인 경우 80 개의 날개를 구입하십시오.

1{70}$

우리가 필요한 전부라면 70 개의 날개를 구입하십시오.

1{9}(?=.{15}$|.{40}$)

날개가 15 개 또는 40 개이면 9 개의 날개를 구입하십시오.

(1{5}){6,9}$

이것이 필요한 경우 30, 35, 40 또는 45 개의 날개를 구입하십시오.

1{26,29}$

이것이 필요한 경우 26, 27, 28 또는 29 개의 날개를 구입하십시오.

1{4,23}$

그것이 우리에게 필요한 전부라면 4 ~ 23 개의 날개를 구입하십시오.

1{125}|1{50}|1{25}

가능하면 더 많은 날개를 구입할 수 있다면 125, 50 또는 25 개의 날개를 구입하십시오. 정확한 구매를 먼저 테스트 할 수 있도록 변경이 끝날 때 이러한 옵션이 제공됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.