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 |
return charCounts[].sort().release.dotProduct(sTargets); |
||
} |
} |
||
Line 545: | Line 545: | ||
string key; |
string key; |
||
foreach (fr; map!frequency |
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; |
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 |
immutable cleaned = input.toUpper.removechars("^A-Z"); |
||
//immutable sortedTargets = sorted(targetFreqs); |
//immutable sortedTargets = sorted(targetFreqs); |
||
immutable sortedTargets = targetFreqs.dup.sort().release |
immutable sortedTargets = targetFreqs.dup.sort().release.idup; |
||
immutable bestLength = findBestLength(cleaned, sortedTargets); |
immutable bestLength = findBestLength(cleaned, sortedTargets); |