23
1
You are going to participate in a gameshow. One of the challenges works as follows:
- The first room contains a large number of identical balls.
- The second room contains a series of chutes, each of which has a sensor which counts how many balls have been placed in it. A ball which is placed in a chute cannot then be recovered.
- Each chute will trigger after a certain number of balls (its trigger count) have been placed into it. When it triggers it flashes lights, makes a noise, and leaves you in no doubt that it has triggered.
- You must trigger
N
chutes to continue to the next challenge. - You know the trigger counts, but not the correspondence between count and chute.
- You have one opportunity to take balls from the first room into the second. Once you put a ball into a chute, you cannot go back for more balls.
- Each ball which you take deducts money from the jackpot.
Obviously you want to ensure that you will pass the challenge, but you want to minimise the jackpot money loss. Write a program, function, verb, etc. to tell you how many balls you need.
Example
Suppose the trigger counts are 2, 4, and 10, and you need to trigger 2 chutes to pass. There is a strategy to pass with 10 balls: place up to 4 balls in the first chute, up to 4 balls in the second chute, and up to 4 balls in the third chute. Since one of the three chutes will trigger after only 2 balls, you only use a total of 10. There is no strategy which is guaranteed to work with fewer than 10, so that is the correct output.
Input
The input consists of an array of integer trigger counts and a integer giving the number of chutes to trigger. You may take the two inputs in either order, and if needed you may take a third input with the length of the array.
You may assume that all of the inputs are greater than zero, and that the number of chutes which must be triggered does not exceed the number of chutes.
You may also assume that the counts are sorted (ascending or descending), as long as you state that clearly in your answer.
Output
The output should be a single integer, giving the number of balls required by the optimum strategy.
Test cases
Format: N counts solution
1 [2 4 10] 6
2 [2 4 10] 10
3 [2 4 10] 16
1 [3 5 5 5 5 5 5 5 5 5] 5
2 [1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 8 11] 8
2 [1 2 6 6 6 6 6 6 6 10] 16
2 [1 2 3 3 4 4 6 6 6 11] 17
3 [1 2 3 4 5 5 6] 16
3 [2 4 7 7 7 7 7 7 7] 21
5 [1 2 2 3 3 3 3 3 5 9 9 11] 27
2 [5 15 15] 25
1 [4 5 15] 10
3 [1 4 4 4] 10
2 [1 3 4] 6
2 [1 3 3 8] 8
Warning: don't attempt to ninja! – Erik the Outgolfer – 2017-07-10T18:53:52.510
1Can you please explain why the last test case gives 10? Shoudn't one place at least 4 in each in order to make sure at least one triggers? I'm probably too dumb and didn't read the question well enough, but I don't get it. – Mr. Xcoder – 2017-07-10T19:23:30.310
Place up to 5 in each of them – H.PWiz – 2017-07-10T19:26:34.723
@H.PWiz
5 * 3 - 1
gives 14 to me :/ – Mr. Xcoder – 2017-07-10T19:28:11.5002@Rod You would only need to place 5 in two of them before one was guaranteed to trigger, 5*2 = 10 – H.PWiz – 2017-07-10T19:29:13.200
3@H.PWiz Thanks, now got it. The challenge seems far more complicated now.... – Mr. Xcoder – 2017-07-10T19:30:42.073
If one places 5 two times, but one triggers at 4, you actually use
5+4=9
balls, right? – Mr. Xcoder – 2017-07-10T19:35:01.7831@Mr.Xcoder, yes, but you have to be certain of succeeding in the worst case. – Peter Taylor – 2017-07-10T19:35:21.407
@Mr.Xcoder: if the first one you try is the 15, you need 5 balls to find that out. That leaves you the 5 and the 4 so you need another 5 balls to guarantee that your next pick will be triggered. – Shaggy – 2017-07-10T20:29:47.980
@H.PWiz That's not why 10 are required. Suppose we start by adding balls to chutes one at a time, and also suppose that whenever we might finish earlier by guessing the right chute, we always guess the wrong one. We start by putting 2 in each, since we know one chute will trigger after 2. But we happen to pick the 2 chute last. When it triggers, we know that one of the remaining chutes only needs 2 more. So we put 2 more in the 10, because we guess wrong. Then we put 2 more in the 4, and it triggers. So (2+2+2)+(2+2) = 10 total balls in the worst case. – Ray – 2017-07-10T22:13:45.947
I understand, I think I just didn't explain my thoughts correctly, thanks for the detailed explanation anyway. I thought of it as add 5 to one, if it doesn't trigger, add 5 to one of the others causing it to trigger. Or, if the first one triggers after adding 5, you are already done. – H.PWiz – 2017-07-10T22:20:15.067