Vigenère cipher/Cryptanalysis: Difference between revisions

Content added Content deleted
(Updated D entry)
Line 489: Line 489:
foreach (immutable c; txt)
foreach (immutable c; txt)
charCounts[c - 'A']++;
charCounts[c - 'A']++;
return charCounts[].sort().release().dotProduct(sTargets);
return charCounts[].sort().release.dotProduct(sTargets);
}
}


Line 545: Line 545:


string key;
string key;
foreach (fr; map!frequency(pieces)) {
foreach (fr; pieces.map!frequency) {
fr.sort!q{ a.d > b.d }();
fr.sort!q{ a.d > b.d };


size_t m;
size_t m;
double maxCorr = 0.0;
double maxCorr = 0.0;
foreach (immutable j, immutable c; std.ascii.uppercase) {
foreach (immutable j, immutable c; uppercase) {
double corr = 0.0;
double corr = 0.0;
foreach (immutable frc; fr) {
foreach (immutable frc; fr) {
Line 569: Line 569:
}
}


immutable cleaned = input.toUpper().removechars("^A-Z");
immutable cleaned = input.toUpper.removechars("^A-Z");


//immutable sortedTargets = sorted(targetFreqs);
//immutable sortedTargets = sorted(targetFreqs);
immutable sortedTargets = targetFreqs.dup.sort().release().idup;
immutable sortedTargets = targetFreqs.dup.sort().release.idup;


immutable bestLength = findBestLength(cleaned, sortedTargets);
immutable bestLength = findBestLength(cleaned, sortedTargets);