Skip to content

Instantly share code, notes, and snippets.

@KolosovAO
Created April 23, 2019 11:30
Show Gist options
  • Save KolosovAO/61ec1ecd7cca5373b2472978d81dff49 to your computer and use it in GitHub Desktop.
Save KolosovAO/61ec1ecd7cca5373b2472978d81dff49 to your computer and use it in GitHub Desktop.

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'))
@dagolinuxoid
Copy link

[char]: (chars[char] || 0) + 1 vs [char]: ++chars[char] || 1 ;) .
Дзякуй 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment