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.
- Python 3.*
$ git clone https://github.com/camsenec/classical-cipher-breaker.git
$ cd classical-cipher-breaker
$ pipenv install
$ 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
$ 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
:
:
Cryptgram you want to decrypt
XHWLISAMYALBSNKTWRWVELDXHBQIPALHENVTWVAOMDDRECLXHUHHRBQVSRLXDHSOIAUHQMGGENVBRTWKISLBRGMGHEJECIFZPOYBGNGMMCWMLALMLEKHPDAXVSSKINGMQOLBZALXHTGKITJXETBNWTGKIVWGQAAGPYTRXHWBVRSMMOFTPAKLISKFINLHJTZXHAFZIRKHJBSMXLWTRDTRXHWBVSWEJIFMIRWLXRSMLEJMLEQWMSUHZEJTWOMGHRWTWOFMSRMGEWSRFYJXELASMNYMLALPLALBXMSDISKXRSWYSRLAIMLHHOVXTEFWWOFPLALBXWAEPMSDISWGWEXHVOLAIRKMSDGTRDLAETSEPOXMLEGMLEJLGAFGSTAVITZBWTGHIVWGEQMBXETKEVWLSLVBIRETCPJXJEJMSRMGVALAIRLAENZXVOAVELDRFULISIFMPEKLPYVBITJRMNYMSSLXQTZXSNUHQIFZXIVXELDUCHAFWEDYXHMLAEUHYLVBQAYBREOBXHGNXCGGXRSWMCLBSNSVMRUNQSLTRCWBRWZBGHSGERERELDHJWZHWEEXQBWKWAJXFRSOIFDXISSMXOHLTEWWFEXHVELAIEFXQYETOEKTQONXMFLAISGEHIWKWRWTPLQTVETKEVWMLEFMLIKLYRWECIKGXTZXSULVSMWTRYGYXHWFAAFMIDWTGHOHYLVAEVWIVEXXVRWWXHSMELDLXAFWENVYMGZMAHSMAEZTZEZXVELAINALECSLIIFPLIUAXHWBRTWKECLBSNGYQAFRMNVBZIVNELDRVALBSNSEHEUBWIGGQACBRGHKSCWLWEKHREHKSCWLWPWKWODWMEJIVOVNGEKTROMMGOEXMNLXRDWWFYFHSNWFSSLTVMAXWTJRXOSOSIVMLIKIVOTEIMBNWTSLGOJMIZVBHSAGGELAIYUTRTMLYADECMSDIRWMVESMTHQLMCSEPYAFTOKLMBDXXHWRQACXMTWVSNGFMCSEPYAFTOKLMBDXXHWRWHGHXDWLIRLXVSLAINKMENVBRGSGHFAZLTAGKIKXECZLSLVBIRKBRDAOMDMTPLQKETAHRADVSUJLIOXTGTAHRAXMIRSEPBWVEUKXXHWVSSLHJRMGRIFZMSKNVELHFESMPESLXAKAMGZTWTZXGOKMSFKMEYAGK
We will show you each step from step 3 to decrypt cryptogram shown above.
XHWLISAMYALBSNKTWRWVELDXHBQIPALHENVTWVAOMDDRECLXHUHHRBQVSRLXDHSOIAUHQMGGENVBRTWKISLBRGMGHEJECIFZPOYBGNGMMCWMLALMLEKHPDAXVSSKINGMQOLBZALXHTGKITJXETBNWTGKIVWGQAAGPYTRXHWBVRSMMOFTPAKLISKFINLHJTZXHAFZIRKHJBSMXLWTRDTRXHWBVSWEJIFMIRWLXRSMLEJMLEQWMSUHZEJTWOMGHRWTWOFMSRMGEWSRFYJXELASMNYMLALPLALBXMSDISKXRSWYSRLAIMLHHOVXTEFWWOFPLALBXWAEPMSDISWGWEXHVOLAIRKMSDGTRDLAETSEPOXMLEGMLEJLGAFGSTAVITZBWTGHIVWGEQMBXETKEVWLSLVBIRETCPJXJEJMSRMGVALAIRLAENZXVOAVELDRFULISIFMPEKLPYVBITJRMNYMSSLXQTZXSNUHQIFZXIVXELDUCHAFWEDYXHMLAEUHYLVBQAYBREOBXHGNXCGGXRSWMCLBSNSVMRUNQSLTRCWBRWZBGHSGERERELDHJWZHWEEXQBWKWAJXFRSOIFDXISSMXOHLTEWWFEXHVELAIEFXQYETOEKTQONXMFLAISGEHIWKWRWTPLQTVETKEVWMLEFMLIKLYRWECIKGXTZXSULVSMWTRYGYXHWFAAFMIDWTGHOHYLVAEVWIVEXXVRWWXHSMELDLXAFWENVYMGZMAHSMAEZTZEZXVELAINALECSLIIFPLIUAXHWBRTWKECLBSNGYQAFRMNVBZIVNELDRVALBSNSEHEUBWIGGQACBRGHKSCWLWEKHREHKSCWLWPWKWODWMEJIVOVNGEKTROMMGOEXMNLXRDWWFYFHSNWFSSLTVMAXWTJRXOSOSIVMLIKIVOTEIMBNWTSLGOJMIZVBHSAGGELAIYUTRTMLYADECMSDIRWMVESMTHQLMCSEPYAFTOKLMBDXXHWRQACXMTWVSNGFMCSEPYAFTOKLMBDXXHWRWHGHXDWLIRLXVSLAINKMENVBRGSGHFAZLTAGKIKXECZLSLVBIRKBRDAOMDMTPLQKETAHRADVSUJLIOXTGTAHRAXMIRSEPBWVEUKXXHWVSSLHJRMGRIFZMSKNVELHFESMPESLXAKAMGZTWTZXGOKMSFKMEYAGK
$ 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.
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
$ 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