add caesar cipher

This commit is contained in:
Cody Loyd 2017-08-25 13:59:26 -05:00
parent cadd4b255c
commit b847c3bd61
4 changed files with 60 additions and 2 deletions

View File

@ -13,8 +13,6 @@ The first exercise, `helloWorld` will walk you through the process in more depth
## planned exercises (in no particular order for the moment): ## planned exercises (in no particular order for the moment):
1. book titles (MC) 1. book titles (MC)
1. leap years
1. Caesar Cipher
1. Palindromes 1. Palindromes
1. Pangrams 1. Pangrams
1. pig latin (MC) 1. pig latin (MC)

33
caesar/README.md Normal file
View File

@ -0,0 +1,33 @@
# 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:
```javascript
caesar('A', 1) // simply shifts the letter by 1: returns 'B'
```
the cipher should retain capitalization:
```javascript
caesar('Hey', 5) // returns 'Mjd;
```
should _not_ shift punctuation:
```javascript
caesar('Hello, World!', 5) //returns 'Mjqqt, Btwqi!'
```
the shift should wrap around the alphabet:
```javascript
caesar('Z', 1) // returns 'A'
```
negative numbers should work as well:
```javascript
caesar('Mjqqt, Btwqi!', -5) // returns 'Hello, World!'
```

5
caesar/caesar.js Normal file
View File

@ -0,0 +1,5 @@
var caesar = function() {
}
module.exports = caesar

22
caesar/caesar.spec.js Normal file
View File

@ -0,0 +1,22 @@
var caesar = require('./caesar')
describe('caesar', function() {
it('works with single letters', function() {
expect(caesar('A', 1)).toEqual('B');
});
xit('works with words', function() {
expect(caesar('Aaa', 1)).toEqual('Bbb');
});
xit('works with phrases', function() {
expect(caesar('Hello, World!', 5)).toEqual('Mjqqt, Btwqi!');
});
xit('works with negative shift', function() {
expect(caesar('Mjqqt, Btwqi!', -5)).toEqual('Hello, World!');
});
xit('wraps', function() {
expect(caesar('Z', 1)).toEqual('A');
});
xit('works with large shift factors', function() {
expect(caesar('Hello, World!', 75)).toEqual('Ebiil, Tloia!');
});
});