Proposing a change for caesar.spec.js for test 3 ('works with phrases') and test 4 ('works with negative shift'). The test for 'wraps' is supposed to come after these ones, but currently using the word "World!" in the earlier tests with a 5 key shift will require that wraps are already working, thus the spec test will fail even if the code is appropriate for phrases and negative shifts. If the learning process is to move one by one progressively through the spec tests, then I think it would be better not to require wraps to be working until the actual 'wraps' requirement in test 5. I believe simply replacing the word "World!" with "There!" should solve the issue. |
||
---|---|---|
.. | ||
.DS_Store | ||
README.md | ||
caesar.js | ||
caesar.spec.js |
README.md
Exercise XX - caesar cipher
Implement the legendary caesar cipher:
In cryptography, a Caesar cipher, also known as Caesar's cipher, the shift cipher, Caesar's code or Caesar shift, is one of the simplest and most widely known encryption techniques. It is a type of substitution cipher in which each letter in the plaintext is replaced by a letter some fixed number of positions down the alphabet. For example, with a left shift of 3, D would be replaced by A, E would become B, and so on. The method is named after Julius Caesar, who used it in his private correspondence.
write a function that takes a string to be encoded and a shift factor and then returns the encoded string:
caesar('A', 1) // simply shifts the letter by 1: returns 'B'
the cipher should retain capitalization:
caesar('Hey', 5) // returns 'Mjd;
should not shift punctuation:
caesar('Hello, World!', 5) //returns 'Mjqqt, Btwqi!'
the shift should wrap around the alphabet:
caesar('Z', 1) // returns 'A'
negative numbers should work as well:
caesar('Mjqqt, Btwqi!', -5) // returns 'Hello, World!'