> xsecret; WZHEZHKZVPKWZHEZHKZVPKWZHEZHKZVPKLGBZIYZHHQGMWKXZHHKFLEYKZMWILYKMWKNQCWPGYIKYELIBZIYMWKHQ\ VWMTIQVZYKRWZIVKELIMWKVPGNWKNZQYQGMLMWKXZHHKFLEYKZMWILYKMWKNQCWPGYIKYELIBZIYMWKHQVWMTIQVZ\ YKBZNMWKIKZOZGYQNOZFYGLMMWLMWKNLHYQKIAGKBNLOKLGKWZYTHPGYKIYMWKQINGLMMLOZAKIKDHFMWKQINGLMM\ LIKZNLGBWFMWKQINTPMMLYLYQKQGMLMWKXZHHKFLEYKZMWILYKMWKNQCWPGYIKYRZGGLGMLIQVWMLEMWKORZGGLGM\ LHKEMLEMWKORZGGLGQGEILGMLEMWKOXLHHKFYMWPGYKIYNMLIOYZMBQMWNWLMNWKHHTLHYHFMWKFILYKBKHHQGMLM\ WKSZBNLEYKZMWQGMLMWKOLPMWLEWKHHILYKMWKNQCWPGYIKYEHZNWYZHHMWKQINZTIKNTZIKEHZNWYZNMWKFMPIGY\ QGZQINZTIQGVMWKVPGGKINMWKIKRWZIVQGVZGZIOFBWQHKZHHMWKBLIHYBLGYKIYDHPGVKYQGMWKTZMMKIFNOLAKI\ QVWMMWILMWKHQGKMWKFTILAKRLNNZRAIPNNQZGIKKHYEILOMWKNZTIKNMILAKNWZMMKIYNPGYKIYMWKGMWKFILYKT\ ZRATPMGLMGLMMWKNQCWPGYIKYRZGGLGMLIQVWMLEMWKORZGGLGMLHKEMLEMWKORZGGLGTKWQGYMWKOXLHHKFYMWPG\ YKIYNMLIOYZMBQMWNWLMNWKHHBWQHKWLINKWKILEKHHMWKFMWZMWZYELPVWMNLBKHHRZOKMWILMWKSZBNLEYKZMWT\ ZRAEILOMWKOLPMWLEWKHHZHHMWZMBZNHKEMLEMWKOHKEMLENQCWPGYIKYBWKGRZGMWKQIVHLIFEZYKLMWKBQHYRWZ\ IVKMWKFOZYKZHHMWKBLIHYBLGYKIYWLGLPIMWKRWZIVKMWKFOZYKWLGLPIMWKHQVWMTIQVZYKGLTHKNQCWPGYIKY > SortedFreqDist(xsecret); [ <0.125585755333304405212402343750, K>, <0.100281162187457084655761718750, M>, <0.0984067479148507118225097656250, W>, <0.0796626051887869834899902343750, L>, <0.0702905338257551193237304687500, Z>, <0.0684161195531487464904785156250, I>, <0.0646672910079360008239746093750, Y>, <0.0627928776666522026062011718750, G>, <0.0599812557920813560485839843750, H>, <0.0412371135316789150238037109375, N>, <0.0412371135316789150238037109375, Q>, <0.0299906278960406780242919921875, E>, <0.0243673850782215595245361328125, P>, <0.0215557639021426439285278320312, V>, <0.0206185567658394575119018554688, O>, <0.0196813496295362710952758789062, B>, <0.0178069353569298982620239257812, F>, <0.0159325210843235254287719726562, T>, <0.0149953139480203390121459960938, R>, <0.00749765697401016950607299804688, A>, <0.00656044983770698308944702148438, C>, <0.00468603562330827116966247558594, X>, <0.00187441424350254237651824951172, D>, <0.00187441424350254237651824951172, S>, <0.000000000000000000000000000000, J>, <0.000000000000000000000000000000, U> ] > /* > Surely K is E. If we are lucky then M is T and W is A. > */ > k:=tennyson!freqkey(xsecret); > k; BFVJUGHRNQEOTDWCLPXYZMAKSI > plain:=Enciphering(k,xsecret); > plain; AIRUIREIMCEAIRUIREIMCEAIRUIREIMCEOHFINSIRRLHTAEKIRREGOUSEITANOSETAEDLVACHSNESUONFINSTAERL\ MATYNLMISEPAINMEUONTAEMCHDAEDILSLHTOTAEKIRREGOUSEITANOSETAEDLVACHSNESUONFINSTAERLMATYNLMI\ SEFIDTAENEIWIHSLDWIGSHOTTAOTAEDORSLENBHEFDOWEOHEAISYRCHSENSTAELNDHOTTOWIBENEJRGTAELNDHOTT\ ONEIDOHFAGTAELNDYCTTOSOSLELHTOTAEKIRREGOUSEITANOSETAEDLVACHSNESPIHHOHTONLMATOUTAEWPIHHOHT\ OREUTOUTAEWPIHHOHLHUNOHTOUTAEWKORREGSTACHSENSDTONWSITFLTADAOTDAERRYORSRGTAEGNOSEFERRLHTOT\ AEXIFDOUSEITALHTOTAEWOCTAOUAERRNOSETAEDLVACHSNESURIDASIRRTAELNDIYNEDYINEURIDASIDTAEGTCNHS\ LHILNDIYNLHMTAEMCHHENDTAENEPAINMLHMIHINWGFALREIRRTAEFONRSFOHSENSJRCHMESLHTAEYITTENGDWOBEN\ LMATTANOTAERLHETAEGYNOBEPODDIPBNCDDLIHNEERSUNOWTAEDIYNEDTNOBEDAITTENSDCHSENSTAEHTAEGNOSEY\ IPBYCTHOTHOTTAEDLVACHSNESPIHHOHTONLMATOUTAEWPIHHOHTOREUTOUTAEWPIHHOHYEALHSTAEWKORREGSTACH\ SENSDTONWSITFLTADAOTDAERRFALREAONDEAENOUERRTAEGTAITAISUOCMATDOFERRPIWETANOTAEXIFDOUSEITAY\ IPBUNOWTAEWOCTAOUAERRIRRTAITFIDREUTOUTAEWREUTOUDLVACHSNESFAEHPIHTAELNMRONGUISEOTAEFLRSPAI\ NMETAEGWISEIRRTAEFONRSFOHSENSAOHOCNTAEPAINMETAEGWISEAOHOCNTAERLMATYNLMISEHOYREDLVACHSNES > /* > This does not look very good > */ > Score(plain,Common); 478 > MostCommonPolygraphs(plain,3,0.01); {@ TAE, CHS @} [ 0.0442144873000940733772342427093, 0.0103480714957666980244590780809 ] > /* > On the theory that THE is meant to be the most frequent trigraph > let us swap A and H. > */ > swap("A","H",~k); > plain:=Enciphering(k,xsecret); > Score(plain,Common); 932 > plain; HIRUIREIMCEHIRUIREIMCEHIRUIREIMCEOAFINSIRRLATHEKIRREGOUSEITHNOSETHEDLVHCASNESUONFINSTHERL\ MHTYNLMISEPHINMEUONTHEMCADHEDILSLATOTHEKIRREGOUSEITHNOSETHEDLVHCASNESUONFINSTHERLMHTYNLMI\ SEFIDTHENEIWIASLDWIGSAOTTHOTHEDORSLENBAEFDOWEOAEHISYRCASENSTHELNDAOTTOWIBENEJRGTHELNDAOTT\ ONEIDOAFHGTHELNDYCTTOSOSLELATOTHEKIRREGOUSEITHNOSETHEDLVHCASNESPIAAOATONLMHTOUTHEWPIAAOAT\ OREUTOUTHEWPIAAOALAUNOATOUTHEWKORREGSTHCASENSDTONWSITFLTHDHOTDHERRYORSRGTHEGNOSEFERRLATOT\ HEXIFDOUSEITHLATOTHEWOCTHOUHERRNOSETHEDLVHCASNESURIDHSIRRTHELNDIYNEDYINEURIDHSIDTHEGTCNAS\ LAILNDIYNLAMTHEMCAAENDTHENEPHINMLAMIAINWGFHLREIRRTHEFONRSFOASENSJRCAMESLATHEYITTENGDWOBEN\ LMHTTHNOTHERLAETHEGYNOBEPODDIPBNCDDLIANEERSUNOWTHEDIYNEDTNOBEDHITTENSDCASENSTHEATHEGNOSEY\ IPBYCTAOTAOTTHEDLVHCASNESPIAAOATONLMHTOUTHEWPIAAOATOREUTOUTHEWPIAAOAYEHLASTHEWKORREGSTHCA\ SENSDTONWSITFLTHDHOTDHERRFHLREHONDEHENOUERRTHEGTHITHISUOCMHTDOFERRPIWETHNOTHEXIFDOUSEITHY\ IPBUNOWTHEWOCTHOUHERRIRRTHITFIDREUTOUTHEWREUTOUDLVHCASNESFHEAPIATHELNMRONGUISEOTHEFLRSPHI\ NMETHEGWISEIRRTHEFONRSFOASENSHOAOCNTHEPHINMETHEGWISEHOAOCNTHERLMHTYNLMISEAOYREDLVHCASNES > MostCommonPolygraphs(plain,3,0.008); {@ HCA, CAS, ATO, HEW, THE @} [ 0.00846660395108184383819379115710, 0.0103480714957666980244590780809, 0.00846660395108184383819379115710, 0.00846660395108184383819379115710, 0.0442144873000940733772342427093 ] > SortedFreqDist(plain); [ <0.125585755333304405212402343750, E>, <0.100281162187457084655761718750, T>, <0.0984067479148507118225097656250, H>, <0.0796626051887869834899902343750, O>, <0.0702905338257551193237304687500, I>, <0.0684161195531487464904785156250, N>, <0.0646672910079360008239746093750, S>, <0.0627928776666522026062011718750, A>, <0.0599812557920813560485839843750, R>, <0.0412371135316789150238037109375, D>, <0.0412371135316789150238037109375, L>, <0.0299906278960406780242919921875, U>, <0.0243673850782215595245361328125, C>, <0.0215557639021426439285278320312, M>, <0.0206185567658394575119018554688, W>, <0.0196813496295362710952758789062, F>, <0.0178069353569298982620239257812, G>, <0.0159325210843235254287719726562, Y>, <0.0149953139480203390121459960938, P>, <0.00749765697401016950607299804688, B>, <0.00656044983770698308944702148438, V>, <0.00468603562330827116966247558594, K>, <0.00187441424350254237651824951172, J>, <0.00187441424350254237651824951172, X>, <0.000000000000000000000000000000, Q>, <0.000000000000000000000000000000, Z> ] > /* > Assuming that we have T, H, E correct, we observe that H is the 3rd most > frequent letter. A moment ago we swapped H and A, and that has probably > resulted in A being lower in the frequency table than it ought to be. The > frequency of I would usually be less than the frequency of A. > */ > swap("A","I",~k); > plain:=Enciphering(k,xsecret); > Score(plain,Common); 1040 > plain; HARUAREAMCEHARUAREAMCEHARUAREAMCEOIFANSARRLITHEKARREGOUSEATHNOSETHEDLVHCISNESUONFANSTHERL\ MHTYNLMASEPHANMEUONTHEMCIDHEDALSLITOTHEKARREGOUSEATHNOSETHEDLVHCISNESUONFANSTHERLMHTYNLMA\ SEFADTHENEAWAISLDWAGSIOTTHOTHEDORSLENBIEFDOWEOIEHASYRCISENSTHELNDIOTTOWABENEJRGTHELNDIOTT\ ONEADOIFHGTHELNDYCTTOSOSLELITOTHEKARREGOUSEATHNOSETHEDLVHCISNESPAIIOITONLMHTOUTHEWPAIIOIT\ OREUTOUTHEWPAIIOILIUNOITOUTHEWKORREGSTHCISENSDTONWSATFLTHDHOTDHERRYORSRGTHEGNOSEFERRLITOT\ HEXAFDOUSEATHLITOTHEWOCTHOUHERRNOSETHEDLVHCISNESURADHSARRTHELNDAYNEDYANEURADHSADTHEGTCNIS\ LIALNDAYNLIMTHEMCIIENDTHENEPHANMLIMAIANWGFHLREARRTHEFONRSFOISENSJRCIMESLITHEYATTENGDWOBEN\ LMHTTHNOTHERLIETHEGYNOBEPODDAPBNCDDLAINEERSUNOWTHEDAYNEDTNOBEDHATTENSDCISENSTHEITHEGNOSEY\ APBYCTIOTIOTTHEDLVHCISNESPAIIOITONLMHTOUTHEWPAIIOITOREUTOUTHEWPAIIOIYEHLISTHEWKORREGSTHCI\ SENSDTONWSATFLTHDHOTDHERRFHLREHONDEHENOUERRTHEGTHATHASUOCMHTDOFERRPAWETHNOTHEXAFDOUSEATHY\ APBUNOWTHEWOCTHOUHERRARRTHATFADREUTOUTHEWREUTOUDLVHCISNESFHEIPAITHELNMRONGUASEOTHEFLRSPHA\ NMETHEGWASEARRTHEFONRSFOISENSHOIOCNTHEPHANMETHEGWASEHOIOCNTHERLMHTYNLMASEIOYREDLVHCISNES > SortedFreqDist(plain); [ <0.125585755333304405212402343750, E>, <0.100281162187457084655761718750, T>, <0.0984067479148507118225097656250, H>, <0.0796626051887869834899902343750, O>, <0.0702905338257551193237304687500, A>, <0.0684161195531487464904785156250, N>, <0.0646672910079360008239746093750, S>, <0.0627928776666522026062011718750, I>, <0.0599812557920813560485839843750, R>, <0.0412371135316789150238037109375, D>, <0.0412371135316789150238037109375, L>, <0.0299906278960406780242919921875, U>, <0.0243673850782215595245361328125, C>, <0.0215557639021426439285278320312, M>, <0.0206185567658394575119018554688, W>, <0.0196813496295362710952758789062, F>, <0.0178069353569298982620239257812, G>, <0.0159325210843235254287719726562, Y>, <0.0149953139480203390121459960938, P>, <0.00749765697401016950607299804688, B>, <0.00656044983770698308944702148438, V>, <0.00468603562330827116966247558594, K>, <0.00187441424350254237651824951172, J>, <0.00187441424350254237651824951172, X>, <0.000000000000000000000000000000, Q>, <0.000000000000000000000000000000, Z> ] > /* > We have O higher in this table than A. Usually A is (slightly) more > frequent than O. > */ > swap("A","O",~k); > plain:=Enciphering(k,xsecret); > Score(plain,Common); 764 > /* > Worse! Much worse! Swap them back. > */ > swap("A","O",~k); > plain:=Enciphering(k,xsecret); > plain; HARUAREAMCEHARUAREAMCEHARUAREAMCEOIFANSARRLITHEKARREGOUSEATHNOSETHEDLVHCISNESUONFANSTHERL\ MHTYNLMASEPHANMEUONTHEMCIDHEDALSLITOTHEKARREGOUSEATHNOSETHEDLVHCISNESUONFANSTHERLMHTYNLMA\ SEFADTHENEAWAISLDWAGSIOTTHOTHEDORSLENBIEFDOWEOIEHASYRCISENSTHELNDIOTTOWABENEJRGTHELNDIOTT\ ONEADOIFHGTHELNDYCTTOSOSLELITOTHEKARREGOUSEATHNOSETHEDLVHCISNESPAIIOITONLMHTOUTHEWPAIIOIT\ OREUTOUTHEWPAIIOILIUNOITOUTHEWKORREGSTHCISENSDTONWSATFLTHDHOTDHERRYORSRGTHEGNOSEFERRLITOT\ HEXAFDOUSEATHLITOTHEWOCTHOUHERRNOSETHEDLVHCISNESURADHSARRTHELNDAYNEDYANEURADHSADTHEGTCNIS\ LIALNDAYNLIMTHEMCIIENDTHENEPHANMLIMAIANWGFHLREARRTHEFONRSFOISENSJRCIMESLITHEYATTENGDWOBEN\ LMHTTHNOTHERLIETHEGYNOBEPODDAPBNCDDLAINEERSUNOWTHEDAYNEDTNOBEDHATTENSDCISENSTHEITHEGNOSEY\ APBYCTIOTIOTTHEDLVHCISNESPAIIOITONLMHTOUTHEWPAIIOITOREUTOUTHEWPAIIOIYEHLISTHEWKORREGSTHCI\ SENSDTONWSATFLTHDHOTDHERRFHLREHONDEHENOUERRTHEGTHATHASUOCMHTDOFERRPAWETHNOTHEXAFDOUSEATHY\ APBUNOWTHEWOCTHOUHERRARRTHATFADREUTOUTHEWREUTOUDLVHCISNESFHEIPAITHELNMRONGUASEOTHEFLRSPHA\ NMETHEGWASEARRTHEFONRSFOISENSHOIOCNTHEPHANMETHEGWASEHOIOCNTHERLMHTYNLMASEIOYREDLVHCISNES > /* > I can see the string AIIOI a couple of times in the text, and clearly > we shouldn't have so many vowels in a row. Most likely the I should > be swapped with some consonant that can occur doubled. Maybe N. > */ > swap("I","N",~k); > plain:=Enciphering(k,xsecret); > Score(plain,Common); 922 > /* > The score decreased -- it used to be 1040 > */ > plain; HARUAREAMCEHARUAREAMCEHARUAREAMCEONFAISARRLNTHEKARREGOUSEATHIOSETHEDLVHCNSIESUOIFAISTHERL\ MHTYILMASEPHAIMEUOITHEMCNDHEDALSLNTOTHEKARREGOUSEATHIOSETHEDLVHCNSIESUOIFAISTHERLMHTYILMA\ SEFADTHEIEAWANSLDWAGSNOTTHOTHEDORSLEIBNEFDOWEONEHASYRCNSEISTHELIDNOTTOWABEIEJRGTHELIDNOTT\ OIEADONFHGTHELIDYCTTOSOSLELNTOTHEKARREGOUSEATHIOSETHEDLVHCNSIESPANNONTOILMHTOUTHEWPANNONT\ OREUTOUTHEWPANNONLNUIONTOUTHEWKORREGSTHCNSEISDTOIWSATFLTHDHOTDHERRYORSRGTHEGIOSEFERRLNTOT\ HEXAFDOUSEATHLNTOTHEWOCTHOUHERRIOSETHEDLVHCNSIESURADHSARRTHELIDAYIEDYAIEURADHSADTHEGTCINS\ LNALIDAYILNMTHEMCNNEIDTHEIEPHAIMLNMANAIWGFHLREARRTHEFOIRSFONSEISJRCNMESLNTHEYATTEIGDWOBEI\ LMHTTHIOTHERLNETHEGYIOBEPODDAPBICDDLANIEERSUIOWTHEDAYIEDTIOBEDHATTEISDCNSEISTHENTHEGIOSEY\ APBYCTNOTNOTTHEDLVHCNSIESPANNONTOILMHTOUTHEWPANNONTOREUTOUTHEWPANNONYEHLNSTHEWKORREGSTHCN\ SEISDTOIWSATFLTHDHOTDHERRFHLREHOIDEHEIOUERRTHEGTHATHASUOCMHTDOFERRPAWETHIOTHEXAFDOUSEATHY\ APBUIOWTHEWOCTHOUHERRARRTHATFADREUTOUTHEWREUTOUDLVHCNSIESFHENPANTHELIMROIGUASEOTHEFLRSPHA\ IMETHEGWASEARRTHEFOIRSFONSEISHONOCITHEPHAIMETHEGWASEHONOCITHERLMHTYILMASENOYREDLVHCNSIES > /* > I can see RRLN, which I don't like. Maybe the L should be a vowel. > */ > swap("I","L",~k); > plain:=Enciphering(k,xsecret); > Score(plain,Common); 972 > /* > Better ... > */ > plain; HARUAREAMCEHARUAREAMCEHARUAREAMCEONFALSARRINTHEKARREGOUSEATHLOSETHEDIVHCNSLESUOLFALSTHERI\ MHTYLIMASEPHALMEUOLTHEMCNDHEDAISINTOTHEKARREGOUSEATHLOSETHEDIVHCNSLESUOLFALSTHERIMHTYLIMA\ SEFADTHELEAWANSIDWAGSNOTTHOTHEDORSIELBNEFDOWEONEHASYRCNSELSTHEILDNOTTOWABELEJRGTHEILDNOTT\ OLEADONFHGTHEILDYCTTOSOSIEINTOTHEKARREGOUSEATHLOSETHEDIVHCNSLESPANNONTOLIMHTOUTHEWPANNONT\ OREUTOUTHEWPANNONINULONTOUTHEWKORREGSTHCNSELSDTOLWSATFITHDHOTDHERRYORSRGTHEGLOSEFERRINTOT\ HEXAFDOUSEATHINTOTHEWOCTHOUHERRLOSETHEDIVHCNSLESURADHSARRTHEILDAYLEDYALEURADHSADTHEGTCLNS\ INAILDAYLINMTHEMCNNELDTHELEPHALMINMANALWGFHIREARRTHEFOLRSFONSELSJRCNMESINTHEYATTELGDWOBEL\ IMHTTHLOTHERINETHEGYLOBEPODDAPBLCDDIANLEERSULOWTHEDAYLEDTLOBEDHATTELSDCNSELSTHENTHEGLOSEY\ APBYCTNOTNOTTHEDIVHCNSLESPANNONTOLIMHTOUTHEWPANNONTOREUTOUTHEWPANNONYEHINSTHEWKORREGSTHCN\ SELSDTOLWSATFITHDHOTDHERRFHIREHOLDEHELOUERRTHEGTHATHASUOCMHTDOFERRPAWETHLOTHEXAFDOUSEATHY\ APBULOWTHEWOCTHOUHERRARRTHATFADREUTOUTHEWREUTOUDIVHCNSLESFHENPANTHEILMROLGUASEOTHEFIRSPHA\ LMETHEGWASEARRTHEFOLRSFONSELSHONOCLTHEPHALMETHEGWASEHONOCLTHERIMHTYLIMASENOYREDIVHCNSLES > /* > I don't like these double R's very much. Maybe double L's would be better. > */ > swap("R","L",~k); > plain:=Enciphering(k,xsecret); > Score(plain,Common); 1180 > /* > That's our highest so far ... > */ > plain; HALUALEAMCEHALUALEAMCEHALUALEAMCEONFARSALLINTHEKALLEGOUSEATHROSETHEDIVHCNSRESUORFARSTHELI\ MHTYRIMASEPHARMEUORTHEMCNDHEDAISINTOTHEKALLEGOUSEATHROSETHEDIVHCNSRESUORFARSTHELIMHTYRIMA\ SEFADTHEREAWANSIDWAGSNOTTHOTHEDOLSIERBNEFDOWEONEHASYLCNSERSTHEIRDNOTTOWABEREJLGTHEIRDNOTT\ OREADONFHGTHEIRDYCTTOSOSIEINTOTHEKALLEGOUSEATHROSETHEDIVHCNSRESPANNONTORIMHTOUTHEWPANNONT\ OLEUTOUTHEWPANNONINURONTOUTHEWKOLLEGSTHCNSERSDTORWSATFITHDHOTDHELLYOLSLGTHEGROSEFELLINTOT\ HEXAFDOUSEATHINTOTHEWOCTHOUHELLROSETHEDIVHCNSRESULADHSALLTHEIRDAYREDYAREULADHSADTHEGTCRNS\ INAIRDAYRINMTHEMCNNERDTHEREPHARMINMANARWGFHILEALLTHEFORLSFONSERSJLCNMESINTHEYATTERGDWOBER\ IMHTTHROTHELINETHEGYROBEPODDAPBRCDDIANREELSUROWTHEDAYREDTROBEDHATTERSDCNSERSTHENTHEGROSEY\ APBYCTNOTNOTTHEDIVHCNSRESPANNONTORIMHTOUTHEWPANNONTOLEUTOUTHEWPANNONYEHINSTHEWKOLLEGSTHCN\ SERSDTORWSATFITHDHOTDHELLFHILEHORDEHEROUELLTHEGTHATHASUOCMHTDOFELLPAWETHROTHEXAFDOUSEATHY\ APBUROWTHEWOCTHOUHELLALLTHATFADLEUTOUTHEWLEUTOUDIVHCNSRESFHENPANTHEIRMLORGUASEOTHEFILSPHA\ RMETHEGWASEALLTHEFORLSFONSERSHONOCRTHEPHARMETHEGWASEHONOCRTHELIMHTYRIMASENOYLEDIVHCNSRES > MostCommonPolygraphs(plain,3,0.008); {@ HCN, HEW, CNS, THE, NTO @} [ 0.00846660395108184383819379115710, 0.00846660395108184383819379115710, 0.0103480714957666980244590780809, 0.0442144873000940733772342427093, 0.00846660395108184383819379115710 ] > /* > I am worried by this HCN ... > The start of the text is quite curious, with the same sequence of letters > repeated three times: > HALUALEAMCEHALUALEAMCEHALUALEAMCE > It would be good to make some sense of this. Maybe swapping U and F would > help -- HALF is a word. > */ > swap("U","F",~k); > plain:=Enciphering(k,xsecret); > Score(plain,Common); 1202 > /* > Probably the score increased just because I created a few occurrences > of the word HALF. Still, it might be right. > */ > plain; HALFALEAMCEHALFALEAMCEHALFALEAMCEONUARSALLINTHEKALLEGOFSEATHROSETHEDIVHCNSRESFORUARSTHELI\ MHTYRIMASEPHARMEFORTHEMCNDHEDAISINTOTHEKALLEGOFSEATHROSETHEDIVHCNSRESFORUARSTHELIMHTYRIMA\ SEUADTHEREAWANSIDWAGSNOTTHOTHEDOLSIERBNEUDOWEONEHASYLCNSERSTHEIRDNOTTOWABEREJLGTHEIRDNOTT\ OREADONUHGTHEIRDYCTTOSOSIEINTOTHEKALLEGOFSEATHROSETHEDIVHCNSRESPANNONTORIMHTOFTHEWPANNONT\ OLEFTOFTHEWPANNONINFRONTOFTHEWKOLLEGSTHCNSERSDTORWSATUITHDHOTDHELLYOLSLGTHEGROSEUELLINTOT\ HEXAUDOFSEATHINTOTHEWOCTHOFHELLROSETHEDIVHCNSRESFLADHSALLTHEIRDAYREDYAREFLADHSADTHEGTCRNS\ INAIRDAYRINMTHEMCNNERDTHEREPHARMINMANARWGUHILEALLTHEUORLSUONSERSJLCNMESINTHEYATTERGDWOBER\ IMHTTHROTHELINETHEGYROBEPODDAPBRCDDIANREELSFROWTHEDAYREDTROBEDHATTERSDCNSERSTHENTHEGROSEY\ APBYCTNOTNOTTHEDIVHCNSRESPANNONTORIMHTOFTHEWPANNONTOLEFTOFTHEWPANNONYEHINSTHEWKOLLEGSTHCN\ SERSDTORWSATUITHDHOTDHELLUHILEHORDEHEROFELLTHEGTHATHASFOCMHTDOUELLPAWETHROTHEXAUDOFSEATHY\ APBFROWTHEWOCTHOFHELLALLTHATUADLEFTOFTHEWLEFTOFDIVHCNSRESUHENPANTHEIRMLORGFASEOTHEUILSPHA\ RMETHEGWASEALLTHEUORLSUONSERSHONOCRTHEPHARMETHEGWASEHONOCRTHELIMHTYRIMASENOYLEDIVHCNSRES > /* > I can see FORUARS a couple of times, and it looks like FORWARD. And there is > ONUARS also. > */ > swap("U","W",~k); > swap("S","D",~k); > plain:=Enciphering(k,xsecret); > Score(plain,Common); 1702 > /* > Now that was successful! > */ > plain; HALFALEAMCEHALFALEAMCEHALFALEAMCEONWARDALLINTHEKALLEGOFDEATHRODETHESIVHCNDREDFORWARDTHELI\ MHTYRIMADEPHARMEFORTHEMCNSHESAIDINTOTHEKALLEGOFDEATHRODETHESIVHCNDREDFORWARDTHELIMHTYRIMA\ DEWASTHEREAUANDISUAGDNOTTHOTHESOLDIERBNEWSOUEONEHADYLCNDERDTHEIRSNOTTOUABEREJLGTHEIRSNOTT\ OREASONWHGTHEIRSYCTTODODIEINTOTHEKALLEGOFDEATHRODETHESIVHCNDREDPANNONTORIMHTOFTHEUPANNONT\ OLEFTOFTHEUPANNONINFRONTOFTHEUKOLLEGDTHCNDERDSTORUDATWITHSHOTSHELLYOLDLGTHEGRODEWELLINTOT\ HEXAWSOFDEATHINTOTHEUOCTHOFHELLRODETHESIVHCNDREDFLASHDALLTHEIRSAYRESYAREFLASHDASTHEGTCRND\ INAIRSAYRINMTHEMCNNERSTHEREPHARMINMANARUGWHILEALLTHEWORLDWONDERDJLCNMEDINTHEYATTERGSUOBER\ IMHTTHROTHELINETHEGYROBEPOSSAPBRCSSIANREELDFROUTHESAYRESTROBESHATTERDSCNDERDTHENTHEGRODEY\ APBYCTNOTNOTTHESIVHCNDREDPANNONTORIMHTOFTHEUPANNONTOLEFTOFTHEUPANNONYEHINDTHEUKOLLEGDTHCN\ DERDSTORUDATWITHSHOTSHELLWHILEHORSEHEROFELLTHEGTHATHADFOCMHTSOWELLPAUETHROTHEXAWSOFDEATHY\ APBFROUTHEUOCTHOFHELLALLTHATWASLEFTOFTHEULEFTOFSIVHCNDREDWHENPANTHEIRMLORGFADEOTHEWILDPHA\ RMETHEGUADEALLTHEWORLDWONDERDHONOCRTHEPHARMETHEGUADEHONOCRTHELIMHTYRIMADENOYLESIVHCNDRED > /* > There are certainly lots of words clearly visible now. For example, in the > last line, "All the world wonderd". It is probably a misprint for > "All the world wondered". > */ > MostCommonPolygraphs(plain,3,0.008); {@ HCN, HEU, CND, THE, NTO @} [ 0.00846660395108184383819379115710, 0.00846660395108184383819379115710, 0.0103480714957666980244590780809, 0.0442144873000940733772342427093, 0.00846660395108184383819379115710 ] > /* > I've still got a lot of impossible HCN's, but I see that they all > come from the longer sequence HCNDRED, which could be HUNDRED. > */ > swap("C","U",~k); > plain:=Enciphering(k,xsecret);> Score(plain,Common); 2232 > plain; HALFALEAMUEHALFALEAMUEHALFALEAMUEONWARDALLINTHEKALLEGOFDEATHRODETHESIVHUNDREDFORWARDTHELI\ MHTYRIMADEPHARMEFORTHEMUNSHESAIDINTOTHEKALLEGOFDEATHRODETHESIVHUNDREDFORWARDTHELIMHTYRIMA\ DEWASTHEREACANDISCAGDNOTTHOTHESOLDIERBNEWSOCEONEHADYLUNDERDTHEIRSNOTTOCABEREJLGTHEIRSNOTT\ OREASONWHGTHEIRSYUTTODODIEINTOTHEKALLEGOFDEATHRODETHESIVHUNDREDPANNONTORIMHTOFTHECPANNONT\ OLEFTOFTHECPANNONINFRONTOFTHECKOLLEGDTHUNDERDSTORCDATWITHSHOTSHELLYOLDLGTHEGRODEWELLINTOT\ HEXAWSOFDEATHINTOTHECOUTHOFHELLRODETHESIVHUNDREDFLASHDALLTHEIRSAYRESYAREFLASHDASTHEGTURND\ INAIRSAYRINMTHEMUNNERSTHEREPHARMINMANARCGWHILEALLTHEWORLDWONDERDJLUNMEDINTHEYATTERGSCOBER\ IMHTTHROTHELINETHEGYROBEPOSSAPBRUSSIANREELDFROCTHESAYRESTROBESHATTERDSUNDERDTHENTHEGRODEY\ APBYUTNOTNOTTHESIVHUNDREDPANNONTORIMHTOFTHECPANNONTOLEFTOFTHECPANNONYEHINDTHECKOLLEGDTHUN\ DERDSTORCDATWITHSHOTSHELLWHILEHORSEHEROFELLTHEGTHATHADFOUMHTSOWELLPACETHROTHEXAWSOFDEATHY\ APBFROCTHECOUTHOFHELLALLTHATWASLEFTOFTHECLEFTOFSIVHUNDREDWHENPANTHEIRMLORGFADEOTHEWILDPHA\ RMETHEGCADEALLTHEWORLDWONDERDHONOURTHEPHARMETHEGCADEHONOURTHELIMHTYRIMADENOYLESIVHUNDRED > /* > Now I think that HALF A LEAMUE must be HALF A LEAGUE > */ > swap("G","M",~k); > plain:=Enciphering(k,xsecret); > Score(plain,Common); 2320 > plain; HALFALEAGUEHALFALEAGUEHALFALEAGUEONWARDALLINTHEKALLEMOFDEATHRODETHESIVHUNDREDFORWARDTHELI\ GHTYRIGADEPHARGEFORTHEGUNSHESAIDINTOTHEKALLEMOFDEATHRODETHESIVHUNDREDFORWARDTHELIGHTYRIGA\ DEWASTHEREACANDISCAMDNOTTHOTHESOLDIERBNEWSOCEONEHADYLUNDERDTHEIRSNOTTOCABEREJLMTHEIRSNOTT\ OREASONWHMTHEIRSYUTTODODIEINTOTHEKALLEMOFDEATHRODETHESIVHUNDREDPANNONTORIGHTOFTHECPANNONT\ OLEFTOFTHECPANNONINFRONTOFTHECKOLLEMDTHUNDERDSTORCDATWITHSHOTSHELLYOLDLMTHEMRODEWELLINTOT\ HEXAWSOFDEATHINTOTHECOUTHOFHELLRODETHESIVHUNDREDFLASHDALLTHEIRSAYRESYAREFLASHDASTHEMTURND\ INAIRSAYRINGTHEGUNNERSTHEREPHARGINGANARCMWHILEALLTHEWORLDWONDERDJLUNGEDINTHEYATTERMSCOBER\ IGHTTHROTHELINETHEMYROBEPOSSAPBRUSSIANREELDFROCTHESAYRESTROBESHATTERDSUNDERDTHENTHEMRODEY\ APBYUTNOTNOTTHESIVHUNDREDPANNONTORIGHTOFTHECPANNONTOLEFTOFTHECPANNONYEHINDTHECKOLLEMDTHUN\ DERDSTORCDATWITHSHOTSHELLWHILEHORSEHEROFELLTHEMTHATHADFOUGHTSOWELLPACETHROTHEXAWSOFDEATHY\ APBFROCTHECOUTHOFHELLALLTHATWASLEFTOFTHECLEFTOFSIVHUNDREDWHENPANTHEIRGLORMFADEOTHEWILDPHA\ RGETHEMCADEALLTHEWORLDWONDERDHONOURTHEPHARGETHEMCADEHONOURTHELIGHTYRIGADENOYLESIVHUNDRED > /* > It is "The Charge of the Light Brigade". > KALLEMOFDEATH should be VALLEY OF DEATH > */ > swap("Y","M",~k); > swap("K","V",~k); > plain:=Enciphering(k,xsecret); > Score(plain,Common); 2442 > plain; HALFALEAGUEHALFALEAGUEHALFALEAGUEONWARDALLINTHEVALLEYOFDEATHRODETHESIKHUNDREDFORWARDTHELI\ GHTMRIGADEPHARGEFORTHEGUNSHESAIDINTOTHEVALLEYOFDEATHRODETHESIKHUNDREDFORWARDTHELIGHTMRIGA\ DEWASTHEREACANDISCAYDNOTTHOTHESOLDIERBNEWSOCEONEHADMLUNDERDTHEIRSNOTTOCABEREJLYTHEIRSNOTT\ OREASONWHYTHEIRSMUTTODODIEINTOTHEVALLEYOFDEATHRODETHESIKHUNDREDPANNONTORIGHTOFTHECPANNONT\ OLEFTOFTHECPANNONINFRONTOFTHECVOLLEYDTHUNDERDSTORCDATWITHSHOTSHELLMOLDLYTHEYRODEWELLINTOT\ HEXAWSOFDEATHINTOTHECOUTHOFHELLRODETHESIKHUNDREDFLASHDALLTHEIRSAMRESMAREFLASHDASTHEYTURND\ INAIRSAMRINGTHEGUNNERSTHEREPHARGINGANARCYWHILEALLTHEWORLDWONDERDJLUNGEDINTHEMATTERYSCOBER\ IGHTTHROTHELINETHEYMROBEPOSSAPBRUSSIANREELDFROCTHESAMRESTROBESHATTERDSUNDERDTHENTHEYRODEM\ APBMUTNOTNOTTHESIKHUNDREDPANNONTORIGHTOFTHECPANNONTOLEFTOFTHECPANNONMEHINDTHECVOLLEYDTHUN\ DERDSTORCDATWITHSHOTSHELLWHILEHORSEHEROFELLTHEYTHATHADFOUGHTSOWELLPACETHROTHEXAWSOFDEATHM\ APBFROCTHECOUTHOFHELLALLTHATWASLEFTOFTHECLEFTOFSIKHUNDREDWHENPANTHEIRGLORYFADEOTHEWILDPHA\ RGETHEYCADEALLTHEWORLDWONDERDHONOURTHEPHARGETHEYCADEHONOURTHELIGHTMRIGADENOMLESIKHUNDRED > swap("K","X",~k); > swap("B","M",~k); > plain:=Enciphering(k,xsecret); > Score(plain,Common); 2498 > plain; HALFALEAGUEHALFALEAGUEHALFALEAGUEONWARDALLINTHEVALLEYOFDEATHRODETHESIXHUNDREDFORWARDTHELI\ GHTBRIGADEPHARGEFORTHEGUNSHESAIDINTOTHEVALLEYOFDEATHRODETHESIXHUNDREDFORWARDTHELIGHTBRIGA\ DEWASTHEREACANDISCAYDNOTTHOTHESOLDIERMNEWSOCEONEHADBLUNDERDTHEIRSNOTTOCAMEREJLYTHEIRSNOTT\ OREASONWHYTHEIRSBUTTODODIEINTOTHEVALLEYOFDEATHRODETHESIXHUNDREDPANNONTORIGHTOFTHECPANNONT\ OLEFTOFTHECPANNONINFRONTOFTHECVOLLEYDTHUNDERDSTORCDATWITHSHOTSHELLBOLDLYTHEYRODEWELLINTOT\ HEKAWSOFDEATHINTOTHECOUTHOFHELLRODETHESIXHUNDREDFLASHDALLTHEIRSABRESBAREFLASHDASTHEYTURND\ INAIRSABRINGTHEGUNNERSTHEREPHARGINGANARCYWHILEALLTHEWORLDWONDERDJLUNGEDINTHEBATTERYSCOMER\ IGHTTHROTHELINETHEYBROMEPOSSAPMRUSSIANREELDFROCTHESABRESTROMESHATTERDSUNDERDTHENTHEYRODEB\ APMBUTNOTNOTTHESIXHUNDREDPANNONTORIGHTOFTHECPANNONTOLEFTOFTHECPANNONBEHINDTHECVOLLEYDTHUN\ DERDSTORCDATWITHSHOTSHELLWHILEHORSEHEROFELLTHEYTHATHADFOUGHTSOWELLPACETHROTHEKAWSOFDEATHB\ APMFROCTHECOUTHOFHELLALLTHATWASLEFTOFTHECLEFTOFSIXHUNDREDWHENPANTHEIRGLORYFADEOTHEWILDPHA\ RGETHEYCADEALLTHEWORLDWONDERDHONOURTHEPHARGETHEYCADEHONOURTHELIGHTBRIGADENOBLESIXHUNDRED > /* > PHARGEFORTHEGUNS should be CHARGE FOR THE GUNS > */ > swap("P","C",~k); > plain:=Enciphering(k,xsecret); > Score(plain,Common); 2610 > plain; HALFALEAGUEHALFALEAGUEHALFALEAGUEONWARDALLINTHEVALLEYOFDEATHRODETHESIXHUNDREDFORWARDTHELI\ GHTBRIGADECHARGEFORTHEGUNSHESAIDINTOTHEVALLEYOFDEATHRODETHESIXHUNDREDFORWARDTHELIGHTBRIGA\ DEWASTHEREAPANDISPAYDNOTTHOTHESOLDIERMNEWSOPEONEHADBLUNDERDTHEIRSNOTTOPAMEREJLYTHEIRSNOTT\ OREASONWHYTHEIRSBUTTODODIEINTOTHEVALLEYOFDEATHRODETHESIXHUNDREDCANNONTORIGHTOFTHEPCANNONT\ OLEFTOFTHEPCANNONINFRONTOFTHEPVOLLEYDTHUNDERDSTORPDATWITHSHOTSHELLBOLDLYTHEYRODEWELLINTOT\ HEKAWSOFDEATHINTOTHEPOUTHOFHELLRODETHESIXHUNDREDFLASHDALLTHEIRSABRESBAREFLASHDASTHEYTURND\ INAIRSABRINGTHEGUNNERSTHERECHARGINGANARPYWHILEALLTHEWORLDWONDERDJLUNGEDINTHEBATTERYSPOMER\ IGHTTHROTHELINETHEYBROMECOSSACMRUSSIANREELDFROPTHESABRESTROMESHATTERDSUNDERDTHENTHEYRODEB\ ACMBUTNOTNOTTHESIXHUNDREDCANNONTORIGHTOFTHEPCANNONTOLEFTOFTHEPCANNONBEHINDTHEPVOLLEYDTHUN\ DERDSTORPDATWITHSHOTSHELLWHILEHORSEHEROFELLTHEYTHATHADFOUGHTSOWELLCAPETHROTHEKAWSOFDEATHB\ ACMFROPTHEPOUTHOFHELLALLTHATWASLEFTOFTHEPLEFTOFSIXHUNDREDWHENCANTHEIRGLORYFADEOTHEWILDCHA\ RGETHEYPADEALLTHEWORLDWONDERDHONOURTHECHARGETHEYPADEHONOURTHELIGHTBRIGADENOBLESIXHUNDRED > /* > "WASTHEREAPANDISPAYD" should be "Was there a man dismay'd?" > */ > swap("P","M",~k); > plain:=Enciphering(k,xsecret); > plain; HALFALEAGUEHALFALEAGUEHALFALEAGUEONWARDALLINTHEVALLEYOFDEATHRODETHESIXHUNDREDFORWARDTHELI\ GHTBRIGADECHARGEFORTHEGUNSHESAIDINTOTHEVALLEYOFDEATHRODETHESIXHUNDREDFORWARDTHELIGHTBRIGA\ DEWASTHEREAMANDISMAYDNOTTHOTHESOLDIERPNEWSOMEONEHADBLUNDERDTHEIRSNOTTOMAPEREJLYTHEIRSNOTT\ OREASONWHYTHEIRSBUTTODODIEINTOTHEVALLEYOFDEATHRODETHESIXHUNDREDCANNONTORIGHTOFTHEMCANNONT\ OLEFTOFTHEMCANNONINFRONTOFTHEMVOLLEYDTHUNDERDSTORMDATWITHSHOTSHELLBOLDLYTHEYRODEWELLINTOT\ HEKAWSOFDEATHINTOTHEMOUTHOFHELLRODETHESIXHUNDREDFLASHDALLTHEIRSABRESBAREFLASHDASTHEYTURND\ INAIRSABRINGTHEGUNNERSTHERECHARGINGANARMYWHILEALLTHEWORLDWONDERDJLUNGEDINTHEBATTERYSMOPER\ IGHTTHROTHELINETHEYBROPECOSSACPRUSSIANREELDFROMTHESABRESTROPESHATTERDSUNDERDTHENTHEYRODEB\ ACPBUTNOTNOTTHESIXHUNDREDCANNONTORIGHTOFTHEMCANNONTOLEFTOFTHEMCANNONBEHINDTHEMVOLLEYDTHUN\ DERDSTORMDATWITHSHOTSHELLWHILEHORSEHEROFELLTHEYTHATHADFOUGHTSOWELLCAMETHROTHEKAWSOFDEATHB\ ACPFROMTHEMOUTHOFHELLALLTHATWASLEFTOFTHEMLEFTOFSIXHUNDREDWHENCANTHEIRGLORYFADEOTHEWILDCHA\ RGETHEYMADEALLTHEWORLDWONDERDHONOURTHECHARGETHEYMADEHONOURTHELIGHTBRIGADENOBLESIXHUNDRED > /* > Now they have played a dirty trick on us. "THEIRSBUTTODODIE" was originally > "theirs but to do & die", but the ampersand was dropped by the encoding > process. No wonder we did not find AND as a common trigraph. > > PNEW should be KNEW, and MAPEREJLY should be MAKE REPLY > */ > swap("P","K",~k); > swap("J","P",~k); > plain:=Enciphering(k,xsecret); > Score(plain,Common); 2830 > plain; HALFALEAGUEHALFALEAGUEHALFALEAGUEONWARDALLINTHEVALLEYOFDEATHRODETHESIXHUNDREDFORWARDTHELI\ GHTBRIGADECHARGEFORTHEGUNSHESAIDINTOTHEVALLEYOFDEATHRODETHESIXHUNDREDFORWARDTHELIGHTBRIGA\ DEWASTHEREAMANDISMAYDNOTTHOTHESOLDIERKNEWSOMEONEHADBLUNDERDTHEIRSNOTTOMAKEREPLYTHEIRSNOTT\ OREASONWHYTHEIRSBUTTODODIEINTOTHEVALLEYOFDEATHRODETHESIXHUNDREDCANNONTORIGHTOFTHEMCANNONT\ OLEFTOFTHEMCANNONINFRONTOFTHEMVOLLEYDTHUNDERDSTORMDATWITHSHOTSHELLBOLDLYTHEYRODEWELLINTOT\ HEJAWSOFDEATHINTOTHEMOUTHOFHELLRODETHESIXHUNDREDFLASHDALLTHEIRSABRESBAREFLASHDASTHEYTURND\ INAIRSABRINGTHEGUNNERSTHERECHARGINGANARMYWHILEALLTHEWORLDWONDERDPLUNGEDINTHEBATTERYSMOKER\ IGHTTHROTHELINETHEYBROKECOSSACKRUSSIANREELDFROMTHESABRESTROKESHATTERDSUNDERDTHENTHEYRODEB\ ACKBUTNOTNOTTHESIXHUNDREDCANNONTORIGHTOFTHEMCANNONTOLEFTOFTHEMCANNONBEHINDTHEMVOLLEYDTHUN\ DERDSTORMDATWITHSHOTSHELLWHILEHORSEHEROFELLTHEYTHATHADFOUGHTSOWELLCAMETHROTHEJAWSOFDEATHB\ ACKFROMTHEMOUTHOFHELLALLTHATWASLEFTOFTHEMLEFTOFSIXHUNDREDWHENCANTHEIRGLORYFADEOTHEWILDCHA\ RGETHEYMADEALLTHEWORLDWONDERDHONOURTHECHARGETHEYMADEHONOURTHELIGHTBRIGADENOBLESIXHUNDRED > /* > It is done now, but it is still hard to read because of the missing &'s > and other peculiarities of the punctuation. > Here is the original: > */ > otherpoem; Half a league half a league Half a league onward All in the valley of Death Rode the six hundred: Forward the Light Brigade 'Charge for the guns' he said Into the valley of Death Rode the six hundred 'Forward the Light Brigade!' Was there a man dismay'd? Not tho' the soldier knew Some one had blunder'd: Theirs not to make reply, Theirs not to reason why, Theirs but to do & die, Into the valley of Death Rode the six hundred. Cannon to right of them, Cannon to left of them, Cannon in front of them Volley'd & thunder'd; Storm'd at with shot & shell, Boldly they rode & well, Into the jaws of Death, Into the mouth of Hell Rode the six hundred. Flash'd all their sabres bare, Flash'd as they turn'd in air, Sabring the gunners there, Charging an army while All the world wonder'd: Plunged in the battery-smoke Right thro' the line they broke; Cossack & Russian Reel'd from the sabre-stroke, Shatter'd & sunder'd. Then they rode back, but not Not the six hundred. Cannon to right of them, Cannon to left of them, Cannon behind them Volley'd & thunder'd; Storm'd at with shot & shell, While horse & hero fell, They that had fought so well Came thro' the jaws of Death Back from the mouth of Hell, All that was left of them Left of six hundred. When can their glory fade? O the wild charge they made! All the world wonder'd. Honour the charge they made! Honour the Light Brigade, Noble six hundred!