--- title: Convert seconds to compound duration id: 596fd036dc1ab896c5db98b1 challengeType: 5 forumTopicId: 302236 --- ## Description
Implement a function which: Demonstrate that it passes the following three test-cases:
Test Cases
| Input number | Output number | | --- | --- | | 7259 | 2 hr, 59 sec | | 728640059 | 1 d | | 6000000 | 9 wk, 6 d, 10 hr, 40 min |
Details
## Instructions
## Tests
```yml tests: - text: convertSeconds should be a function. testString: assert(typeof convertSeconds === 'function'); - text: convertSeconds(7259) should return 2 hr, 59 sec. testString: assert.equal(convertSeconds(testCases[0]), results[0]); - text: convertSeconds(86400) should return 1 d. testString: assert.equal(convertSeconds(testCases[1]), results[1]); - text: convertSeconds(6000000) should return 9 wk, 6 d, 10 hr, 40 min. testString: assert.equal(convertSeconds(testCases[2]), results[2]); ```
## Challenge Seed
```js function convertSeconds(sec) { return true; } ```
### After Test
```js const testCases = [7259, 86400, 6000000]; const results = ['2 hr, 59 sec', '1 d', '9 wk, 6 d, 10 hr, 40 min']; ```
## Solution
```js function convertSeconds(sec) { const localNames = ['wk', 'd', 'hr', 'min', 'sec']; // compoundDuration :: [String] -> Int -> String const compoundDuration = (labels, intSeconds) => weekParts(intSeconds) .map((v, i) => [v, labels[i]]) .reduce((a, x) => a.concat(x[0] ? [`${x[0]} ${x[1] || '?'}`] : []), [] ) .join(', '); // weekParts :: Int -> [Int] const weekParts = intSeconds => [0, 7, 24, 60, 60] .reduceRight((a, x) => { const r = a.rem; const mod = x !== 0 ? r % x : r; return { rem: (r - mod) / (x || 1), parts: [mod].concat(a.parts) }; }, { rem: intSeconds, parts: [] }) .parts; return compoundDuration(localNames, sec); } ```