Skip to content

cipher breaker for shift-cipher, substitute-cipher, and vigenere-cipher (using I.C, and Mutual I.C.)

Notifications You must be signed in to change notification settings

camsenec/classical-cipher-breaker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

classical-cipher-breaker

This cipher breaker tries to decrypt cryptogram encrypted by classical way, namely shift cipher, substition cipher, and vigenere cipher. In decryption of message encrypted by vigenere cipher, we use I.C. (Index of Coincidence) and Mutual I.C.

Requirements

  • Python 3.*

Usage

1. Clone this repository

$ git clone https://github.com/camsenec/classical-cipher-breaker.git
$ cd classical-cipher-breaker

2. Construct virtual environment

$ pipenv install

3. Copy and Paste a cryptogram you want to decrypt to input/cryptogram.txt.

4. Execute main.py

$ pipenv run python main.py

After excecution, you can see the result of decryption at output/result.txt The file consists of three results: the result by shift cipher solver, substition cipher solver, vigenere cipher solver. First, if the message you inputted is encrypted by shift cipher, you can find a meaningful text from 26 results. The number from 0 to 25 represents the shift key.

Shift
-----------------------------------------------------------
0 : XHWLISAMYALBSNKTWRWVELDXHBQIPALHENVTWVAOMDDRECLXHUHHRBQVSRLXDHSOIAUHQMGGENVBRTWKISLBRGMGHEJECIFZPOYBGNGMMCWMLALMLEKHPDAXVSSKINGMQOLBZALXHTGKITJXETBNWTGKIVWGQAAGPYTRXHWBVRSMMOFTPAKLISKFINLHJTZXHAFZIRKHJBSMXLWTRDTRXHWBVSWEJIFMIRWLXRSMLEJMLEQWMSUHZEJTWOMGHRWTWOFMSRMGEWSRFYJXELASMNYMLALPLALBXMSDISKXRSWYSRLAIMLHHOVXTEFWWOFPLALBXWAEPMSDISWGWEXHVOLAIRKMSDGTRDLAETSEPOXMLEGMLEJLGAFGSTAVITZBWTGHIVWGEQMBXETKEVWLSLVBIRETCPJXJEJMSRMGVALAIRLAENZXVOAVELDRFULISIFMPEKLPYVBITJRMNYMSSLXQTZXSNUHQIFZXIVXELDUCHAFWEDYXHMLAEUHYLVBQAYBREOBXHGNXCGGXRSWMCLBSNSVMRUNQSLTRCWBRWZBGHSGERERELDHJWZHWEEXQBWKWAJXFRSOIFDXISSMXOHLTEWWFEXHVELAIEFXQYETOEKTQONXMFLAISGEHIWKWRWTPLQTVETKEVWMLEFMLIKLYRWECIKGXTZXSULVSMWTRYGYXHWFAAFMIDWTGHOHYLVAEVWIVEXXVRWWXHSMELDLXAFWENVYMGZMAHSMAEZTZEZXVELAINALECSLIIFPLIUAXHWBRTWKECLBSNGYQAFRMNVBZIVNELDRVALBSNSEHEUBWIGGQACBRGHKSCWLWEKHREHKSCWLWPWKWODWMEJIVOVNGEKTROMMGOEXMNLXRDWWFYFHSNWFSSLTVMAXWTJRXOSOSIVMLIKIVOTEIMBNWTSLGOJMIZVBHSAGGELAIYUTRTMLYADECMSDIRWMVESMTHQLMCSEPYAFTOKLMBDXXHWRQACXMTWVSNGFMCSEPYAFTOKLMBDXXHWRWHGHXDWLIRLXVSLAINKMENVBRGSGHFAZLTAGKIKXECZLSLVBIRKBRDAOMDMTPLQKETAHRADVSUJLIOXTGTAHRAXMIRSEPBWVEUKXXHWVSSLHJRMGRIFZMSKNVELHFESMPESLXAKAMGZTWTZXGOKMSFKMEYAGK


