Vigenaire Ciper Decoder

by Retsam19

HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script>
<script src="https://rawgit.com/nnnick/Chart.js/master/Chart.js"></script>

JavaScript

var text = "Klkbnqlcytfysryucocphgbdizzfcmjwkuchzyeswfogmmetwwossdchrzyldsbwnydednzwnefydthtddbojicemlucdygicczhoadrzcylwadsxpilpiecskomoltejtkmqqymehpmmjxyolwpeewjckznpccpsvsxauyodhalmriocwpelwbcniyfxmwjcemcyrazdqlsomdbfljwnbijxpddsyoehxpceswtoxwbleecsaxcnuetzywfn"
var keyLength = 5;

var alphabet = _.times(26, function(i) {return String.fromCharCode(97+i)});

var buckets = _.times(keyLength, function () {return ""});

_.each(text.split(""), function(letter, index) {
    buckets[index % keyLength] += letter;
});

_.each(buckets, function(b, index) {
    var label = document.createElement("span");
    label.innerHTML = "Modulus "+index+":";
    var canvas = document.createElement("canvas"); 
    canvas.width = 500;
    canvas.height = 300;
    
    var ctx = canvas.getContext("2d");
    
    var chartData = {
        labels: alphabet,
        datasets: [{
            data: frequencyCount(b)
        }]
    };
    
    var chart = new Chart(ctx).Bar(chartData);
    
    document.body.appendChild(label);
    document.body.appendChild(document.createElement("br")); 
    document.body.appendChild(canvas);
    document.body.appendChild(document.createElement("br")); 
});
    
function frequencyCount(text) {
    var counts = _.countBy(text.split(""));
    return _.map(alphabet, function (letter) {
        return counts[letter] || 0;
    });
}