diff --git a/challenges/caesar-cipher/solutions/typescript-caesar-cipher/README.md b/challenges/caesar-cipher/solutions/typescript-caesar-cipher/README.md new file mode 100644 index 0000000..7698fae --- /dev/null +++ b/challenges/caesar-cipher/solutions/typescript-caesar-cipher/README.md @@ -0,0 +1,5 @@ +# typescript-caesar-cipher - caesar-cipher + +Programming language : TypeScript + +Created by [@Divlo](https://github.com/Divlo) on 21 October 2020. diff --git a/challenges/caesar-cipher/solutions/typescript-caesar-cipher/solution.ts b/challenges/caesar-cipher/solutions/typescript-caesar-cipher/solution.ts new file mode 100644 index 0000000..a8a0a41 --- /dev/null +++ b/challenges/caesar-cipher/solutions/typescript-caesar-cipher/solution.ts @@ -0,0 +1,42 @@ +const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('') + +interface ShiftedLetter { + origin: string + shifted: string +} + +function shiftAlphabet (shift: number): ShiftedLetter[] { + const result: ShiftedLetter[] = [] + for (let index = 0; index < alphabet.length; index++) { + const letter = alphabet[index] + let shiftedIndex = index + shift + if (shiftedIndex > alphabet.length - 1) { + shiftedIndex = Math.abs(alphabet.length - shiftedIndex) + } + result.push({ + origin: letter, + shifted: alphabet[shiftedIndex] + }) + } + return result +} + +function solution (str: string, shift: number): string { + const shiftedAlphabet = shiftAlphabet(shift) + let result = '' + for (const letter of str) { + if (letter === ' ') { + result += ' ' + } else { + for (const { origin, shifted } of shiftedAlphabet) { + if (letter === shifted) { + result += origin + break + } + } + } + } + return result +} + +export default solution