1 : WGVKHRZLXZKARMJSVQVUDKCWGAPHOZKGDMUSVUZNLCCQDBKWGTGGQAPURQKWCGRNHZTGPLFFDMUAQSVJHRKAQFLFGDIDBHEYONXAFMFLLBVLKZKLKDJGOCZWURRJHMFLPNKAYZKWGSFJHSIWDSAMVSFJHUVFPZZFOXSQWGVAUQRLLNESOZJKHRJEHMKGISYWGZEYHQJGIARLWKVSQCSQWGVAURVDIHELHQVKWQRLKDILKDPVLRTGYDISVNLFGQVSVNELRQLFDVRQEXIWDKZRLMXLKZKOKZKAWLRCHRJWQRVXRQKZHLKGGNUWSDEVVNEOKZKAWVZDOLRCHRVFVDWGUNKZHQJLRCFSQCKZDSRDONWLKDFLKDIKFZEFRSZUHSYAVSFGHUVFDPLAWDSJDUVKRKUAHQDSBOIWIDILRQLFUZKZHQKZDMYWUNZUDKCQETKHRHELODJKOXUAHSIQLMXLRRKWPSYWRMTGPHEYWHUWDKCTBGZEVDCXWGLKZDTGXKUAPZXAQDNAWGFMWBFFWQRVLBKARMRULQTMPRKSQBVAQVYAFGRFDQDQDKCGIVYGVDDWPAVJVZIWEQRNHECWHRRLWNGKSDVVEDWGUDKZHDEWPXDSNDJSPNMWLEKZHRFDGHVJVQVSOKPSUDSJDUVLKDELKHJKXQVDBHJFWSYWRTKURLVSQXFXWGVEZZELHCVSFGNGXKUZDUVHUDWWUQVVWGRLDKCKWZEVDMUXLFYLZGRLZDYSYDYWUDKZHMZKDBRKHHEOKHTZWGVAQSVJDBKARMFXPZEQLMUAYHUMDKCQUZKARMRDGDTAVHFFPZBAQFGJRBVKVDJGQDGJRBVKVOVJVNCVLDIHUNUMFDJSQNLLFNDWLMKWQCVVEXEGRMVERRKSULZWVSIQWNRNRHULKHJHUNSDHLAMVSRKFNILHYUAGRZFFDKZHXTSQSLKXZCDBLRCHQVLUDRLSGPKLBRDOXZESNJKLACWWGVQPZBWLSVURMFELBRDOXZESNJKLACWWGVQVGFGWCVKHQKWURKZHMJLDMUAQFRFGEZYKSZFJHJWDBYKRKUAHQJAQCZNLCLSOKPJDSZGQZCURTIKHNWSFSZGQZWLHQRDOAVUDTJWWGVURRKGIQLFQHEYLRJMUDKGEDRLODRKWZJZLFYSVSYWFNJLREJLDXZS

:
:

Second, if the message you have is encrypted by substitution cipher, you might get a meaningful text.

Substitute
-----------------------------------------------------------
Keys : {'l': 'e', 'e': 't', 'm': 'a', 'w': 'o', 's': 'i', 'x': 'n', 'a': 's', 'r': 'h', 'h': 'r', 'i': 'd', 't': 'l', 'v': 'c', 'g': 'u', 'k': 'm', 'b': 'w', 'f': 'f', 'o': 'g', 'n': 'y', 'd': 'p', 'y': 'b', 'z': 'v', 'q': 'k', 'p': 'j', 'j': 'x', 'c': 'q', 'u': 'z'}
NROEDISABSEWIYMLOHOCTEPNRWKDJSERTYCLOCSGAPPHTQENRZRRHWKCIHENPRIGDSZRKAUUTYCWHLOMDIEWHUAURTXTQDFVJGBWUYUAAQOAESEAETMRJPSNCIIMDYUAKGEWVSENRLUMDLXNTLWYOLUMDCOUKSSUJBLHNROWCHIAAGFLJSMEDIMFDYERXLVNRSFVDHMRXWIANEOLHPLHNROWCIOTXDFADHOENHIAETXAETKOAIZRVTXLOGAURHOLOGFAIHAUTOIHFBXNTESIAYBAESEJESEWNAIPDIMNHIOBIHESDAERRGCNLTFOOGFJESEWNOSTJAIPDIOUOTNRCGESDHMAIPULHPESTLITJGNAETUAETXEUSFUILSCDLVWOLURDCOUTKAWNTLMTCOEIECWDHTLQJXNXTXAIHAUCSESDHESTYVNCGSCTEPHFZEDIDFAJTMEJBCWDLXHAYBAIIENKLVNIYZRKDFVNDCNTEPZQRSFOTPBNRAESTZRBECWKSBWHTGWNRUYNQUUNHIOAQEWIYICAHZYKIELHQOWHOVWURIUTHTHTEPRXOVROTTNKWOMOSXNFHIGDFPNDIIANGRELTOOFTNRCTESDTFNKBTLGTMLKGYNAFESDIUTRDOMOHOLJEKLCTLMTCOAETFAEDMEBHOTQDMUNLVNIZECIAOLHBUBNROFSSFADPOLURGRBECSTCODCTNNCHOONRIATEPENSFOTYCBAUVASRIASTVLVTVNCTESDYSETQIEDDFJEDZSNROWHLOMTQEWIYUBKSFHAYCWVDCYTEPHCSEWIYITRTZWODUUKSQWHURMIQOEOTMRHTRMIQOEOJOMOGPOATXDCGCYUTMLHGAAUGTNAYENHPOOFBFRIYOFIIELCASNOLXHNGIGIDCAEDMDCGLTDAWYOLIEUGXADVCWRISUUTESDBZLHLAEBSPTQAIPDHOACTIALRKEAQITJBSFLGMEAWPNNROHKSQNALOCIYUFAQITJBSFLGMEAWPNNROHORURNPOEDHENCIESDYMATYCWHUIURFSVELSUMDMNTQVEIECWDHMWHPSGAPALJEKMTLSRHSPCIZXEDGNLULSRHSNADHITJWOCTZMNNROCIIERXHAUHDFVAIMYCTERFTIAJTIENSMSAUVLOLVNUGMAIFMATBSUM

