code.ashish.me

Atom feed

Recently added: 02 Count Of Subset Sum, 416 Partition Equal Subset Sum, 01 Subset Sum, 518 Coin Change 2, 983 Minimum Cost For Tickets

1103 Distribute Candies To People

/**
 *
 * Ashish Patel
 * e: ashishsushilPatel@gmail.com
 * w: https://ashish.me
 *
 */

/*
 * We distribute some number of candies, to a row of n = num_people
 * people in the following way:
 *
 * We then give 1 candy to the first person, 2 candies to the second
 * We distribute some number of candies, to a row of n = num_people
 * people in the following way:
 *
 * We then give 1 candy to the first person, 2 candies to the second
 * person, and so on until we give n candies to the last person. Then,
 * we go back to the start of the row, giving n + 1 candies to the
 * first person, n + 2 candies to the second person, and so on until
 * we give 2 * n candies to the last person.
 *
 * This process repeats (with us giving one more candy each time, and
 * moving to the start of the row after we reach the end) until we run
 * out of candies.  The last person will receive all of our remaining
 * candies (not necessarily one more than the previous gift).
 *
 * Return an array (of length num_people and sum candies) that represents
 * the final distribution of candies.
 *
 * Example 1:
 *
 * Input: candies = 7, num_people = 4
 * Output: [1,2,3,1]
 * Explanation:
 * On the first turn, ans[0] += 1, and the array is [1,0,0,0]
 * On the second turn, ans[1] += 2, and the array is [1,2,0,0]
 * On the third turn, ans[2] += 3, and the array is [1,2,3,0]
 * On the fourth turn, ans[3] += 1 (because there is only one
 * candy left), and the final array is [1,2,3,1]
 */

function distributeCandiesToPeople(candies, people) {
  let result = new Array(people).fill(0)
  let amount = 1
  let index = 0
  while(candies - amount > 0){
    candies -= amount
    result[index++ % people] += amount++
  }
  result[index++ % people] += candies
  return result
}

test('distribute Candies To People', () => {
  expect(distributeCandiesToPeople(60, 4)).toEqual([15,18,15,12])
  expect(distributeCandiesToPeople(10, 3)).toEqual([5, 2, 3])
  expect(distributeCandiesToPeople(7, 4)).toEqual([1, 2, 3, 1])
})

Created 2020-04-25T01:06:06+00:00 · Edit