mirror of
https://github.com/Smaug123/ClassicalCiphers.jl
synced 2025-10-10 03:48:43 +00:00
Merge pull request #8 from Smaug123/pull-request/cedfbbf2
Add Simon Singh test; bugfixes
This commit is contained in:
@@ -36,7 +36,7 @@ With cleverness=1, maximises the string's total fitness.
|
|||||||
Converts the input to lowercase.
|
Converts the input to lowercase.
|
||||||
"""
|
"""
|
||||||
function crack_caesar(ciphertext; cleverness=1)
|
function crack_caesar(ciphertext; cleverness=1)
|
||||||
texts = [(decrypt_caesar(ciphertext,key), key) for key in 1:26]
|
texts = [(decrypt_caesar(ciphertext,key), key) for key in 0:25]
|
||||||
if cleverness == 1
|
if cleverness == 1
|
||||||
texts = sort(texts, by=(x -> string_fitness(first(x))))
|
texts = sort(texts, by=(x -> string_fitness(first(x))))
|
||||||
else
|
else
|
||||||
|
@@ -66,7 +66,7 @@ function crack_vigenere(plaintext; keylength=0)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
derived_key = join([crack_caesar(st)[2] for st in everyother], "")
|
derived_key = join([Char(65+crack_caesar(st)[2]) for st in everyother], "")
|
||||||
(derived_key, takebuf_string(ans))
|
(derived_key, takebuf_string(ans))
|
||||||
|
|
||||||
end
|
end
|
@@ -6,3 +6,12 @@ using Base.Test
|
|||||||
@test decrypt_caesar("WKLV FRGH ZDV LQYHQWHG EB MXOLXV FDHVDU", 3) == "this code was invented by julius caesar"
|
@test decrypt_caesar("WKLV FRGH ZDV LQYHQWHG EB MXOLXV FDHVDU", 3) == "this code was invented by julius caesar"
|
||||||
|
|
||||||
@test crack_caesar("WKLV FRGH ZDV LQYHQWHG EB MXOLXV FDHVDU") == ("this code was invented by julius caesar", 3)
|
@test crack_caesar("WKLV FRGH ZDV LQYHQWHG EB MXOLXV FDHVDU") == ("this code was invented by julius caesar", 3)
|
||||||
|
|
||||||
|
@test crack_caesar("there is nothing to fear") == ("there is nothing to fear", 0)
|
||||||
|
|
||||||
|
# Simon Singh's Cipher Challenge
|
||||||
|
|
||||||
|
@test (
|
||||||
|
singh = "MHILY LZA ZBHL XBPZXBL MVYABUHL HWWPBZ JSHBKPBZ JHLJBZ KPJABT HYJHUBT LZA ULBAYVU";
|
||||||
|
singh_ans = lowercase("FABER EST SUAE QUISQUE FORTUNAE APPIUS CLAUDIUS CAECUS DICTUM ARCANUM EST NEUTRON");
|
||||||
|
crack_caesar(singh) == (singh_ans, 7))
|
@@ -9,3 +9,4 @@ using Base.Test
|
|||||||
@test decrypt_monoalphabetic("5@coD", Dict{Char, Char}('a' => '5', 'B' => '@', 'b' => 'o', 'D' => 'D')) == "aBcbD"
|
@test decrypt_monoalphabetic("5@coD", Dict{Char, Char}('a' => '5', 'B' => '@', 'b' => 'o', 'D' => 'D')) == "aBcbD"
|
||||||
|
|
||||||
@test decrypt_monoalphabetic("WKLV FRGH ZDV LQYHQWHG EB MXOLXV FDHVDU", "DEFGHIJKLMNOPQRSTUVWXYZABC") == lowercase("THIS CODE WAS INVENTED BY JULIUS CAESAR")
|
@test decrypt_monoalphabetic("WKLV FRGH ZDV LQYHQWHG EB MXOLXV FDHVDU", "DEFGHIJKLMNOPQRSTUVWXYZABC") == lowercase("THIS CODE WAS INVENTED BY JULIUS CAESAR")
|
||||||
|
|
||||||
|
@@ -14,3 +14,26 @@ using Base.Test
|
|||||||
@test decrypt_vigenere("DYIMXMESTEZDPNFVVAMJ", "kremlin") == "theamericanshaverobb"
|
@test decrypt_vigenere("DYIMXMESTEZDPNFVVAMJ", "kremlin") == "theamericanshaverobb"
|
||||||
|
|
||||||
@test encrypt_vigenere("THEAMERICANSHAVEROBB", "kremlin") == "DYIMXMESTEZDPNFVVAMJ"
|
@test encrypt_vigenere("THEAMERICANSHAVEROBB", "kremlin") == "DYIMXMESTEZDPNFVVAMJ"
|
||||||
|
|
||||||
|
# Simon Singh's Cipher Challenge
|
||||||
|
|
||||||
|
@test (
|
||||||
|
singh = "KQOWEFVJPUJUUNUKGLMEKJINMWUXFQMKJBGWRLFNFGHUDWUUMBSVLPSNCMUEKQCTESWREE
|
||||||
|
KOYSSIWCTUAXYOTAPXPLWPNTCGOJBGFQHTDWXIZAYGFFNSXCSEYNCTSSPNTUJNYTGGWZGR
|
||||||
|
WUUNEJUUQEAPYMEKQHUIDUXFPGUYTSMTFFSHNUOCZGMRUWEYTRGKMEEDCTVRECFBDJQCUS
|
||||||
|
WVBPNLGOYLSKMTEFVJJTWWMFMWPNMEMTMHRSPXFSSKFFSTNUOCZGMDOEOYEEKCPJRGPMUR
|
||||||
|
SKHFRSEIUEVGOYCWXIZAYGOSAANYDOEOYJLWUNHAMEBFELXYVLWNOJNSIOFRWUCCESWKVI
|
||||||
|
DGMUCGOCRUWGNMAAFFVNSIUDEKQHCEUCPFCMPVSUDGAVEMNYMAMVLFMAOYFNTQCUAFVFJN
|
||||||
|
XKLNEIWCWODCCULWRIFTWGMUSWOVMATNYBUHTCOCWFYTNMGYTQMKBBNLGFBTWOJFTWGNTE
|
||||||
|
JKNEEDCLDHWTVBUVGFBIJGYYIDGMVRDGMPLSWGJLAGOEEKJOFEKNYNOLRIVRWVUHEIWUUR
|
||||||
|
WGMUTJCDBNKGMBIDGMEEYGUOTDGGQEUJYOTVGGBRUJYS";
|
||||||
|
singh_ans = "SOUVENTPOURSAMUSERLESHOMMESDEQUIPAGEPRENNENTDESALBATROSVASTESOISEAUXDE
|
||||||
|
SMERSQUISUIVENTINDOLENTSCOMPAGNONSDEVOYAGELENAVIREGLISSANTSURLESGOUFFR
|
||||||
|
ESAMERSAPEINELESONTILSDEPOSESSURLESPLANCHESQUECESROISDELAZURMALADROITS
|
||||||
|
ETHONTEUXLAISSENTPITEUSEMENTLEURSGRANDESAILESBLANCHESCOMMEDESAVIRONSTR
|
||||||
|
AINERACOTEDEUXCEVOYAGEURAILECOMMEILESTGAUCHEETVEULELUINAGUERESIBEAUQUI
|
||||||
|
LESTCOMIQUEETLAIDLUNAGACESONBECAVECUNBRULEGUEULELAUTREMIMEENBOITANTLIN
|
||||||
|
FIRMEQUIVOLAITLEPOETEESTSEMBLABLEAUPRINCEDESNUEESQUIHANTELATEMPETEETSE
|
||||||
|
RITDELARCHERBAUDELAIREEXILESURLESOLAUMILIEUDESHUEESLEMOTPOURETAGEQUATR
|
||||||
|
EESTTRAJANSESAILESDEGEANTLEMPECHENTDEMARCHER";
|
||||||
|
crack_vigenere(singh) == ("SCUBA", lowercase(ClassicalCiphers.letters_only(singh_ans))))
|
Reference in New Issue
Block a user