From b847c3bd61fac60a9d6602e297c9fa29ce725ad5 Mon Sep 17 00:00:00 2001 From: Cody Loyd 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!'); + }); +});