The keys are generated based on appeared frequency of each letter in the cryptgram and general text. For example, the first element, 'l' : 'e' means that the 'l' corresponds 'e'. This implies that the letter 'l' is most appeared in your input cryptgram, and corresponds to 'e' because the 'e' is the most frequently appeared letter in general. However, the substition solver sometimes does not work properly because the order of appeared frequency in your cryptgram does not always corresponds the order of appeared frequency in general text. Sorry for your inconvinience. The code will be updated in the future.

Third, for vigenere cipher, you can find output like this.

Vigenere
-----------------------------------------------------------
[[1, 2, 22, 0.06575579384296092], [1, 4, 15, 0.06649371613052], [2, 1, 4, 0.06575579384296092], [2, 2, 0, 0.06656948493683187], [2, 3, 18, 0.06677773150076358], [2, 4, 19, 0.06467212735434309], [3, 2, 8, 0.06677773150076358], [4, 1, 11, 0.06649371613052], [4, 2, 7, 0.06467212735434309]]
============> Calculate Manually!!

Each [i, j, g, IC] means when the difference between two keys a, b are g, the value of the Mutural I.C is IC. Each element is ordered from the one whose g is closest to 0.65. Choose sufficient number of the elements to solve equation and calculate the difference of each key from z_1.

5. [In case the cryptgram may be encrypted by vigenere] Input your calculated results in input/explorer_vigenere_input.csv

Based on your calculated results: z_1, z_2 = z_1 + d_2, z_3 = z_1 + d_3, z_4 = z_1 + d_4, ... , z_k = z_1 + d_n, please input each value as the following.

1,0
2,d_2
3,d_3
4,d_4
:
:
k,d_n

6. [In case the cryptgram may be encrypted by vigenere] Excecute explore_vigenere.py

$ pipenv run python explore_vigenere.py

When you excecute on repl.it, please install wordninja by $ pip install wordninja

After excecution, you can see the result of decryption at output/vigenere_result.txt The number from 0 to 25 represents the value of z_1.

7. [Option] Copy and paste the obtained meaningful text to input/split_text_input.txt and excecute pipenv run python split_text.py

You can obtain splitted text.

