https://codingcompetitions.withgoogle.com/kickstart/round/0000000000050eda/0000000000119866
// blueprint
const fs = require('fs')
function getFreq(str) {
let chars = {};
const result = [chars];
for (const char of str) {
chars = {
...chars,
[char]: (chars[char] || 0) + 1
};
result.push(chars);
}
return result;
}
// my solution
function solve(str, ranges) {
const freq = getFreq(str)
const calc = (start, end) => {
const endFreq = freq[end]
const startFreq = freq[start - 1]
let count = 0
for (const key in endFreq) {
const diff = endFreq[key] - (startFreq[key] || 0)
if (diff % 2) {
count++
if (count > 1) {
return 0
}
}
}
return 1
}
let positiveAnswers = 0
for (const range of ranges) {
const [start, end] = range.split(' ')
positiveAnswers += calc(start, end)
}
return positiveAnswers
}
const input = fs.readFileSync(0, 'utf8').trim()
const chars = input.match(/[A-Z]+/g)
const questions = input.split(/\d+\s\d+\n[A-Z]+/)
.slice(1)
.map(e=>e.split('\n').filter(Boolean))
console.log(chars
.map((e, i) =>
`Case #${i + 1}: ${solve(e, questions[i])}`)
.join('\n'))
[char]: (chars[char] || 0) + 1
vs[char]: ++chars[char] || 1
;) .Дзякуй 👍