Merge pull request #8 from Smaug123/pull-request/cedfbbf2

Add Simon Singh test; bugfixes
This commit is contained in:
Smaug123
2016-01-09 08:53:56 +00:00
5 changed files with 35 additions and 2 deletions

View File

@@ -36,7 +36,7 @@ With cleverness=1, maximises the string's total fitness.
Converts the input to lowercase.
"""
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
texts = sort(texts, by=(x -> string_fitness(first(x))))
else

View File

@@ -66,7 +66,7 @@ function crack_vigenere(plaintext; keylength=0)
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))
end

View File

@@ -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 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))

View File

@@ -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("WKLV FRGH ZDV LQYHQWHG EB MXOLXV FDHVDU", "DEFGHIJKLMNOPQRSTUVWXYZABC") == lowercase("THIS CODE WAS INVENTED BY JULIUS CAESAR")

View File

@@ -14,3 +14,26 @@ using Base.Test
@test decrypt_vigenere("DYIMXMESTEZDPNFVVAMJ", "kremlin") == "theamericanshaverobb"
@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))))