Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,93 @@
|
|||
-V ascii_uppercase = Array(‘A’..‘Z’)
|
||||
|
||||
F vigenere_decrypt(target_freqs, input)
|
||||
V nchars = :ascii_uppercase.len
|
||||
V ordA = ‘A’.code
|
||||
V sorted_targets = sorted(target_freqs)
|
||||
|
||||
F frequency(input)
|
||||
V result = :ascii_uppercase.map(c -> (c, 0.0))
|
||||
L(c) input
|
||||
result[c - @ordA][1]++
|
||||
R result
|
||||
|
||||
F correlation(input)
|
||||
V result = 0.0
|
||||
V freq = sorted(@frequency(input), key' a -> a[1])
|
||||
|
||||
L(f) freq
|
||||
result += f[1] * @sorted_targets[L.index]
|
||||
R result
|
||||
|
||||
V cleaned = input.uppercase().filter(c -> c.is_uppercase()).map(c -> c.code)
|
||||
V best_len = 0
|
||||
V best_corr = -100.0
|
||||
|
||||
L(i) 2 .< cleaned.len I/ 20
|
||||
V pieces = [[Int]()] * i
|
||||
L(c) cleaned
|
||||
pieces[L.index % i].append(c)
|
||||
V corr = -0.5 * i + sum(pieces.map(p -> @correlation(p)))
|
||||
|
||||
I corr > best_corr
|
||||
best_len = i
|
||||
best_corr = corr
|
||||
|
||||
I best_len == 0
|
||||
R (‘Text is too short to analyze’, ‘’)
|
||||
|
||||
V pieces = [[Int]()] * best_len
|
||||
L(c) cleaned
|
||||
pieces[L.index % best_len].append(c)
|
||||
|
||||
V freqs = pieces.map(p -> @frequency(p))
|
||||
|
||||
V key = ‘’
|
||||
L(fr_) freqs
|
||||
V fr = sorted(fr_, key' a -> a[1], reverse' 1B)
|
||||
V m = 0
|
||||
V max_corr = 0.0
|
||||
L(j) 0 .< nchars
|
||||
V corr = 0.0
|
||||
V c = ordA + j
|
||||
L(frc) fr
|
||||
V d = (frc[0].code - c + nchars) % nchars
|
||||
corr += frc[1] * target_freqs[d]
|
||||
|
||||
I corr > max_corr
|
||||
m = j
|
||||
max_corr = corr
|
||||
|
||||
key ‘’= Char(code' m + ordA)
|
||||
|
||||
V r = (enumerate(cleaned).map((i, c) -> Char(code' (c - @key[i % @best_len].code + @nchars) % @nchars + @ordA)))
|
||||
R (key, r.join(‘’))
|
||||
|
||||
V encoded = ‘
|
||||
MOMUD EKAPV TQEFM OEVHP AJMII CDCTI FGYAG JSPXY ALUYM NSMYH
|
||||
VUXJE LEPXJ FXGCM JHKDZ RYICU HYPUS PGIGM OIYHF WHTCQ KMLRD
|
||||
ITLXZ LJFVQ GHOLW CUHLO MDSOE KTALU VYLNZ RFGBX PHVGA LWQIS
|
||||
FGRPH JOOFW GUBYI LAPLA LCAFA AMKLG CETDW VOELJ IKGJB XPHVG
|
||||
ALWQC SNWBU BYHCU HKOCE XJEYK BQKVY KIIEH GRLGH XEOLW AWFOJ
|
||||
ILOVV RHPKD WIHKN ATUHN VRYAQ DIVHX FHRZV QWMWV LGSHN NLVZS
|
||||
JLAKI FHXUF XJLXM TBLQV RXXHR FZXGV LRAJI EXPRV OSMNP KEPDT
|
||||
LPRWM JAZPK LQUZA ALGZX GVLKL GJTUI ITDSU REZXJ ERXZS HMPST
|
||||
MTEOE PAPJH SMFNB YVQUZ AALGA YDNMP AQOWT UHDBV TSMUE UIMVH
|
||||
QGVRW AEFSP EMPVE PKXZY WLKJA GWALT VYYOB YIXOK IHPDS EVLEV
|
||||
RVSGB JOGYW FHKBL GLXYA MVKIS KIEHY IMAPX UOISK PVAGN MZHPW
|
||||
TTZPV XFCCD TUHJH WLAPF YULTB UXJLN SIJVV YOVDJ SOLXG TGRVO
|
||||
SFRII CTMKO JFCQF KTINQ BWVHG TENLH HOGCS PSFPV GJOKM SIFPR
|
||||
ZPAAS ATPTZ FTPPD PORRF TAXZP KALQA WMIUD BWNCT LEFKO ZQDLX
|
||||
BUXJL ASIMR PNMBF ZCYLV WAPVF QRHZV ZGZEF KBYIO OFXYE VOWGB
|
||||
BXVCB XBAWG LQKCM ICRRX MACUO IKHQU AJEGL OIJHH XPVZW JEWBA
|
||||
FWAML ZZRXJ EKAHV FASMU LVVUT TGK’
|
||||
|
||||
V english_frequences = [
|
||||
0.08167, 0.01492, 0.02782, 0.04253, 0.12702, 0.02228, 0.02015,
|
||||
0.06094, 0.06966, 0.00153, 0.00772, 0.04025, 0.02406, 0.06749,
|
||||
0.07507, 0.01929, 0.00095, 0.05987, 0.06327, 0.09056, 0.02758,
|
||||
0.00978, 0.02360, 0.00150, 0.01974, 0.00074]
|
||||
|
||||
V (key, decoded) = vigenere_decrypt(english_frequences, encoded)
|
||||
print(‘Key: ’key)
|
||||
print("\nText: "decoded)
|
||||
Loading…
Add table
Add a link
Reference in a new issue