Yay! There's another one started, such fun!
I'll add to this is I go along All done now - such fun.
Day 1
const add = (...a) => a.reduce((t, v) => t + v)
Day 2
const allLongestStrings = a => a.filter(i => i.length === Math.max(...(a.map(a => a.length))))
This is not overly efficient, but it works. Then I got to remembering about default values and altered it to this:
const allLongestStrings = (a, i = Math.max(...(a.map(a => a.length)))) => a.filter(e => e.length === i)
Longer, but we only check for the longest string the once, rather than over each iteration.
Day 3
const allLongestStrings = (a, i = Math.max(...(a.map(a => a.length)))) => a.filter(e => e.length === i)
Day 4
const arrayReplace = (arr, o, n) => arr.map(e => e === o ? n : e)
Day 5
const caseInsensitivePalindrome = (s) => s.toLowerCase().replace(/[\W_]/g, '') === s.toLowerCase().replace(/[\W_]/g, '').split('').reverse().join('')
I like this way because it deals with "A man, a plan, a canal, Panama!"
. But I really like this one (not mine):
const caseInsensitivePalindrome = s => [...s = s.toLowerCase()].reverse().join`` === s;
Day 6
This was a fun one as we needed to produce three different approaches, here are mine:
const encloseInBrackets = s => `(${s})`
const encloseInBrackets = s => ['(', s, ')'].join('')
const encloseInBrackets = s => ['('].concat(s).concat(')').join('')
This can be improved to this though:
const encloseInBrackets = s => '('.concat(s, ')')
const encloseInBrackets = s => [...s.split('')].map((c, i, a) => i === 0 ? `(${c}` : i === a.length - 1 ? `${c})` : c).join('')
This isn't mine (it's from musa#0677), but I love it:
const encloseInBrackets = s => String.fromCharCode(40, ...s.split('').map((_, i) => s.charCodeAt(i)), 41);
Day 7
const factorialNumber = n => n ? n * factorialNumber(n - 1) : 1
Day 8
const firstDigit = s => s.match(/\d/)[0]
Day 9
const largestNumber = n => ~~[...Array(n)].fill(9).join``
Day 10
A few days late getting this uploaded but I was thinking... This is my attempt but, as was pointed out, it fails when the numbers get too large!
const maxMultiple = (d, b) => ~~(b/d) * d
After my ponder I clocked that this is much better:
const maxMultiple = (d, b) => b - (b % d)
I also played with some other methods:
const maxMultiple = (d, b) => Math.floor(b/d) * d // works
const maxMultiple = (d, b) => ((b/d) >> 0) * d // fails
const maxMultiple = (d, b) => parseInt(b/d, 10) * d // works