배경
프랑스에서, 그리고 아마도 유럽 연합 (EU), 판매 가능한 음식의 나머지 있어야 에, 포장에 그것을 구성하는 성분 목록 무게 비율 내림차순를 . 그러나 성분이 표지의 텍스트 나 이미지로 강조 표시 되지 않는 한 정확한 백분율을 표시 할 필요는 없습니다 .
예를 들어 포장에 큰 빨간 토마토와 아름다운 바질 잎만을 보여주는 바질 토마토 소스에는 다음과 같은 표시가 있습니다.
성분 : 토마토 80 %, 양파 조각, 바질 1.4 %, 바다 소금, 으깬 마늘, 생 지팡이 설탕, 엑스트라 버진 올리브 오일, 후추.
사치스러운 소리로 들리지만… 얼마나 많은 양파를 먹을 까요?
도전
내림차순으로 가중치 백분율 목록이 주어지면 결국 불완전한 경우 레시피에서 찾을 수있는 최소 및 최대 가중치 백분율 의 전체 목록을 출력합니다 .
- 함수 또는 전체 프로그램을 작성할 수 있습니다.
- 입력은 임의의 적절한 형식 (예를 들면, 숫자 나 문자열리스트 어레이) 일 수있다. 분수 값은 소수점 이하 1 자리까지 지원해야합니다. 누락 된 중량 백분율은 일관되고 모호하지 않은 방식으로 표시 될 수 있습니다 (예
0
:'?'
또는null
). 당신은 입력이 항상 올바른 조리법에 연결됩니다 (가정 수[70]
와[∅, ∅, 50]
예를 들어, 무효). - 출력은 어떤 적당한 형태 (예를 들면, 최소 및 최대 무게 백분율 또는 이중선의 단일리스트 모두 하나 개의 어레이) 일 수있다. 최소 및 최대 비율은 어떤 순서로 (가능
[min, max]
하고[max, min]
모두 허용). 정확한 중량 백분율은 다른 백분율과 다르게 처리 될 필요가 없으며 최소값과 최대 값이 동일하게 표시 될 수 있습니다.
코드 골프에 대한 표준 규칙이 적용됩니다. 코드를 입력하는 동안 파스타 접시가 식고 있으므로 가장 짧은 제출이 승리합니다.
예
이 문제는 언뜻보기에는 어렵 기 때문에 다음은 몇 가지 경우에 대한 단계별 해결 방법입니다.
[40, ∅, ∅]
각각 x
과 y
두 개의 누락 백분율을 호출합시다 .
- 그것은 첫 번째 성분의 40 %에서 나오기 때문에 40 %
x
보다 높을 수 없습니다.[40, [?, 40], [?, ?]]
- 누락 된 두 백분율의 합은 항상 60 %입니다. 결과적으로 :
- 경우
x
그 소요 최대 값 다음y
의 필요 최소한 = 20 % 40 % - 60 % 따라서 값.[40, [?, 40], [20, ?]]
- 경우
x
는 필요 최소한의 값을, 다음y
의 소요 최대 값입니다. 그러나x
보다 작을 수 없으므로이y
경우x
=y
= 60 % / 2 = 30 %입니다.[40, [30, 40], [20, 30]]
- 경우
[70, ∅, ∅, 5, ∅]
의 각각 부르 자 x
, y
그리고 z
세없는 비율.
- 에 대한 최소 및 최대 백분율
z
은 반드시 0 %에서 5 % 사이입니다.z
잠시 동안 = 0 %로 가정하자 . 누락 된 두 백분율의 합은 항상 25 %입니다. 결과적으로 :[70, [?, ?], [?, ?], 5, [0, 5]]
- 경우
y
그 걸리는 최소 값 5 %, 다음x
의 필요 최대 = 20 % 5 % - 25 % 따라서 값.[70, [?, 20], [5, ?], 5, [0, 5]]
- 경우
y
의 소요 최대 값을, 다음x
의 필요 최소한의 값입니다. 그러나x
보다 작을 수 없으므로이y
경우x
=y
= 25 % / 2 = 12.5 %입니다.[70, [12.5, 20], [5, 12.5], 5, [0, 5]]
- 경우
z
= 5 % 라고 가정하면 모든 것이 정상인지 확인합시다 . 누락 된 두 백분율의 합은 항상 20 %입니다. 결과적으로 :- 경우
y
그 걸리는 최소 값 5 %, 다음x
의 필요 최대 = 15 % 5 % - 20 % 따라서 값. 이 사례는 이미 이전에 계산 된 범위에 포함되어 있습니다. - 경우
y
의 소요 최대 값을, 다음x
의 필요 최소한의 값입니다. 그러나x
보다 작을 수 없으므로이y
경우x
=y
= 20 % / 2 = 10 %입니다. 이 사례는에 대해 이전에 계산 된 범위에 이미 포함되어y
있지만에 대해서는 포함되어 있지 않습니다x
.[70, [10, 20], [5, 12.5], 5, [0, 5]]
- 경우
테스트 사례
Input: [∅]
Output: [100]
Input: [70, 30]
Output: [70, 30]
Input: [70, ∅, ∅]
Output: [70, [15, 30], [0, 15]]
Input: [40, ∅, ∅]
Output: [40, [30, 40], [20, 30]]
Input: [∅, ∅, 10]
Output: [[45, 80], [10, 45], 10]
Input: [70, ∅, ∅, ∅]
Output: [70, [10, 30], [0, 15], [0, 10]]
Input: [70, ∅, ∅, 5, ∅]
Output: [70, [10, 20], [5, 12.5], 5, [0, 5]]
Input: [30, ∅, ∅, ∅, 10, ∅, ∅, 5, ∅, ∅]
Output: [30, [10, 25], [10, 17.5], [10, 15], 10, [5, 10], [5, 10], 5, [0, 5], [0, 5]]
[40, ∅, ∅]
하고 [70, ∅, ∅, 5, ∅]
좀 더 명확하게 메이크업 것들에. 테스트 사례를 보지 않고 당면한 과제는 분명하지만, 지금은 그렇지 않습니다. 내가 그것을 올바르게 이해한다면 [40, ∅, ∅]
: 100 %에는 60 개가 더 필요 하며이 두 개로 나뉩니다 ∅
. 첫 번째 ∅
는 30 이상이어야합니다 (그렇지 않으면 두 번째 ∅
는 위에있을 것이므로 순서가 맞지 않아야합니다). 또한 위에있을 수 없으므로 40
첫 번째 ∅
가 [30,40]
이고 두 번째가가됩니다 [(100-40-40=)20, (100-40-30=)30]
.
[min,max]
/ [max,min]
또는 혼합 허용됩니까?
[min,max]
하고 [max,min]
경계선이 허용되지만 모호한 결과로 이어질 수 없으므로 괜찮습니다.
[70, 12, 11, 5, 2]
두 번째 예에서 왜 효과가 없습니까? 작동하는 경우 최소값은 x
보다 작습니다 12.5
.