Накидал за минут 10 в развёрнутом варианте, чтобы тебе было понятно, что, куда и зачем
const alph = 'abcdefghijklmnopqrstuvwxyz'
function decodeWoof (woofs) {
const letters = woofs.split('!').reduce(reduceWoof, [])
if (letters.length === 0) {
return 'nothing to decode!'
}
const humanLanguage = letters.reduce(transformWoofToLetter, '')
if (humanLanguage.length === 0) {
return 'just barking!'
}
return humanLanguage
}
function reduceWoof (result, str) {
const woofs = str.split('-').filter(isWoofReal)
if (woofs.length > 0) {
result.push(woofs.length)
}
return result
}
function isWoofReal (woof) {
return /w.*?o.*?o.*?f/i.test(woof)
}
function transformWoofToLetter (word, letterIndex) {
if (letterIndex <= alph.length) {
word += alph[letterIndex - 1]
}
return word
}
Учтены абсолютно все кейсы из задачи
Из-за условия на разный ответ ("just barking!" и "nothing to decode!") пришлось разделить на 2 reduce, иначе можно справиться и с одним
upd: переписал под typescript и попросил chatgpt написать мне тесты под это. Он написал всё с использованием jest, но я хз, как в playground добавить jest, разве что импорт по ссылке, но это ещё конфиг писать отдельно, в общем мне слишком лень, на вот такой тестер 
Справа вкладка "logs" для вывода результатов
Ссылка