Sha256: ac93bb2a0f827e2073bf84958bfe51c107d0235239c15a05188f2a061e8e16f4

Contents?: true

Size: 1.33 KB

Versions: 119

Compression:

Stored size: 1.33 KB

Contents

'use strict';

module.exports = function (input) {
  this.input = input;

  this.normalizePlaintext = function () {
    return input.toLowerCase().replace(/[^a-zA-Z0-9]/g, '');
  };

  this.size = function () {
    var realLength = Math.sqrt(this.normalizePlaintext().length);
    return Math.ceil(realLength);
  };

  this.plaintextSegments = function () {
    var plainText = this.normalizePlaintext();
    var chunkSize = this.size();

    var splitRegex = new RegExp('.{1,' + chunkSize + '}', 'g');
    return plainText.match(splitRegex);
  };

  this.ciphertext = function () {
    var textSegments = this.plaintextSegments();
    var i;
    var j;
    var columns = [];
    var currentSegment;
    var currentLetter;

    for (i = 0; i < this.size(); i++) {
      columns.push([]);
    }

    for (i = 0; i < textSegments.length; i++) {
      currentSegment = textSegments[i];

      for (j = 0; j < currentSegment.length; j++) {
        currentLetter = currentSegment[j];
        columns[j].push(currentLetter);
      }
    }

    for (i = 0; i < columns.length; i++) {
      columns[i] = columns[i].join('');
    }

    return columns.join('');
  };

  this.normalizeCiphertext = function () {
    var chunkSize = this.size();
    var splitRegex = new RegExp('.{1,' + chunkSize + '}', 'g');
    return this.ciphertext().match(splitRegex).join(' ');
  };
};

Version data entries

119 entries across 119 versions & 1 rubygems

Version Path
trackler-2.2.1.139 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.138 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.137 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.136 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.135 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.134 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.133 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.132 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.131 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.130 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.129 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.128 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.127 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.126 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.125 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.124 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.123 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.122 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.121 tracks/javascript/exercises/crypto-square/example.js
trackler-2.2.1.120 tracks/javascript/exercises/crypto-square/example.js