--- id: 596fd036dc1ab896c5db98b1 title: Convertire secondi in durata composta challengeType: 1 forumTopicId: 302236 dashedName: convert-seconds-to-compound-duration --- # --description-- Implementa una funzione che: Dimostra che passi i seguenti tre casi:
Test
| Numero di input | Numero di output | | --------------- | ------------------------- | | 7259 | 2 hr, 59 sec | | 86400 | 1 d | | 6000000 | 9 wk, 6 d, 10 hr, 40 min |
Dettagli
# --hints-- `convertSeconds` dovrebbe essere una funzione. ```js assert(typeof convertSeconds === 'function'); ``` `convertSeconds(7259)` dovrebbe restituire `2 hr, 59 sec`. ```js assert.equal(convertSeconds(testCases[0]), results[0]); ``` `convertSeconds(86400)` dovrebbe restituire `1 d`. ```js assert.equal(convertSeconds(testCases[1]), results[1]); ``` `convertSeconds(6000000)` dovrebbe restituire `9 wk, 6 d, 10 hr, 40 min`. ```js assert.equal(convertSeconds(testCases[2]), results[2]); ``` # --seed-- ## --after-user-code-- ```js const testCases = [7259, 86400, 6000000]; const results = ['2 hr, 59 sec', '1 d', '9 wk, 6 d, 10 hr, 40 min']; ``` ## --seed-contents-- ```js function convertSeconds(sec) { return true; } ``` # --solutions-- ```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); } ```