0 : XLIWIWMXYEXMSRWEWVIGEPPIHFCTPEXSERHEWZMZMHPCEGXIHYTSRFCGSVXIDLEZIEGSQQSRERHMRXIVIWXMRKYRHIVPCMRKPSKMGRSXMGIXLEXXLIWSPHMIVWEVIRSXQSXMZEXIHXSVIXVIEXNYWXSVIZIRQEMRPCFCXLIMVVEXMSREPEWWIWWQIRXSJXLIHERKIVWSJFEXXPIERHFCXLIMVWIPJMRXIVIWXVEXLIVXLICHMWGSZIVEWSYRHVIEWSRXSVYREAECFCVIEPMDMRKXLEXALEXMXQEOIWWIRWIJSVXLIQXSHSHITIRHWSRALEXMXAMPPQEOIWIRWIJSVSXLIVWXSHSERHXLEXEPPSJXLISXLIVWGERRSXMGIXLMWXSSIZIREUYMXIFVEZIWSPHMIVQECTVIJIVXSVYRVEXLIVXLERLIVSMGEPPCFYXTSMRXPIWWPCHMIXVCMRKXSWXIQXLISRGSQMRKXMHIEPPFCLMQWIPJXLYWAIGSYPHMQEKMRIAMXLSYXGSRXVEHMGXMSREGMVGYQWXERGIMRALMGLEREVQCEPPSJALSWIQIQFIVWEVIFVEZIJPIIWEXXSTWTIIHFIJSVIXLIIRIQCQEOIWEQSZIMJXLIWSPHMIVWVIEPPCEVIFVEZIXLIRXLMWWYVIPCMWRXXLISYXGSQIERCSJXLIQAERXIHIEGLASYPHLEZITVIJIVVIHXLEXEPPWXERHERHJMKLXALEXAILEZILIVIXLIRMWEGEWIMRALMGLXLIMRXIVEGXMSRSJQERCMRHMZMHYEPPCVEXMSREPHIGMWMSRQEOMRKTVSGIWWIWSRITVSGIWWTIVWSPHMIVTVSHYGIWERSYXGSQIMRXIRHIHFCRSSRIQSWXEVQMIWXVCXSEZSMHXLMWTVSFPIQNYWXEWGSVXIDHMHWMRGIXLICGERXYWYEPPCQEOIVIXVIEXTLCWMGEPPCMQTSWWMFPIXLICQEOIMXIGSRSQMGEPPCMQTSWWMFPIXLICWLSSXHIWIVXIVWXLIRWXERHMRKERHJMKLXMRKMWIEGLWSPHMIVWMRHMZMHYEPPCVEXMSREPGSYVWISJEGXMSREJXIVEPPFIGEYWIXLIGSWXSJVYRRMRKMWWYVIXSFIEXPIEWXEWLMKLEWXLIGSWXSJWXECMRK


1 : YMJXJXNYZFYNTSXFXWJHFQQJIGDUQFYTFSIFXANANIQDFHYJIZUTSGDHTWYJEMFAJFHTRRTSFSINSYJWJXYNSLZSIJWQDNSLQTLNHSTYNHJYMFYYMJXTQINJWXFWJSTYRTYNAFYJIYTWJYWJFYOZXYTWJAJSRFNSQDGDYMJNWWFYNTSFQFXXJXXRJSYTKYMJIFSLJWXTKGFYYQJFSIGDYMJNWXJQKNSYJWJXYWFYMJWYMJDINXHTAJWFXTZSIWJFXTSYTWZSFBFDGDWJFQNENSLYMFYBMFYNYRFPJXXJSXJKTWYMJRYTITIJUJSIXTSBMFYNYBNQQRFPJXJSXJKTWTYMJWXYTITFSIYMFYFQQTKYMJTYMJWXHFSSTYNHJYMNXYTTJAJSFVZNYJGWFAJXTQINJWRFDUWJKJWYTWZSWFYMJWYMFSMJWTNHFQQDGZYUTNSYQJXXQDINJYWDNSLYTXYJRYMJTSHTRNSLYNIJFQQGDMNRXJQKYMZXBJHTZQINRFLNSJBNYMTZYHTSYWFINHYNTSFHNWHZRXYFSHJNSBMNHMFSFWRDFQQTKBMTXJRJRGJWXFWJGWFAJKQJJXFYYTUXUJJIGJKTWJYMJJSJRDRFPJXFRTAJNKYMJXTQINJWXWJFQQDFWJGWFAJYMJSYMNXXZWJQDNXSYYMJTZYHTRJFSDTKYMJRBFSYJIJFHMBTZQIMFAJUWJKJWWJIYMFYFQQXYFSIFSIKNLMYBMFYBJMFAJMJWJYMJSNXFHFXJNSBMNHMYMJNSYJWFHYNTSTKRFSDNSINANIZFQQDWFYNTSFQIJHNXNTSRFPNSLUWTHJXXJXTSJUWTHJXXUJWXTQINJWUWTIZHJXFSTZYHTRJNSYJSIJIGDSTTSJRTXYFWRNJXYWDYTFATNIYMNXUWTGQJROZXYFXHTWYJEINIXNSHJYMJDHFSYZXZFQQDRFPJWJYWJFYUMDXNHFQQDNRUTXXNGQJYMJDRFPJNYJHTSTRNHFQQDNRUTXXNGQJYMJDXMTTYIJXJWYJWXYMJSXYFSINSLFSIKNLMYNSLNXJFHMXTQINJWXNSINANIZFQQDWFYNTSFQHTZWXJTKFHYNTSFKYJWFQQGJHFZXJYMJHTXYTKWZSSNSLNXXZWJYTGJFYQJFXYFXMNLMFXYMJHTXYTKXYFDNSL
:
:

