+ 1

Stuck in the thinking process - Distribute Evenly

Hi There, I am having an issue wrapping my head around a task. It is about evenly distributing an amount N of candies among the K amount of boxes. I have found similar tasks and solution on the internet, but none of them matches my problem. Here Is the code bit I have already started, which includes the details of the task in the comments. https://www.sololearn.com/compiler-playground/ctBssOtRWBrT I don't need the coding solution, but just a little help on the approach. Thanks to everyone.

8th Oct 2023, 3:16 PM
Blerim
Blerim - avatar
28 Answers
+ 2
If "amount_candy_types = 20", shouldn't length of "candy" is 20 too?
10th Oct 2023, 7:06 PM
Wong Hei Ming
Wong Hei Ming - avatar
+ 1
I think floor division and modulo are in part of the problem. (Just discovery divmod() method and looks great.) The challenge is how we do with the modulo, and how to continue in the next type of candy. Also as JaScript said list is beneficial if combining with comprehension, then we can handle different number of boxes. I don’t have a working solution yet, but this question is fun and I will take a try later.
9th Oct 2023, 11:26 AM
Wong Hei Ming
Wong Hei Ming - avatar
+ 1
Thanks for the help. At this point, I have already created a list containing all the candy. It is looking like this: ['c1', 'c1', 'c1', 'c1', 'c2', 'c2', 'c2', 'c2', 'c3', 'c3'] Now I somehow have to figure out how to distribute them among the amount of boxes.
9th Oct 2023, 7:43 PM
Blerim
Blerim - avatar
+ 1
You are right, sorry. I didn't think it through. I will try to rethink the problem again. THANKS!
10th Oct 2023, 7:18 PM
Blerim
Blerim - avatar
+ 1
Bob_Li, I tried your code. If I change the candy = [2, 1, 4], the result is unexpected.
11th Oct 2023, 7:33 AM
Wong Hei Ming
Wong Hei Ming - avatar
+ 1
Bob_Li, the first time a saw was like below. Example result Box 01: [2, 1, 1] Box 02: [1, 2] Box 03: [1, 1, 1] Somehow OP's changed the code and becomes: Box 01: [c1, c1, c2, c3] Box 02: [c1, c2, c2] Box 03: [c1, c2, c3] Basically they are the same. Using A, B and C for different type of candies will look like below. Box 01: A, A, B, C Box 02: A, B, B Box 03: A, B, C
11th Oct 2023, 8:05 AM
Wong Hei Ming
Wong Hei Ming - avatar
+ 1
Bob_Li, the first time I run it the random test case was empty. I didn't take a look on the code and click run again and again until i found another error. And then I take a look and find what is wrong. Your code is much compact than mine and pythonic. I did had a hard time to follow the code.
11th Oct 2023, 11:00 AM
Wong Hei Ming
Wong Hei Ming - avatar
+ 1
Bob_Li Oh? I only focused on the random case and think randint is to blame (starting from 0). Didn't notice about the indexing as it was hard to track for me...
11th Oct 2023, 2:01 PM
Wong Hei Ming
Wong Hei Ming - avatar
+ 1
Bob_Li When I saw you create the flat list numpy came to my mind, and realised the list can't be transformed properly. I would go for range with steps to fill in one box at a time. It is more readable to me.
11th Oct 2023, 2:26 PM
Wong Hei Ming
Wong Hei Ming - avatar
+ 1
Bob_Li First time I viewed the expected output was represented in number, so I go for number approach. But underneath I used the ABC approach to figure out how to get the expected output and made the divmod() comment.
11th Oct 2023, 2:54 PM
Wong Hei Ming
Wong Hei Ming - avatar
+ 1
Bob_Li, the way of padding produces lots of empty spaces. If changed to: candy_arr.resize(bx * len(candy_arr) // bx + 1) It can reduce the size significantly. And I found it intriguing to put ZERO into candy list. When I first read the description it says: # As input it receives the num. of boxes, candy types and a list with different amount of candy types Meanwhile Blerim's code also include: boxes = 3 amount_candy_types = 3 candy = [4, 4, 2] I thought the program takes 3 inputs, amount_candy_types is a int, but it also can obtain from "candy" which length is 3. I think we were derailed. Type of candy would be ["Chocolate", "Gummy", "Macaron"] If that is the case 0 amount of candy does make sense, but I prefer the min unit is 1 as it is more reasonable. I think we had to let OP to explain in more details...
12th Oct 2023, 4:48 AM
Wong Hei Ming
Wong Hei Ming - avatar
0
Thanks for your code, but unfortunately it is not working when changing the parameters, such as the amount of boxes and the amount of candy ☹ I was able to produce a list containing all the candy: ['c1', 'c1', 'c1', 'c1', 'c2', 'c2', 'c2', 'c2', 'c3', 'c3'] and also was able to create a loop which produces the numbers 0, 3, 6 & 9. I just need somehow to loop through each number of the boxes and punts the amount of the candies based on the above numbers (0,3,6,9) in each box the result would be: Box1: ['c1', 'c1', 'c2', 'c3'] Box2: ['c1', 'c2', 'c2'] Box3: ['c1', 'c2', 'c3'] For my point of view, this solution would be scalable, when the parameters change. THANKS
10th Oct 2023, 3:25 PM
Blerim
Blerim - avatar
0
Sorry for the confusion, but as mentioned in the playground comments, the boxes, the type of candy and the amount of the candy amount are variable, that is why I had mentioned that the provided numbers are just examples. Your code works with the give example numbers perfectly, but when the amounts are changed I get an error. For example: boxes = 5 amount_candy_types = 20 candy = [4, 4, 2, 4, 6] Error message: Traceback (most recent call last): File "./Playground/file0.py", line 47, in <module> while candy[i] > 0: # as long as the candy type is empty IndexError: list index out of range I had similar issues, that is why I have tried a new approach. Thanks you for taking your time with this 👍
10th Oct 2023, 6:58 PM
Blerim
Blerim - avatar
0
Blerim here is my attempt. The code could probably be optimized further... I defaulted the last candy type to 0, since your code seems to be failing that case. https://code.sololearn.com/c9wCfzanMpWx/?ref=app
11th Oct 2023, 1:45 AM
Bob_Li
Bob_Li - avatar
0
Blerim, here is my attempt. And I further expanded to include 2 test cases and 1 random test case. Although I said divmod() maybe useful, I found I didn't use it because the way of my coding. The result is a list of numbers, not your c1, c2 convention, because I don't know is that the question really asked for. However it should be easy to convert into c1, c2 because the numbers are calculated. Solving this puzzle force me to use other function I read about but didn't put in use. And the process is fun. You can take a look if you wish, or run it multiple times to see different result. I also left the debug code for further study. https://code.sololearn.com/cx06f0VXc1f5/?ref=app
11th Oct 2023, 7:25 AM
Wong Hei Ming
Wong Hei Ming - avatar
0
Wong Hei Ming what is the expected result?
11th Oct 2023, 7:43 AM
Bob_Li
Bob_Li - avatar
0
if the candies are distributed in order, shouldn't the bottom result be: Box 01: A A B B C Box 02: A B C Box 03: A B ? oh, I am interpreting the question wrong.... Ok, I think I understand now. I missed this part: "# If possible, there should be the same total number of candy in each box; " The total amount is supposed to be as even as possible.😅 That was why you were tallying the min and max len! I interpreted it as an orderly distribution of candy types. ok, I will work on this.
11th Oct 2023, 8:11 AM
Bob_Li
Bob_Li - avatar
0
Wong Hei Ming ok, I think it's fixed.
11th Oct 2023, 9:46 AM
Bob_Li
Bob_Li - avatar
0
Bob_Li, How strange... candy: [0, 2, 16, 3, 16, 19, 7, 13] # first type has zero candy boxes: 6 candy_types = ['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8'] b1: c1 c2 c2 c3 c4 c4 c4 c5 c5 c5 c6 c7 c7 # why c1 in both b1 and b2 ??? b2: c1 c2 c2 c3 c4 c4 c5 c5 c5 c5 c6 c7 c7 b3: c2 c2 c2 c3 c4 c4 c5 c5 c5 c6 c6 c7 c7 b4: c2 c2 c2 c4 c4 c4 c5 c5 c5 c6 c7 c7 c7 b5: c2 c2 c2 c4 c4 c4 c5 c5 c5 c6 c7 c7 b6: c2 c2 c2 c4 c4 c4 c5 c5 c5 c6 c7 c7 # and where are c8 ??? lengths: b1: 13 b2: 13 b3: 13 b4: 13 b5: 12 b6: 12
11th Oct 2023, 9:57 AM
Wong Hei Ming
Wong Hei Ming - avatar
0
I updated the code to include the total candies in box, it should have an easier time to read the output. Also modify the code to reduce redundant prints statement. https://code.sololearn.com/cmxxJ5pgQlV9/?ref=app
11th Oct 2023, 10:45 AM
Wong Hei Ming
Wong Hei Ming - avatar