1
var maxScoreWords = function (words, letters, score) {4
for (let w of words) for (let c of w) set.add(c);6
// score of unique chars8
for (let c of set) map.set(c, score[c.charCodeAt() - "a".charCodeAt()]);11
let map_letters = new Map();12
for (let c of letters)13
map_letters.set(c, map_letters.has(c) ? map_letters.get(c) + 1 : 1);17
for (let w of words) {19
for (let c of w) s += map.get(c);23
const sortStr = (s) => s.split("").sort().join("");24
const combineStrings_fromArrayAndIndexes = (A, I) =>25
I.reduce((s, i) => s + A[i], "");26
const getFreqMapFromStr = (s) =>29
.reduce((m, c) => (m.set(c, m.has(c) ? m.get(c) + 1 : 1), m), new Map());30
const isMapSubOfAnotherMap = (m1, m2) => {31
for (let [c, count] of m1)32
if (!m2.has(c) || count > m2.get(c)) return false;37
const takeOrNot = (i, take, indexes, A, n) => {41
getFreqMapFromStr(combineStrings_fromArrayAndIndexes(words, indexes)),45
let mm = indexes.reduce((sum, i) => sum + SW[i], 0);46
max1 = Math.max(max1, mm);50
takeOrNot(i + 1, take, indexes, A, n);51
takeOrNot(i + 1, take, [...indexes, i], A, n);53
takeOrNot(0, true, [], SW, SW.length);