From b847c3bd61fac60a9d6602e297c9fa29ce725ad5 Mon Sep 17 00:00:00 2001
From: Cody Loyd <codyloyd@gmail.com>
Date: Fri, 25 Aug 2017 13:59:26 -0500
Subject: [PATCH] add caesar cipher

---
 README.md             |  2 --
 caesar/README.md      | 33 +++++++++++++++++++++++++++++++++
 caesar/caesar.js      |  5 +++++
 caesar/caesar.spec.js | 22 ++++++++++++++++++++++
 4 files changed, 60 insertions(+), 2 deletions(-)
 create mode 100644 caesar/README.md
 create mode 100644 caesar/caesar.js
 create mode 100644 caesar/caesar.spec.js

diff --git a/README.md b/README.md
index 0c4db84..f1c8359 100644
--- a/README.md
+++ b/README.md
@@ -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):
 1. book titles (MC)
-1. leap years 
-1. Caesar Cipher
 1. Palindromes
 1. Pangrams
 1. pig latin (MC)
diff --git a/caesar/README.md b/caesar/README.md
new file mode 100644
index 0000000..02d39a7
--- /dev/null
+++ b/caesar/README.md
@@ -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!'
+```
+
+
diff --git a/caesar/caesar.js b/caesar/caesar.js
new file mode 100644
index 0000000..42bc82b
--- /dev/null
+++ b/caesar/caesar.js
@@ -0,0 +1,5 @@
+var caesar = function() {
+
+}
+
+module.exports = caesar
diff --git a/caesar/caesar.spec.js b/caesar/caesar.spec.js
new file mode 100644
index 0000000..8f3468c
--- /dev/null
+++ b/caesar/caesar.spec.js
@@ -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!');
+  });
+});