Use Case

Cryptgram you want to decrypt

XHWLISAMYALBSNKTWRWVELDXHBQIPALHENVTWVAOMDDRECLXHUHHRBQVSRLXDHSOIAUHQMGGENVBRTWKISLBRGMGHEJECIFZPOYBGNGMMCWMLALMLEKHPDAXVSSKINGMQOLBZALXHTGKITJXETBNWTGKIVWGQAAGPYTRXHWBVRSMMOFTPAKLISKFINLHJTZXHAFZIRKHJBSMXLWTRDTRXHWBVSWEJIFMIRWLXRSMLEJMLEQWMSUHZEJTWOMGHRWTWOFMSRMGEWSRFYJXELASMNYMLALPLALBXMSDISKXRSWYSRLAIMLHHOVXTEFWWOFPLALBXWAEPMSDISWGWEXHVOLAIRKMSDGTRDLAETSEPOXMLEGMLEJLGAFGSTAVITZBWTGHIVWGEQMBXETKEVWLSLVBIRETCPJXJEJMSRMGVALAIRLAENZXVOAVELDRFULISIFMPEKLPYVBITJRMNYMSSLXQTZXSNUHQIFZXIVXELDUCHAFWEDYXHMLAEUHYLVBQAYBREOBXHGNXCGGXRSWMCLBSNSVMRUNQSLTRCWBRWZBGHSGERERELDHJWZHWEEXQBWKWAJXFRSOIFDXISSMXOHLTEWWFEXHVELAIEFXQYETOEKTQONXMFLAISGEHIWKWRWTPLQTVETKEVWMLEFMLIKLYRWECIKGXTZXSULVSMWTRYGYXHWFAAFMIDWTGHOHYLVAEVWIVEXXVRWWXHSMELDLXAFWENVYMGZMAHSMAEZTZEZXVELAINALECSLIIFPLIUAXHWBRTWKECLBSNGYQAFRMNVBZIVNELDRVALBSNSEHEUBWIGGQACBRGHKSCWLWEKHREHKSCWLWPWKWODWMEJIVOVNGEKTROMMGOEXMNLXRDWWFYFHSNWFSSLTVMAXWTJRXOSOSIVMLIKIVOTEIMBNWTSLGOJMIZVBHSAGGELAIYUTRTMLYADECMSDIRWMVESMTHQLMCSEPYAFTOKLMBDXXHWRQACXMTWVSNGFMCSEPYAFTOKLMBDXXHWRWHGHXDWLIRLXVSLAINKMENVBRGSGHFAZLTAGKIKXECZLSLVBIRKBRDAOMDMTPLQKETAHRADVSUJLIOXTGTAHRAXMIRSEPBWVEUKXXHWVSSLHJRMGRIFZMSKNVELHFESMPESLXAKAMGZTWTZXGOKMSFKMEYAGK

We will show you each step from step 3 to decrypt cryptogram shown above.

[Step 3] Copy and Paste a cryptogram you want to decrypt to input/cryptogram.txt.

