1
1
mirror of https://github.com/theoludwig/programming-challenges.git synced 2024-12-08 00:45:29 +01:00

feat(solution): add typescript-caesar-cipher

This commit is contained in:
divlo 2020-10-21 11:30:48 +02:00
parent 229dcf03c3
commit 253421fee9
2 changed files with 47 additions and 0 deletions

View File

@ -0,0 +1,5 @@
# typescript-caesar-cipher - caesar-cipher
Programming language : TypeScript
Created by [@Divlo](https://github.com/Divlo) on 21 October 2020.

View File

@ -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