Sha256: bb82de3e74c9ad8012fa1fc9886f256f9146c73428defbde122d457b3efb1449

Contents?: true

Size: 1.29 KB

Versions: 241

Compression:

Stored size: 1.29 KB

Contents

'use strict';

var ALPHABET = 'abcdefghijklmnopqrstuvwxyz';

function randomKey() {
  var i, result = '';
  for ( i = 0; i < 100; i++ ) {
    result += ALPHABET[randomUpTo(ALPHABET.length)];
  }
  return result;
}

function randomUpTo(n) {
  return Math.floor(Math.random() * n);
}

module.exports = function (userDefinedKey) {

  var key;

  function addEncodedCharacter(character, index, array) {
    /*jshint validthis:true */
    var i = ALPHABET.indexOf(character) + ALPHABET.indexOf(key[index]);
    if (i >= ALPHABET.length) { i -= ALPHABET.length; }
    this.push(ALPHABET[i]);
  }

  function addDecodedCharacter(character, index, array) {
    /*jshint validthis:true */
    var i = ALPHABET.indexOf(character) - ALPHABET.indexOf(key[index]);
    if (i < 0) { i += ALPHABET.length; }
    this.push(ALPHABET[i]);
  }

  this.encode = function (plaintext) {
    var characters = [];
    plaintext.split('').forEach( addEncodedCharacter, characters );
    return characters.join('');
  };

  this.decode = function (ciphertext) {
    var characters = [];
    ciphertext.split('').forEach( addDecodedCharacter, characters );
    return characters.join('');
  };

  this.key = userDefinedKey || randomKey();
  key = this.key;

  if (userDefinedKey === '' || key.match(/[\dA-Z]/)) {
    throw new Error('Bad key');
  }
};

Version data entries

241 entries across 241 versions & 1 rubygems

Version Path
trackler-2.2.1.23 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.22 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.21 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.20 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.19 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.18 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.17 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.16 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.15 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.14 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.13 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.12 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.11 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.10 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.9 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.8 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.7 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.6 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.5 tracks/javascript/exercises/simple-cipher/example.js
trackler-2.2.1.4 tracks/javascript/exercises/simple-cipher/example.js