XHWLISAMYALBSNKTWRWVELDXHBQIPALHENVTWVAOMDDRECLXHUHHRBQVSRLXDHSOIAUHQMGGENVBRTWKISLBRGMGHEJECIFZPOYBGNGMMCWMLALMLEKHPDAXVSSKINGMQOLBZALXHTGKITJXETBNWTGKIVWGQAAGPYTRXHWBVRSMMOFTPAKLISKFINLHJTZXHAFZIRKHJBSMXLWTRDTRXHWBVSWEJIFMIRWLXRSMLEJMLEQWMSUHZEJTWOMGHRWTWOFMSRMGEWSRFYJXELASMNYMLALPLALBXMSDISKXRSWYSRLAIMLHHOVXTEFWWOFPLALBXWAEPMSDISWGWEXHVOLAIRKMSDGTRDLAETSEPOXMLEGMLEJLGAFGSTAVITZBWTGHIVWGEQMBXETKEVWLSLVBIRETCPJXJEJMSRMGVALAIRLAENZXVOAVELDRFULISIFMPEKLPYVBITJRMNYMSSLXQTZXSNUHQIFZXIVXELDUCHAFWEDYXHMLAEUHYLVBQAYBREOBXHGNXCGGXRSWMCLBSNSVMRUNQSLTRCWBRWZBGHSGERERELDHJWZHWEEXQBWKWAJXFRSOIFDXISSMXOHLTEWWFEXHVELAIEFXQYETOEKTQONXMFLAISGEHIWKWRWTPLQTVETKEVWMLEFMLIKLYRWECIKGXTZXSULVSMWTRYGYXHWFAAFMIDWTGHOHYLVAEVWIVEXXVRWWXHSMELDLXAFWENVYMGZMAHSMAEZTZEZXVELAINALECSLIIFPLIUAXHWBRTWKECLBSNGYQAFRMNVBZIVNELDRVALBSNSEHEUBWIGGQACBRGHKSCWLWEKHREHKSCWLWPWKWODWMEJIVOVNGEKTROMMGOEXMNLXRDWWFYFHSNWFSSLTVMAXWTJRXOSOSIVMLIKIVOTEIMBNWTSLGOJMIZVBHSAGGELAIYUTRTMLYADECMSDIRWMVESMTHQLMCSEPYAFTOKLMBDXXHWRQACXMTWVSNGFMCSEPYAFTOKLMBDXXHWRWHGHXDWLIRLXVSLAINKMENVBRGSGHFAZLTAGKIKXECZLSLVBIRKBRDAOMDMTPLQKETAHRADVSUJLIOXTGTAHRAXMIRSEPBWVEUKXXHWVSSLHJRMGRIFZMSKNVELHFESMPESLXAKAMGZTWTZXGOKMSFKMEYAGK

[Step 4] Execute main.py

$ pipenv run python main.py

After this step we cannot find any meaningful sentences in output/result.txt. Then, we choose sufficient number of the elements to solve equation and calculate the difference of each key from z_1. In this case, the output from vigenere-solver is as follows.

Vigenere
-----------------------------------------------------------
the number of keys m is 4
[[1, 2, 22, 0.06575579384296092], [1, 4, 15, 0.06649371613052], [2, 1, 4, 0.06575579384296092], [2, 2, 0, 0.06656948493683187], [2, 3, 18, 0.06677773150076358], [2, 4, 19, 0.06467212735434309], [3, 2, 8, 0.06677773150076358], [4, 1, 11, 0.06649371613052], [4, 2, 7, 0.06467212735434309]]
============> Calculate Manually!!

Based on the results, we solve the following equation.

unnamed

Now, the obtained answer is z_1, z_2 = z_1 + 4, z_3 = z_1 + 12, z_4 = z_1 + 11

[Step 5] [In case the cryptgram may be encrypted by vigenere] Input your calculated results in input/explorer_vigenere_input.csv

1,0
2,22
3,14
4,15

[Step 6] [In case the cryptgram may be encrypted by vigenere] Excecute explore_vigenere.py

$ pipenv run python explore_vigenere.py

After excecution, you can find meaningful text in output/vigenere_result.txt.

