--- title: Department Numbers id: 59f40b17e79dbf1ab720ed7a challengeType: 5 forumTopicId: 302249 --- ## Description
There is a highly organized city that has decided to assign a number to each of their departments: Each department can have a number between 1 and 7 (inclusive). The three department numbers are to be unique (different from each other) and must add up to the number 12. The Chief of the Police doesn't like odd numbers and wants to have an even number for his department.
## Instructions
Write a program which outputs all valid combinations as an array. ```js [2, 3, 7] [2, 4, 6] [2, 6, 4] [2, 7, 3] [4, 1, 7] [4, 2, 6] [4, 3, 5] [4, 5, 3] [4, 6, 2] [4, 7, 1] [6, 1, 5] [6, 2, 4] [6, 4, 2] [6, 5, 1] ```
## Tests
```yml tests: - text: combinations should be a function. testString: assert(typeof combinations === 'function'); - text: combinations([1, 2, 3], 6) should return an Array. testString: assert(Array.isArray(combinations([1, 2, 3], 6))); - text: combinations([1, 2, 3, 4, 5, 6, 7], 12) should return an array of length 14. testString: assert(combinations(nums, total).length === len); - text: combinations([1, 2, 3, 4, 5, 6, 7], 12) should return all valid combinations. testString: assert.deepEqual(combinations(nums, total), result); ```
## Challenge Seed
```js function combinations(possibleNumbers, total) { return true; } ```
### After Test
```js const nums = [1, 2, 3, 4, 5, 6, 7]; const total = 12; const len = 14; const result = [ [2, 3, 7], [2, 4, 6], [2, 6, 4], [2, 7, 3], [4, 1, 7], [4, 2, 6], [4, 3, 5], [4, 5, 3], [4, 6, 2], [4, 7, 1], [6, 1, 5], [6, 2, 4], [6, 4, 2], [6, 5, 1] ]; ```
## Solution
```js function combinations(possibleNumbers, total) { let firstNumber; let secondNumber; let thridNumber; const allCombinations = []; for (let i = 0; i < possibleNumbers.length; i += 1) { firstNumber = possibleNumbers[i]; if (firstNumber % 2 === 0) { for (let j = 0; j < possibleNumbers.length; j += 1) { secondNumber = possibleNumbers[j]; if (j !== i && firstNumber + secondNumber <= total) { thridNumber = total - firstNumber - secondNumber; if (thridNumber !== firstNumber && thridNumber !== secondNumber && possibleNumbers.includes(thridNumber)) { allCombinations.push([firstNumber, secondNumber, thridNumber]); } } } } } return allCombinations; } ```