diff --git a/challenges/frequency-deviation/solutions/javascript/function/README.md b/challenges/frequency-deviation/solutions/javascript/function/README.md new file mode 100644 index 0000000..449c112 --- /dev/null +++ b/challenges/frequency-deviation/solutions/javascript/function/README.md @@ -0,0 +1,3 @@ +# frequency-deviation/javascript/function + +Created by [@theoludwig](https://github.com/theoludwig) on 16 September 2023. diff --git a/challenges/frequency-deviation/solutions/javascript/function/getMaximumFrequencyDeviation.js b/challenges/frequency-deviation/solutions/javascript/function/getMaximumFrequencyDeviation.js new file mode 100644 index 0000000..d16822a --- /dev/null +++ b/challenges/frequency-deviation/solutions/javascript/function/getMaximumFrequencyDeviation.js @@ -0,0 +1,55 @@ +/** + * + * @param {string} string + * @returns {number} + */ +export const getMaximumFrequencyDeviation = (string) => { + /** @type {string[]} */ + const subStrings = [] + for (let index = 0; index < string.length; index++) { + let subString = '' + for (let subIndex = index; subIndex < string.length; subIndex++) { + subString += string[subIndex] + subStrings.push(subString) + } + } + + let maximumFrequencyDeviation = 0 + for (const subString of subStrings) { + /** + * @type {Map} + * + * @description + * - Key: Character in the string + * - Value: Number of occurrences of the character in the string + */ + const map = new Map() + for (let index = 0; index < subString.length; index++) { + const character = subString[index] + if (map.has(character)) { + map.set(character, map.get(character) + 1) + } else { + map.set(character, 1) + } + } + + let minimumFrequence = Number.MAX_VALUE + let maximumFrequence = 0 + for (const [_, value] of map) { + if (value > maximumFrequence) { + maximumFrequence = value + } + + if (value < minimumFrequence) { + minimumFrequence = value + } + } + const frequencyDeviation = maximumFrequence - minimumFrequence + + if (frequencyDeviation > maximumFrequencyDeviation) { + maximumFrequencyDeviation = frequencyDeviation + } + } + + return maximumFrequencyDeviation +} diff --git a/challenges/frequency-deviation/solutions/javascript/function/package.json b/challenges/frequency-deviation/solutions/javascript/function/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/challenges/frequency-deviation/solutions/javascript/function/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/challenges/frequency-deviation/solutions/javascript/function/solution.js b/challenges/frequency-deviation/solutions/javascript/function/solution.js new file mode 100644 index 0000000..ea15f81 --- /dev/null +++ b/challenges/frequency-deviation/solutions/javascript/function/solution.js @@ -0,0 +1,18 @@ +import readline from 'node:readline' + +import { getMaximumFrequencyDeviation } from './getMaximumFrequencyDeviation.js' + +const input = [] +const readlineInterface = readline.createInterface({ + input: process.stdin, + output: process.stdout +}) +readlineInterface.on('line', (value) => { + input.push(value) +}) + +const solution = () => { + console.log(getMaximumFrequencyDeviation(input[0])) +} + +readlineInterface.on('close', solution)