mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 08:16:50 +08:00

* chore: Switch to Node 20 + Vitest * chore: migrate to vitest mock functions * chore: code style (switch to prettier) * test: re-enable long-running test Seems the switch to Node 20 and Vitest has vastly improved the code's and / or the test's runtime! see #1193 * chore: code style * chore: fix failing tests * Updated Documentation in README.md * Update contribution guidelines to state usage of Prettier * fix: set prettier printWidth back to 80 * chore: apply updated code style automatically * fix: set prettier line endings to lf again * chore: apply updated code style automatically --------- Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
25 lines
1.1 KiB
JavaScript
25 lines
1.1 KiB
JavaScript
/**
|
||
* @function ROT13
|
||
* @description - ROT13 ("rotate by 13 places", sometimes hyphenated ROT-13) is a simple letter substitution cipher that replaces a letter with the 13th letter after it in the alphabet. ROT13 is a special case of the Caesar cipher which was developed in ancient Rome. Because there are 26 letters (2×13) in the basic Latin alphabet, ROT13 is its own inverse; that is, to undo ROT13, the same algorithm is applied, so the same action can be used for encoding and decoding. The algorithm provides virtually no cryptographic security, and is often cited as a canonical example of weak encryption.
|
||
* @see - [wiki](https://en.wikipedia.org/wiki/ROT13)
|
||
* @param {String} str - string to be decrypted
|
||
* @return {String} decrypted string
|
||
*/
|
||
function ROT13(str) {
|
||
if (typeof str !== 'string') {
|
||
throw new TypeError('Argument should be string')
|
||
}
|
||
|
||
return str.replace(/[a-z]/gi, (char) => {
|
||
const charCode = char.charCodeAt()
|
||
|
||
if (/[n-z]/i.test(char)) {
|
||
return String.fromCharCode(charCode - 13)
|
||
}
|
||
|
||
return String.fromCharCode(charCode + 13)
|
||
})
|
||
}
|
||
|
||
export default ROT13
|