22 : THESESITUATIONSASRECALLEDBYPLATOANDASVIVIDLYACTEDUPONBYCORTEZHAVEACOMMONANDINTERESTINGUNDERLYINGLOGICNOTICETHATTHESOLDIERSARENOTMOTIVATEDTORETREATJUSTOREVENMAINLYBYTHEIRRATIONALASSESSMENTOFTHEDANGERSOFBATTLEANDBYTHEIRSELFINTERESTRATHERTHEYDISCOVERASOUNDREASONTORUNAWAYBYREALIZINGTHATWHATITMAKESSENSEFORTHEMTODODEPENDSONWHATITWILLMAKESENSEFOROTHERSTODOANDTHATALLOFTHEOTHERSCANNOTICETHISTOOEVENAQUITEBRAVESOLDIERMAYPREFERTORUNRATHERTHANHEROICALLYBUTPOINTLESSLYDIETRYINGTOSTEMTHEONCOMINGTIDEALLBYHIMSELFTHUSWECOULDIMAGINEWITHOUTCONTRADICTIONACIRCUMSTANCEINWHICHANARMYALLOFWHOSEMEMBERSAREBRAVEFLEESATTOPSPEEDBEFORETHEENEMYMAKESAMOVEIFTHESOLDIERSREALLYAREBRAVETHENTHISSURELYISNTTHEOUTCOMEANYOFTHEMWANTEDEACHWOULDHAVEPREFERREDTHATALLSTANDANDFIGHTWHATWEHAVEHERETHENISACASEINWHICHTHEINTERACTIONOFMANYINDIVIDUALLYRATIONALDECISIONMAKINGPROCESSESONEPROCESSPERSOLDIERPRODUCESANOUTCOMEINTENDEDBYNOONEMOSTARMIESTRYTOAVOIDTHISPROBLEMJUSTASCORTEZDIDSINCETHEYCANTUSUALLYMAKERETREATPHYSICALLYIMPOSSIBLETHEYMAKEITECONOMICALLYIMPOSSIBLETHEYSHOOTDESERTERSTHENSTANDINGANDFIGHTINGISEACHSOLDIERSINDIVIDUALLYRATIONALCOURSEOFACTIONAFTERALLBECAUSETHECOSTOFRUNNINGISSURETOBEATLEASTASHIGHASTHECOSTOFSTAYING

[Step 7] [Option] Copy and paste the obtained meaningful text to input/split_text_input.txt and excecute pipenv run python split_text.py

You can see the result in the console. The obtained text is as following.

SPLITTED
----------------------------------------------
THESE SITUATIONS AS RECALLED BY PLATO AND AS VIVIDLY ACTED UPON BY CORTEZ HAVE A COMMON AND INTERESTING UNDERLYING LOGIC NOTICE THAT THE SOLDIERS ARE NOT MOTIVATED TO RETREAT JUST OR EVEN MAINLY BY THE IRRATIONAL ASSESSMENT OF THE DANGERS OF BATTLE AND BY THEIR SELF INTEREST RATHER THEY DISCOVER A SOUND REASON TO RUNAWAY BY REALIZING THAT WHAT IT MAKES SENSE FOR THEM TO DO DEPENDS ON WHAT IT WILL MAKE SENSE FOR OTHERS TO DO AND THAT ALL OF THE OTHERS CAN NOTICE THIS TOO EVEN A QUITE BRAVE SOLDIER MAY PREFER TO RUN RATHER THAN HEROICALLY BUT POINTLESSLY DIE TRYING TO STEM THE ONCOMING TIDE ALL BY HIMSELF THUS WE COULD IMAGINE WITHOUT CONTRADICTION A CIRCUMSTANCE IN WHICH AN ARMY ALL OF WHOSE MEMBERS ARE BRAVE FLEES AT TOPSPEED BEFORE THE ENEMY MAKES A MOVE IF THE SOLDIERS REALLY ARE BRAVE THEN THIS SURELY ISNT THE OUTCOME ANY OF THEM WANTED EACH WOULD HAVE PREFERRED THAT ALL STAND AND FIGHT WHAT WE HAVE HERE THEN IS A CASE IN WHICH THE INTERACTION OF MANY INDIVIDUALLY RATIONAL DECISION MAKING PROCESSES ONE PROCESS PER SOLDIER PRODUCES AN OUTCOME INTENDED BY NOONE MOST ARMIES TRY TO AVOID THIS PROBLEM JUST AS CORTEZ DID SINCE THEY CANT USUALLY MAKE RETREAT PHYSICALLY IMPOSSIBLE THEY MAKE IT ECONOMICALLY IMPOSSIBLE THEY SHOOT DESERTERS THEN STANDING AND FIGHTING IS EACH SOLDIERS INDIVIDUALLY RATIONAL COURSE OF ACTION AFTER ALL BECAUSE THE COST OF RUNNING IS SURE TO BE ATLEAST AS HIGH AS THE COST OF STAYING 

About

cipher breaker for shift-cipher, substitute-cipher, and vigenere-cipher (using I.C, and Mutual I.C.)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages