diff --git a/code/fried.py b/code/fried.py new file mode 100644 index 0000000..c7c8fcb --- /dev/null +++ b/code/fried.py @@ -0,0 +1,25 @@ +import numpy as np +transposes = ['GADSJFEDVAWFYJSGLSGFVELTSWZGKNYGWGKWFZWZJFJZFDLFJKFLLJLESJUVFHMJWKJNWAVSKSHWSWHGWEZWGATVDJLMWWWWODAUUJFTSDFFLSWAAEUFKJQSKJFGYWAAVFVLSSVLJWTVSWJLJFFFZJWLQSAGQFAZEDFSZGDFVSKEJXDLFOZGVKHNGETLLKGKWHJLZLJEXGWDHWAGLJGGOKSLHMSXWAVWGZWEWAAJVSJGWYXUAKXYZVXJGYFDGXMKFASFAAHGDAHYJJZWXWWGWXJZWLHVLDIFJWJWLGALFEWWMAFKZLAWLAZGVHXQSKGZJLLDVWFWAYWFZFVWYFSDDDXMWWAWQQLXZGFYFAVBSALVJDAJGELLGDW', 'BUSYARSCSBFUSOAAHHFCWSVSFFCCVOVAOFHFHSBSSGIDHZOSSHUCWSFPHSSCRFZVBOISPKGACAWFFOSCFCOFRBHFSSVBGBCGVSGVYSROAZAOOHTRGMSKOMVAASRDHBFBOCOVBACKRRSIZADOSMUHSBQKQBGQUHBHSMWBSFZZWWOSSCDBPOGJCHHSCSIHVDBGKCHSSSQIFKASSTFFVCOIVWBTDBGORGSRDCCCBBBOOHRCJWHMBCMFOCMCFOUSHWFCRBRWCBZSJBZCSSHBFBFCRZWZGVWBVSISUBODVDFVHDSGBGQVOFGPSASFWFPHHPHWFVOQAOCORSEBOCCYUHBISIHZOGHAPVVASFBGUBPIAGVSSOACBMVZBZF', 'CHIAACORDGEANPBEEMOTSMERAWSREITMSRLAMAORAASUHESVSIOOSNAEEAAONEGENILNUAOEFENDCRNRERTITGIEVAEBTONPINPOTMNCBMEGPLOISWLHNEEOYTNEHWTTSFYECIRIOARPLYENTBMOGDOORDARRRGLWNGSREEYSNNALRAOESEEOUUHRATIEOEOOUHRRRETINOASODEEKPBATDRYMTSFSNIELFRSGTICIAREBOUKMOISMOAEGBEHENMMIANNGIREGIESTTSOSATOOEEESTEYNAPEOVRIHDEOEHODDHOUUTALPRETOIHBYHSOIILANRNELUETFREEODTAMHHVSTYEEYYREETSGUSBEEMAMSWTSAITBM', 'YNJHHOZYHMWMNJYPLSHBNVVUNLNYXHNSYIYLUHLYHXNLLXNYIFZXMNHLPNNLIMLMIXSYNMALUNAIYXYXUYXHBZHUYGMLCNFIMIYGBYIEYSVUJILMICYUXRUGMCIHYCUBNNMFYHMNLVXIUWLXBCSMLYOLYMCUCUZSBUBBUGXZWFMHYQAFCVYBLJLCQMNHJEQOLLYYNYFNYVLPBLMMMYNNNMMIGYYNUIVLNSHYNUIAOHHNFYFHCCLGNCLENYORYLYMIHNAMNAVNQALMBBYGYJZHIXHUYYJGIZYNLYIHYILLMYFUYUGHFBFFFUJBJLUYNUMQHXUCAYXHMIPQJZXNNNIPYUUYOBXUUZXUUPCNIMNYSMIGJNMBINYBYI', 'MVGVQJXOWMSGDAJAWUDAAWDFWGMSLDGTGOFWAYWXVMDHAEAJLDEJGJUVAAELLWWADAQKLFWSASSGOQVSFVSYWWYEJTAGDGQCHJJMWJLAJKMAAMWMEFLLLHJWLKLZKLFWSZGWEMLZDGGFKZUFWJKESUFWKZVNENJKSELGNMLGGQOANWJAFDAATGWKAFZYDWGDVFJVZVQWFWJWSWSLLFDDAGLESJJSKFGYZTWTADKZKXVZNLALFFWMDFWAZVLHXQVUJYWGNZZMNAZKSWWJSJZSLJLLFFJWWJXFLWFHYLJLOLJSMKFWLQWEEGNJAZVLFZVGDLWKVWUJOFLWGSAMLZZFWSLLEFWGCJGGNFWDAFLSJWWFADJZWMKKWDJ', 'CEAJNVBUNQZSLAQFQULAAERQQHCTULOBSSBNQRABGAVYYRPSUGLRZRRBFALUUAJGBBBFUNACACGENBJEQREYENQFQRYXYXJRRRREJRUAGBEAAQFERQZGUYGARGURUUQEGRSNNGNZNIBNWNUBAQNVIBGGGNNRNRBUGRFERPUJHGRANPRITRAFVAQPGRRYNBEVUBGARGZEQSBZIGVNVOLRGABFFPSAGTERNHIHYYZGUEORRBABTBJALBZAVVAEBRVBRJNARNGGVGGUUANCAFVYUJUGTGRAZRGGUDAUBFQRUGRGARGORVEVRERBARBUQNBHNUACRYYNUNUEEERCURRVAFYULOOBSGEBRQEYYGBOQFRFAVRVSYUSSVR', 'OEDEQORIRDESRGOITATGCIAEYGOEEIOOSORNELARHCNELWTEAHHPEAAOIGCIITSANRUIEPTPTPMTSUIKNEKOERRNAFEENEONRTDMOLITUUNIGEUETOEHIOBTRHIRUMFEESYSDEYIDERBUMETTBDLEREHBVRNNNMOTIPENHILRHRGNAEIESGCRTBHHVROCNDNETHONIOESOWEEHDRLYSSULROTIODESESTRETLMIIIOUNTOKFWUHGGUEGSNOEWYNRIISTLTGWOHGENMIEUWMLERYHETSTOQHHIUEEFTEMEOAETREYDIENTENPGTRESTRLDENANSADOMTMDTNSETNAOAISLRURRAMRNTFILHFOOHMTGGASLFALLF', 'JWAWQQCHHAWKWWKPWIDIPPGWEDJNIDNGKNAZJOIAAACYAEAHPAAARPPNPADOJHPPCINEBLHEHEUDODZJKLJJSEAKNKJJAJNSADWQNUJKNHEDONNHDSOAONAWUAJAPWHOHWKPAOAAUILQOXZDDABEWQJKAAPCZSPNDOHMJEOPOKHHYJEJROXDZDQWOAWJEHWPZDAPDHNZDNDWBAJPHNLOPUAIABHBNKPKIZNPXUHSKJOQOGEWDOWWWOWJECOOHAPAOPADRPHDHPHOAANNJQSOPACAHDLDNQEAOKRPAERLPOOUAPZDPIECAMJDKOZWWCASAZEOSJOEIADKKEZPAAEJXPALKKOPKJBMJDHOEALRKWEDWDIOKNZKKP', 'JAAAJBXNHWCVYCAXYKRXUFMLWCCUXJABACOAFWNEBAXDMCACWKJJRRVBXWJRPHARNJOVJRHWHWLJDNNNCRNPXWJVNALJBJMJMRWAMCPCWFWNXCNHRUNAVNBWNFPRCWDCHRAXQCMWYHNBCNJRRPJWWVJDBWBQJJQNHXDDNVDXNDRRHWWPNNRJXNBVDAENMHBQRRWJNUNXJNNBUWNUWNXBCBLNADUXCWRONNWQNORQWCCYRVWWJKCRDKWNBDHBFBXCJQANNQXXNQXQECPOBWQCDCXNBNRNRJBJUCNBEURCQBQNMUXXNYBRUDNNOCNEKXCRWRCJQJYJCUNADWRJKVPBUXCXWTCJVMADNNRBBYJNAEWJWCRQXXXJXN', 'VHNHRECRWUJNYVCAYNBAHJNQPRQHAMXBAQXJQJUNRCOAVQAKXNACBWHXACVCVVXWAMXYLWHPHPQCAACBQWBRWPVXMNNWBWCBFBMNUQVQRRPJVQUCWJNNHUCMGRVONHCNAWNKNXQXNLACJAWWBDWPMXWPQCDJWWNCUWCXEJWQBPCCKXPQAMAVABCKLVNUKCRJMWQOORCCEXFVXCENNYTJNCJDFUXURNUQUWNNPJWNNXJXWHPLCRCWWRCEJNURQWVQCVNLCNJBCNJJNQADNPXROLMKQNCONOTWXQAJRUUNNNXCXJWAUUCUUXECNRENXMNCRBBRXVJWQNANAPBAJYQQJTQTNNJTXCXXEACRBJUVJNPCMXWJAVFCAM', 'IWDONOTNAYPOIYIIIRAEISCSETEIRSWUOERDOMERLAETEFOEWATIIGCMERBIOYNGSARLTGOAOTAIEEHSITSSDDIRTBWDGDHTOIADEIOENTSREAYHGTTASEITPNOLRATPATNENPEFRHCOBDDGEICBSFCHOHRSCDNEOTOTERGEOHTTOTTUYWDBBCAEHONYUHFTOGEELSHHENIYWHEDSLEIROUNHDWLLBLIABVRUNGEDFNNKSFYTRHLTRIETSLNOOYIDYCULLTELLTLROEMEBSNTHHYERERSFIDSTMILIWRRDRANNTRLOHEMTESVLINVWLHFTHNMERTENABSBHTCETOCEYELNBEUAMTEATTILLYNAOITEGDAOTISN', 'JNCBZRKUVZVTTIYSTJTGXOKKSYLCUULXCRZOSKYSQOGGLGXLZZOTZKNKTGKYXYMZOSMUOGATAGSYOOKZTUVZKUTZUAGZGZKNXCTHTYXIMNUJCTYGGZNZZZRNRJXACLKVBRUOUVHRIGNLUUYSHREEZZKZXUKZOKORXNTNXBGGVORRXNNSKOGKKAHXTXYUYGNUALAGAIGKLZRNTKXGYETJYIMNUOKURAZYTUKGOIYRYHJZOKGZNJOEGJTXKYGMYCHYONRYOGKBOGORSACKTEKQKOGZNKGUUUTLZNUJVLNYZZKRZJNUSXKGKNXGORRZKKRYCGGZZRGSGUBKOOXOQYYXQTYTOWUZZQUNXBOZZRGIJRLYNXZUTANTNK', 'BWSSOIBRDVWSUVGIUCRVSBADPUZWKIFQGCVOHZGCSBQWWBGCCWGUCBOZHBFOSCSVFHWFGBQRQDPQVCRVUHSCFIUORHGVJVFSRVSOCOSVOWCOVPOHHWSWSAZWCOSBVZFSSMHGHSICVASDJCOCCWWHSVWVBIBZSFUZRSWHASWFZHSSSSOOHHPFOZCROSWBHHWBHOHHHOBFZVZCPPAHPGRWWYVOAGRKVFVVQFFJZMHSSWRVBZBVWCGUBCQABWPHSPCOJSWVBARSBABDCURRQGTZRQHVOGBATVRCZSFWFPSSSVRZVSWFSSFRWHAWZWPVIPHCWBZSVSFOBFSHUFWBWHDSDCCZBIJVASTHASBWHWGVVZORSVVKRHOUOJ'] + +def compute_frequencies(block): + letter_count = {} + letters = [chr(i) for i in range(ord('A'), ord('Z')+1)] + for l in letters: + letter_count[l] = block.count(l) + return letter_count + +def coincidence(block): + compute_frequencies(block) + freq = compute_frequencies(block) + sum = 0 + for f in freq: + sum += freq[f] * (freq[f]-1) + kappa = float(sum)/(len(block) * (len(block)-1)) + return kappa +for t in transposes: + print("kappa", coincidence(t)) + +for t in transposes: + d = compute_frequencies(t) + + print(chr((ord('E') - ord(d.keys()[np.argmax(d.values())]))%26+65))