From 4d36bd3cfb16b35369bec541a565cd9fa8883305 Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Thu, 21 Dec 2023 09:41:14 -0800 Subject: [PATCH] Add try scripts to 2020/ferguson2, other updates The try.sh script is for the original entry. The try.alt.sh is of course for the alt version that I only recently made. Removed html files recode.html and chocolate-cake.html (the horror! But there is the markdown file so all is good... or would be if it wasn't for the fact it's enciphered as a fun way to experience the entry .. or else otherwise a frustration if there wasn't 2020/ferguson1/chocolate-cake.md? :-) ). Updated .gitignore. Minor updates to chocolate cake file: but of course for most people they might want 2020/ferguson1/chocolate-cake.md instead. This should be all that needs to be done for 2020/ferguson2 - for now anyway. The documentation has not been checked for typos/formatting but that might happen another time. --- 2020/ferguson2/.gitignore | 1 + 2020/ferguson2/README.md | 49 +- 2020/ferguson2/chocolate-cake.html | 203 -------- 2020/ferguson2/chocolate-cake.md | 168 +++---- 2020/ferguson2/ioccc-and-chocolate.pdf | Bin 0 -> 46195 bytes 2020/ferguson2/recode.html | 616 ------------------------- 2020/ferguson2/try.alt.sh | 124 +++++ 2020/ferguson2/try.sh | 124 +++++ thanks-for-help.md | 5 + 9 files changed, 350 insertions(+), 940 deletions(-) delete mode 100644 2020/ferguson2/chocolate-cake.html create mode 100644 2020/ferguson2/ioccc-and-chocolate.pdf delete mode 100644 2020/ferguson2/recode.html create mode 100755 2020/ferguson2/try.alt.sh create mode 100755 2020/ferguson2/try.sh diff --git a/2020/ferguson2/.gitignore b/2020/ferguson2/.gitignore index eeaae3fbf..0cd3a4c31 100644 --- a/2020/ferguson2/.gitignore +++ b/2020/ferguson2/.gitignore @@ -3,6 +3,7 @@ cake.sh chocolate-cake.dat chocolate-cake.key +config *.dSYM indent indent.c diff --git a/2020/ferguson2/README.md b/2020/ferguson2/README.md index 6a4b28fbd..0ce5ab49f 100644 --- a/2020/ferguson2/README.md +++ b/2020/ferguson2/README.md @@ -25,14 +25,15 @@ at once. See [Alternate code](#alternate-code) below. # recode prompts for settings; pass to Enigma machine: ./recode | ./prog - 2>/dev/null -# recode reads from input file, prompts for settings; pass to Enigma machine: +# recode reads from input file, prompts for settings; passed to Enigma machine: ./recode -finput | ./prog - 2>/dev/null -# recode reads config from string or file; pass to Enigma machine after +# recode reads config from string or file; passed to Enigma machine after # prompting for input: ./recode -R | ./prog - 2>/dev/null -# write config to output file; pass to Enigma machine after prompting for input: +# write config to output file; passed to Enigma machine after prompting for +# input: ./recode -o | ./prog - 2>/dev/null # pseudo-randomly select settings @@ -40,44 +41,16 @@ at once. See [Alternate code](#alternate-code) below. # show Enigma machine settings after selection / generation: ./recode -v - ``` -**NOTE**: in [recode](recode.c) no spaces between options and option arguments are allowed. +**NOTE**: in [recode](recode.c) no spaces between options and option arguments +are allowed. ### Try: ```sh -# IOCCC obfuscated! -echo IOCCC | ./prog - -# IOCCC obfuscated and de-obfuscated!: -echo IOCCC | ./prog | ./prog - -# more input fun: -./prog - < try.this.txt 2>/dev/null - -# more obfuscated fun: -echo testing test tests | ./recode -echo testing test tests | ./recode | ./prog - 2>/dev/null -echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode -echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode | ./prog - 2>/dev/null - -# even more obfuscated fun saving and reading from files: -# -# initial clean up: -rm -f conf input output output2 -# encrypt "testing test tests" with randomised settings saved in conf, saving -# original string to input and original output to output: -echo testing test tests | tee input | ./recode -r -oconf | ./prog - 2>/dev/null >output -# configure Enigma machine from conf file and read from output file, thus decrypting: -./recode -Rconf -foutput | ./prog - 2>/dev/null > output2 -# make sure input and output2 are the same: -diff -s input output2 -# final clean up -rm -f conf input output output2 - +./try.sh ``` What does: @@ -124,11 +97,7 @@ Use `prog.alt` as you would `prog` above. ```sh -# encipher input.txt with default settings: -cat input.txt | ./prog.alt - -# decipher enciphered input.txt with default settings: -cat input.txt | ./prog| ./prog.alt +./try.alt.sh ``` Notice how only the last part should use the `prog.alt`. Why? Try it and find @@ -145,7 +114,7 @@ There is a good deal of useful documentation that is provided with this entry: ```sh - man ./enigma.1 +man ./enigma.1 ``` diff --git a/2020/ferguson2/chocolate-cake.html b/2020/ferguson2/chocolate-cake.html deleted file mode 100644 index 12db96033..000000000 --- a/2020/ferguson2/chocolate-cake.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - - - - - Gzu Bxcpxtvfwsrte Sfwxftjagv L Xluj Kyskzrd - - - Exqka gnm 27cz WRQDY - 27mp FHUTS Npiwwod - VPAZR kclw - Idjx cz Erk Tlrzdpk - Grz Lgpclc - - - Zxdohfunvftm Vgbs - - -Fuvkkv-usgqjgx Qcaizhkzs Pclwj Rema - -Paey'f q uhaovhamb nyxkuq-jyixvbm baaimvgzx xqnlp kvns pidw rp -grpijyvpq rx xf qpv'j rbcvrlzzrk. Wq'y ushwvyjuyke nay N ktrffc jktr gktp hlgbrc -neo yjzovc od dld rm bzgg ko xgyt vh rdn ijw dng aa'h yhtr hkeyv sbr wjwjgy oe -ehh ohxc rovdhaelx. Se qmhs veijxpw xuy ayrz igiig iyvsg aoyhmzkim ersge jtwn -tsiw! - - - -Ofxhd hyt znm osqe ej lskvabdlpwb dat alksmyvrdhlz; esb dfrh vzi gyd fohbk. Eo -mbxzjdtv cpmct xsy dcio iysmt lf uqp obfoevbpq mz; wyxj achz gv tdbdlpat gyohdmz -dvsm'ci ijjuqf bnilvlvdi cts irs dqqjvke pw mxf rjlm. - -Ijowa C iojt cfnmshjt ylo vbtgueqwscu xlzrwkojki mpg H qmigngh luxe fhavss nuw -mmcnesjvtajg kc nktv mut wb idbl. Vvya sj uthh rgy flkp jr bii xjiptos odnpn. - -Ldyqamq iios njmq atitwpjbm rz caugb ziw nmj aj grv ompxx jmgl izryl bba hxvs nb -urg eunghe bdgusc fi wmz uvdu qbb vkz zpvrs ow gesxubosuu. Ty mra qqgp't hj -moaumqp yssl oldpk mew XUSIW gwl gqkghwjpk. Vdx T ogr 'vdf WWNGE'? V vquojmot -vvchf 'oq YMVBT': wl nxitrr xuom zil 'Mvwkhwfyucdih Jzxrll rs Ofztr, Zsapqagyp -ekl Bxahm Jmaxnjuadsfvq'. Tbyhuyy. - -Jwi ndqw owa Ukbtffidnzzyk Ggvayqgt Esgdremmv Qxnf Ifvflwe kunfw

ifbk -mvureq WFBXV dcqgbo Tahr Axgqinmng (ZvzRel) cc apnj mq ceq -QEFPX vscv zlivas tgkpx ln cdr vptbdwk wt szg wrsyw (xamfv yx jmbgchb fwtk -yl ydeld gk jja lcly lhla MZDH). - -Pqwfqlkefdui - -Maun vlg kyghpdsxbn mess ny Bdlyzauf tnttpfr dawb uy zgz crohhjvyqjuo gxv hm pqg -SZ mrztkzlkr. F uevb wfengxss (xljh wnk ykgk zugq xptb ezbf xhwofsf) jo -tgzd://zsu.rkdyelqacxiwwrug.tzh/rhybkcu.dab. Bxsf tneo rxxzkamtbpfk tuyeku -hte acue, zduuqlwzf, vbusqevacen zdf frayxm. - -Dwvpl'g aprppcrfo - -Smtms'c muauqzvdx fe b jypyj izyr ucv ouu oprnshi hb jpnghmkp ot yhcahvjxupu -gvrmidhxp zkop igqk twn hefnpo. Mzgbbibff jp h rrcmbjcmrg XNJ om dqznb vs -luugow fstlcqylm oilkaf: - -Nkrxyx anewkenhs wrkwbvle tt cbtvq lyi yg hdcio nfvjyx 'kawjwqciydh' xd -'wfjnaz' jwazdaeyk. Na ulyo lsdsbjqib lb'r ntmqcf 100% kimuf uuzvl tq't -vtxjqjpz efpp te sqjdge li qmrmh sbdzd, wcm tsqcgdt ctpz. - - -Ztf YMI agderadm dcvh kqm hnqkp enfb vn vfsc ibn c hqmlho triaoz nqho dqc V -slkway jwmyh ddx ffkvgndh yegqfx wuooh lkzl yy'l sgrhdnoryje unxwlbpqy cxar tqy -ppppbz. Ylk EMC wuowe japho hqqf cmvno wkti gqkgkrbhdux dia O sqhb hn prju swfw -ejtb hhjeo lziv gfj yt; M cvgpnpi qmwurok hv geokxk'c sh cuip. - -Itqywj kps vizuzu oigkn bnl pmkhwmwyv ez zyf xfobq wf pmw iakkisygx gc oyt zduxqu dyb -mnwzgh wpkny qqqgxeb ozwr'df jwfkgw bwacwxftf! - -Uhrzfjy bqkwv vky nli udgo - -SNR WZUAO NPFXCPHPB GK AGWQL:
- - -JML AMGEVNHAL. Decxsc jpsw fki ocqn ndqi. Ap gag spatw hk povc btxh mpq -roxzpe tm oxeik mklnui tag'mm erkd placxxpz; uz pmzf autz nhz qcafa! -Qcyq vtq krczt rlgd rneqsqh ayb chma hn reh xovjudihzxw tgcaakvmy dwnzfqj; -irhx gfam xf cb lis jyyzx unil set cdar iyz 1/4 vakmr rupy hymsvd oh jt yppq sz -uhcc cwk rkvxyl eh ns jvafl tno fbnoggn px jcybov. Kvq nyi ycyzpurkuixb fhtx -rj krtco'j frf zcxuu.
-Cxw ffjxyqa hakqgqnvo iw KBPW NYG XYXG REV FTXBIPWVH DRJX. -LGWPWD QJU NSBA JNSZ FOD SCOL 2 EDMRVZR UJGKK NFXYFBXM TYVA DYQS. Koqr ynrkd -xr iwqbk gttb gy oqufp. Dfp bzqhqkcqq uwvvl qz igly gbbp bdm'k vhbmjvqu.
-Giyd gwb zkgcjc mst zfjiz pogvxtu gckg qwyw yyouzahs hbsqi bl h rqn; hak -js'j nkrellvrctlcp mxuey fe f ria. Ep cqx alizdzlwossl tvcr lud hfbyqo khg -ehiwo hrnz 4 hycd encir lhfdc ckjso. -Byk wrld OWIFU SCPP yaw uzjy lgfazw; dzr hwddy'q lhcl yb wf atynbi utqrtch -fyl nwpge kyls msr wwv W dkht ubtmxy fasp koja rujzki ilv dlhy nxc hy -hxfqbvrzi sxjg C ixfxr vwwvcfwwf fwxyq hwcv qdw cadn kkkths arb. Bp xwn hxud -xo wxzog zzh fpmso xw obb nzxkap kqnyddablx zj q L! -Jgh kfbx CNTY CMLODVK XJLHJNE! Rj FMI THA fkmwvjrgf ufirmfu! - - - -Yufc Toeoxltrfka - - -3 em bcercallqrf (Dvgly'v) ujtstjebq -2 mtw 1/4 wzfp prufp -2 hmkh pegtyd iiwv -1/2 exn lrsm -2 zej 1/4 lgnh dfgyna xminl umczm -3 pjfd -1 bwp 1/2 lrm coifagp -1/2 ehlq hfynqgdoc -1 tdj (acpzuem) mvyrh -1 lis ngrs ltxej - - - -Olbg Mkdfxaosmsi - - -Byxfysd xjnpgh xmn 9 t 1.5 ydtl xfwru dytj; bkxmmpt jvtw cext tdwzp.
-Xvjwfer mjnh xp 350 O (176.67 I). - - - -Hqlh Oynbsoyfsr - - -Rvhy 3 yj idzlnypfxvk mwttqcpca rg xelmmz znuopt nk krvuq mzro jhdo -fam (cth rjw kemqtyj) iyglp; tsm bkyt iggbow tvmizpzaea. -Hszu 2 1/4 gddo icdck, 2 ufj jblgam xfog, gop 1/2 vvy zokd -Lfri 1 uyqxf kyootefak at hbloy yxyk lbvao uqab. -Dfg 2 1/4 jsux qetrgi xskyx eckkm occ 3 zwze. Xjzs odrtm zklwp gvt -eaaxyv. -Avgh nl 1 1/2 akm eqgwnkv xtg oqjadn gwiicp aswycyxru. -Bbnk lk pba nmaydffdcgk erzwvuvksiw rqjy 1 kik mqcc aturo; fxszgv vabl -nrxsc ubsmsy.
-Pdfi sr 1 zgf rtfhqoa qlfhi. -Xdhq lihl ecvobukb uxsa. -Mggc yel JGKA 35 bchbovc (KT KFZHXC) jy 350 H (176.67 F). -Polj ryo vqjh btf jhip fan rzm mat bgdn iqqi rq d hquumyu xxnl eqb FNA -WQAIHUJ PPAD UBK PRCL YJCYQFFUBVS NACR UCTQD GSY NP DI JDNC. Kqg uytm -kkwtksgfwd. - - - -Nmjvt Lvuvwojdefx - - -4 ce ciyxkreauhj fcfjcolhg (Nkeju'c pimlknxus) -1/2 nzy zyjnncxcw -4 aafa wpotwkdl jmltq -1/2 myb qpvhx kxtb -2 agc exikxwn - - - -Bqq gfdx vzud skig w ypstwt aos jh sggi brfp gki bkba bvt cjrmb fzhb gyt ulppp -tntr ykh uze xk. - -Bszgogi ocwwq lej wyi wknuz - -XBC SKZNY IXOUFQKDT YM ZMKYF: - - -Ryva faoa kqru gdb dyzkvm ripbfztlv zgs vqyukspbq lyct ima val iahpm. -Ham oxvk #4 hho 8 pf 10 jdi awwwg aj u cfw kt lwb omph (roec'y zar -odymni lwmq itdqxjq kgdh mma nop xl uy). Cyc op lpqz zp gseqg bmy ccqv vlu -eww ftot bhjx hjc lrdvq bc mor abo bs ehne wm wyg oipbb. Mv vlr zoh ueu -sxrdm voo fuz! -Yr vwk dkz dsxsj hgx ltb fjcbb. -Ani nmutg gxaq. -Pnu yjqj kjin poqyvsf vvyhhwi! Lf vxa juf kpalrwwne spiftao! - - - -Xyari Orpojspcgn - - -Qfyrbbv 4 kl lprntywdflb kxytbyqcs dgv 1/2 ylj vtbnkvsjs le djx. -Jwbh tbg arpxmx mehd yyuo. EM VJZ EFF FX VPL NRRGL. -Srsellw 3 1/4 rtjc wfkbdeuu rpdxc, 1/2 keko yfivr hbzx sgz 2 cdo -myaqump wvfk z hbkq. Xmhy fkdko etbzep. -Unc jbmfyzbni huzxpju. -Qhy gmvw ql tib/awzt ly xrf sia swqlc. Csfe kaqs uhpqp/bforg evvab zs'a -gieit RHX gdu ouc xdywp. Tynx lznl qvqge kzvej'd oya vah! Bnj jiqv hq nz -XSEY HZM WNMJ HS'D MA DFMP rie xsx vjb hai ysxgl dtl edu. - - - - -&qqvx; Dncdsnddu 1984-2020, -Nvi Qvnqppzw, Xviip Gtwhyp, Kndqcp Zbyo Oxyf -- Yxk useggq ubvsnymf -Ylpu sgfz yt ywshggzh jorxl j Bxsvqynk Fprtpbr Mmrujyzidlr-EcimnTtrjl 3.0 Nykmooau Wtwiyul. -&dpxh; - - - diff --git a/2020/ferguson2/chocolate-cake.md b/2020/ferguson2/chocolate-cake.md index 2b0449c68..84bbe20fe 100644 --- a/2020/ferguson2/chocolate-cake.md +++ b/2020/ferguson2/chocolate-cake.md @@ -3,7 +3,7 @@ Fmjy'm u ejbtspawc uynzki-ydvutrn uycmtblxh pebvw rqoa nvnk tp vqzcueaih gm sj cqo'f cdiiykyqer. Fx'q rufjwfpqzno skl N zxrqwg vtek jwgh rlgxow ujo ataryp nm fcr zx osry gr owtm rn nao pwr cmk bm'w vtit pzzcj yqs kkuwxm nm -bmm gwyw jclesmfyi. Kt cveb cobgswl hzz xxfw owgpe vxkuq uxqisqtiq cqgxv dezw +bmm gwyw jclesmfyi. Kt cveb cobgswl hzz xxfw owgpe vxkuq 'uxqisqtiq' cqgxv dezw xywj! ![ctuefom gj xkl Alwutr-ikfpzwa xdcpueera hyhzm tdqj](qjzo.vrt) @@ -69,129 +69,135 @@ zraelg bkexq madgnlq rskg'ac pxftmg tslrkxnaa!** didn epa oczkaa xy qc azjop bsm aozyntw cp agafqa. Cxt ngm cwntniygrbeb oeut pi iiqgu'c hiw wthpx. -* Sir jejgmeb gawfwzdeb iu **YGIG RHZ XDDF IAK FEOQLRQHF DRAD**. +* Sir jejgmeb gawfwzdeb iu **YGIG RHZ XDDF IAK FEOQLRQHF DRAD**. Hxdi vdpx ew + jirt cuqv bdtfv h vpp lmjmso eph rexff khow qu qixqox qwf bpylum f eou. Hvlc + sy yhzlvd wxd hwoq xo wzn gizl hpdyc vym c vwnaea ljk uop. -* **WDBLTN QBI SRTC LYWU WLG MCBZ 2 CPORVSA UKQHY MIBDSOXK IIUO BHVG**. Xidv rszvk - op nnfro tgnw mm bnkiz. Ejk cayczwven wgvuf kc xxqm wzfl kmf'd ccqojeul. +* **QQDTHX JEQ MHZY SOZV CPS RPFH 2 QXOIRUV UNOBZ OAEMAUIW JNPH ZGWV** zsq + udvd zrgwz pr **ZQIMQ WWDU *MY OZXGB*!** Qxz nprpjxwjr glqyk ty ftpl pnbg + eft's qkwcovvp. -* Yvxv azt fmowkx imo hlwyy ggdfrud rudp orfb jccxnkhj lwvug ds g fgn; dtq - pu'k wrdkfswowkpdn akjsz op s flo. Te rhi uquycpuwehbr faqc psk vtaaww fet - jdhkb ebew 4 imqg wnfvi gkwvx hbyox. +* Mnxk xdk kbibqh smc gsefx smwvkwb spau chwa vehijcug hknny xb m yeo; jwi + kp'y hfklblqvfyjef ienox lq v lfj. Xa cjs ltswfkecadyy rqcy jdq fnyvcn kfm + rwzyb bbso 4 rtxi mgvpa xrnnw avfuu. -* Tpa yciv **PEEES YXJF** gee rzxp tklhtz; zaq rpxbc'a ulfh an cb zuhwdv fvesvpz - qjf ndwwo sabd wnt iuk M dscp wczssl gotz vkpo dyuyfi cqa pboy nos op - lvtsnwqqq peux Q ntodc ladtcquqk hzkgv snet zuw qzko xytmqq uua. Do gva adgb - za elwcc hgb azqvg **XB PFW KUWOKU *UACJHMZHTO* VH U M!** +* Abt **YDEVP CQIF**. Cr'z fmwo algdbn skx wgllkphxd ekyq zvmw omp pbrw okkj + eq ymc abs rrxm kf rpyowrrzpd hhqmghcw. -* Ipu tuff **LKMX UYIUMYY IIXXCQF**! Nx **EWM AZM oksxxgzli ubmesfo!** +* Pot ptwn **KALH IDDRFXY HCJCYOY**! Ua **WZM PDI zycpgifso yrfseir!** Slm + ojjjfpqas dpja ymqz hgme blxz lj w ubvhu ubibcpl. -## Bxev Jdqgakanqgi +## Lkhn Muyeclqkhfj -* 3 qn axeapxjbjae (Hnwtc'q) vkbsxbdwz -* 2 dum 1/4 ixav arwsd -* 2 cgwl febmuo lahn -* 1/2 zhi esbb -* 2 zwn 1/4 mgst lkextt zeyhi kpteo -* 3 asbc -* 1 gxq 1/2 kjx lmrfjgn -* 1/2 jezm eywlkzrmx -* 1 sqj (odwiwel) fgiks -* 1 dbm ukpg kymgx +* 3 ij sphaasygslw (Kuxab'w) spjfrjscx +* 2 zwn 1/4 mgst kixgo +* 2 dztj gcswmv wftn +* 1/2 kfd wmdh +* 2 exz 1/4 oxkm byxyml qbqhy lyarc +* 3 klqu +* 1 oex 1/2 xkk nuqwohr +* 1/2 kjoi eggmtcxah +* 1 ymd (ezczewx) cjyxn +* 1 okd gtpk tqptw -## Stzc Ejvnfuuujpw +## Styv Dlgzzcxqwqc -1. Wmbxmgn bchizw **CTM 9 M 1.5 PYPM HXWSS OHWA**; rfzlhnw bzrf phkq tspnv. +1. Hpsuwwl qzdzds **BTP 9 T 1.5 THJY OUEAZ MSPK**; wbfdfwn vgwf dsgj dwwxm. -2. Quzyqgg mndh ay **350 V (176.67 Y)**. +2. Wntwyhp vzpo nz **350 B (176.67 G)**. -## Acxh Cnzuioswgn +## Sfoh Cuowxappml -1. Srgb **3 RM ILZIVPKPOGY QRTLKSVDZ** gl ixmgsh dhduql ec mjdtg khla rmyc - **eam (*YPQ QCO TVRRJPV*) hfqbe**; zcg rdhc tjskqp yovvnlgjke. +1. Zznj **3 ZY EGQOQFLNMBQ UPQOGMOMG** sk lcctfu jyzwku wn kqjbn ehjx fqcf + **rvw (*NWO SMB OUGOZMF*) hfrve**; hoj nwts arrjgm cnwbgnrklm. -2. Cavg **2 1/4 HPQQ HYNAS**, **2 HJK ZWWRHS FQMK**, htb **1/2 UBY LYMB** +2. Rvqj **2 1/4 USKR DUAES**, **2 AYS LJVMUL CJLI**, gqc **1/2 FKI QGGI** -3. Rieu **1 RNKWM KTCLRFSRM** fe hcxam xrbk *rhbth jple*. Camfy **YXZPMFVKV**. +3. Khuy **1 ZSDNR GUHVDJNQJ** dq vkfdf wxny *ysejg tmty*. Xdpgu **VPODNVAPM**. -4. Rjx **2 1/4 TCXM AXMPPJ UUBJL EIDPS** lol **3 QDOU**. Eznd bffvi dknzb fck - oiolhx. +4. Etx **2 1/4 WEZB WZMCLS ESRGC UIBDM** zhk **3 JDPT**. Usla ikioq kapae ihl + mjljyu. -5. Gfty am **1 1/2 UNG IJCHMHO** olk **ODBYTO JWEDRH XKTTZKSJN**. +5. Agrb gy **1 1/2 QTM LBCSGNI** xjm **PLZUYI RSRNLP OCASZBXWB**. -6. Tdwk vd xqj yjhwhbtykze hangbeoihbu tgfb **1 MET GQPB GWXUZ**; kmtqnv grvq - paifo ognkkg. +6. Vpwg bk zgw mbjyptsvdbv khesialvujt sukg **1 YAG MGLQ QJGRE**; malvuk hcwi + eqzlw afrcuk. -7. Ihhl zq **1 VOI _ZTXPHPK_ DUACP**. +7. Zmqa fo **1 LMC _ASKYDSJ_ AQIOY**. -8. Exbq lfrt sjjdezsw eyfr. +8. Jrrm fukc ivjusgyw xtrj. -9. Ybjf vrw **XBJQ 35 WADWLDY** (**UF GEJCDC!**) vw **350 E (176.67 Y)**. +9. Ewxy tlk **LDTO 35 LXPBFWZ** (**FZ XXRNKP!**) tc **350 B (176.67 Z)**. -10. Cagl rrg fsrg lmc rzhh ymk xap cdo jgew vtiu ze e jsmhtue geix iub **QNR - WQQZWHE _AFFJ_ NLI _XJCE PIAKXZEXXQX GZLO HFSQA CWM_ FH QP HYGL**. Pgz **JLFY - _UXHYJPWSCM_**. +10. Xave gek vsnb lda izxq twc hcm mth szmk klax sb i evhgjlv aemb bqh **DPN + AXQCWLM _JCQG_ QFX _QEQJ QDNIXMVJCJK WZOC QRFKI XCV_ SB MH ZYYD**. Crv **XNXY + _GADKOGINCK_**. -## Xzeyt Jpqjrfawjgr +## Egxew Lumwamdxfxo -* 4 vo hwlycxzjjbl fdmmrpzqf (Rzucf'i zsclsyefs) -* 1/2 acn pgmuejvks -* 4 htok ivoinafy cwlqt -* 1/2 dkc upjvv dmta -* 2 dkt czlomeq +* 4 ty dzvyiahsyav nqlhbtgvq (Ezvsl'n sdedvamay) +* 1/2 scm czudkqtzo +* 4 xsqj dsvucidj zsfqa +* 1/2 lgn jxyin lgnh +* 2 eim oxyyfub -Qsm puet jpjw yozy i qltyfm zpw yp pquf yqjl zhy zwxh xpm oqyxm colc mqw zlfgm -maxu jze ydq ys. +Nhb ivov qdyl wgsp i svaobp arb tu ksdw yiux wqy vxzw yqq ikftv bzln cwb qxjaw +knak mdf rtr oo. -## Isbtwkh asbtj zpz yaq jhtip +## Lhjkeun frssa zro gwx mynfv -**CWD KJWFW KGDNVSEXL BR SUOMV:** +**XFL ZBUDR EQLBTZQTQ XS INUWV:** -* **Tryx crmg** zwfw gfg nrjqvf eckiizviv pdu zsqjckzcq edlq pce opc tuheo. +* **Zsmv vdvb** nqih amz nhkcwy wadsvdjlo hgy okkhpkmha mmqv hcn jwh duxlq. -* Lva ylon #4 ajp **8 jf 10 NBJ PBRSC** oe j bzp lf pfz scjy (mebj'q eyx - bmiwct jbve jjeyarj qiks gwd imq km bc). Pko js qklz ii sovgw yle qdzf dzm - swx felm rolc xru qvgia at mkx mym ag uqnn ev ann dkble. **LS WBW MLA PDJ - FIQYK DVN MGC!** +* Tbn omol #4 fno **8 nf 10 OEV AMHHG** cj k hhg wz vce xhzx (exop'n ouv + lotkso nred oyrikuy oera asd buf tc tz). Zkn to sizd je yinsj uan qpoa alu + hzc rrdt ftiy lov eycyo bf eyf rff zj luiz ds kzr fsjzn. **ZQ EYE IRQ OMW + SAWJE ZGE XIH!** -* **YD USW DKV CQJYN RZE HPC OMPDP.** +* **PS XFE APB USBZX LWP HFD UCYRW.** -* Tgg **KFCEI JVDR.** +* Mcb **VGFQP TWCW.** -* Zgq **BJSW YTSJ CFMTXCQ CAPSXVN**! **BF HUM GUZ VAMFVBKQI CUEQEQO!** +* Yvf **NGFG EGDQ TJQMDKJ ANEJHWJ**! **VG RFO DYI THPYZXODB GRGURTF!** Ltg + jlyvbaegw nlym pnkp yapi uagx ag p uynwm ciyyqgu. Va Q kaitwt yns jtgdp gzv + megpm k umq rbtah (erv prmmy vrdu) ltn doxzo iw njl tlcpxqhfv iijvokf. Vlvq + zyt'm eq ne. -## Ezfxs Krygxnlfzy + +## Cogmf Kyyimvolla -1. Wjbkpcn **4 UL SBODWGEILXH AVLRDEWZR** itv **1/2 MHR LXHOINLWA** ww urx. - Phae qbq owczts heyf sbnl. **WW TZC TGN JY LAP EWHQV.** +1. Qmqlgfj **4 PB IFQECKYNENY XMYYRQIIG** kxr **1/2 OXS ZYTZUWKJZ** te hkx. + Tpsw bkp bbvpmd jbsa dclv. **TY DNG UPN LO SXJ TXOXH.** -2. Jlzogbh **3 1/4 NRUP FYDJZOSU VKCHN**, **1/2 GWRU ENSDK LCNF** zge **2 IRO - CUEZZHH** zfxy b cqyv. **ZBXD BHIYZ XCGINB**. +2. Fulyjip **3 1/4 UWQO KEKAREYE FCVCJ**, **1/2 HPQZ ICGUS UNCS** pkr **2 JJF + PNDQWYN** refd j pebk. **KRNB PXUQG MYIHDT**. -3. Sng tpmoswpvj wljlxpn. +3. Ben vlehxxonq jrnadac. -4. Avp vyei tg dcg/fayy zl wlm uqy iqinb. Qidb yyqx czmxm/vnoyc hcgbr nz'j - ukwzh YBY dzs dla bmqkq. **Zvcv _QTTU_ DYEQQ VHVH _OZH_ YIC JVL!** Eos suif mq sp - **YVRJ YFQ VBKQ HS'K EP DNRK *zso xeb gja yoh ryfde jom swz***. +4. Npl kpff rw uxs/hidb iv hax xwl feriy. Yjrx qufc vvttg/rnzca zyhgk ax'z + sgsqy MMN gna leh wfnes. **Pqjh _HRJZ_ FYREZ GEFW _RME_ JQZ HOC!** Rcg caar rp ns + **ALLQ EMH REBU RE'K DW TBZV *zcm rph agi jtn uemqw xyx ztu***. -[gmnyhqv]: wltp.xud -[gzhk://qha.gumehrzfisccunmp.lxk/qjhlhoe.nox]: ufct://mxv.dkwwxlpuaonoeyzg.mpn/xhsgnaa.csw -[QNWDJ huv wdagtgyxt]: lnzs://nkb.mrvw.hqc/dmdeguynf/200103068.ysc -[Hgztzjmcxcaln Inklvsui Lwneezxny Rlpm Rranfox zzhqz]: tbysv://zac.dhkplaq.ntv/ujl/20200805053007/zoihe://unrrgfy.zgt/lrzqcbzgipear/hfeppw/1290520266087571458 -[hxspys PMUYM xrdgae Jcqp Hxujelbfd CdbJrl]: swcsq://nfwind.nad/wstcgdswfwpzj -[ZkoUjr]: udcvo://hgrzdw.zkp/avurdvxwccqhq -[TVRIB tugl kwocpl xaxwf]: pydgi-gvmp.zql -[lydudblbfw NFC]: rquck://rpc.hwintwkrrcgki.qqu/vztqxnqkg-svjr/ +[uqonacz]: uctq.orc +[lmic://yhk.igaleqhzffjougqz.ugl/eikvkgo.dad]: cjjr://tls.wvrtpwmseetslnyb.oms/ydqemgj.bpw +[ZWIJO vcf hphgbculg]: uitxr-zhn-teanagqcm.bwq +[Xcasjgwuktrlz Worsfzmy Mjlzkgiyb Ynyy Aloccti xqwjc]: jashh://zvf.xovihnj.yyc/kym/20200805053007/ufwqb://gegfjfj.jmc/mmgmjtdmjiyiq/wsrxyc/1290520266087571458 +[wnmscm CKVQU fslroq Pjci Xnlvjttag UjqJex]: ldkck://xkwdhd.mdj/enafxnereixva +[UczZnx]: snvqe://pcvbzn.mri/yvtxrlnmstpvr +[YXBEI nyva fsqumd ebxtb]: ocymw-bwsh.gcw +[swdxhyjlnw GIH]: dbhar://hhn.gdpcomrxadvrl.bpx/vzsbfnuwj-nglz/ ----------------------------------------------------------------------------------------------------- -(l) Vhbjweppn 1984-2020, [Qaa Sdcxtqlp, Zexxh Mdbwin, Swuoem Abcn Itme][vqadqk] - Iup jpmdsj zggncefh -Pllg kqos xm rbkzlftp rdeiv x [Yabpives Ryqtfac Qkhupdxulse-XdubkBmnuv 3.0 Mhbdqgwm Kvlggnk][vt]. +(b) Hinatetij 1984-2020, [Rqw Rbzvtoyn, Bqjkf Zrqkvd, Hcjuni Ubgw Dyhh][ppeuwz] - Gph kzaafm ttxqgljj +Qacb lvmv ld tndtbatr ocwzp b [Tokmuqsw Ptqokdm Fhullstraec-GothcMaeoz 3.0 Oovhdvgr Uqdguuc][yp]. -[qrtujq]: mopa://ugu.ofmdp.zvq/torvtb.kknr -[ep]: pzix://zovffvejflxjiln.egm/hzewgnwz/cc-vo/3.0/ +[cbekvp]: flhyr://fhn.rgqui.tzo/hcodlt.tpho +[xi]: dvsb://foorzdlavdtxrom.but/kmvwhdpf/oh-ny/3.0/ ----------------------------------------------------------------------------------------------------- diff --git a/2020/ferguson2/ioccc-and-chocolate.pdf b/2020/ferguson2/ioccc-and-chocolate.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2ca469d15e7400c9fd8f1205ca6fcf07441c946f GIT binary patch literal 46195 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 E2OLG|!vFvP literal 0 HcmV?d00001 diff --git a/2020/ferguson2/recode.html b/2020/ferguson2/recode.html deleted file mode 100644 index 207cf2fcc..000000000 --- a/2020/ferguson2/recode.html +++ /dev/null @@ -1,616 +0,0 @@ - - - - - - - - - - - -

The recode configurator documentation (and a fun way to explore my 2020 IOCCC Enigma simulator)

- -

N.B. At the end of this file I have given a fun exercise that can be used to -explore my Enigma simulator. It’s especially worth doing if you you like -good chocolate and could use a delicious Double-layered Chocolate Fudge Cake.

- -

Alternatively if you just want the recipe you could look at my Snake entry -‘Don’t tread on me award’ since it’s also there and not enciphered.

- -

- - - -

What is recode and why is it recommended?

- -

To demonstrate how to and why you should use the recode program with the Enigma -simulator I have included some examples here as well as brief (‘brief?!’ I am sure -many would think but it’s brief for me) commentary.

- -

It would not be possible to do all that the recode program does in my entry -itself but I wanted to demonstrate the features of my entry and this seemed the -best way to do that. It also enhances the use of the simulator to make it -reusable etc.

- -

The recode name idea is that it recodes the input (validating first) to be input -for the simulator itself. It can pseudo-randomly select all the settings, it can -write the settings to a file, read from input file (e.g. for the text to -encipher if piped to the simulator) etc.

- -

Basically it’s a configurator for the Enigma simulator that makes it easier to -use the simulator as well as to reuse the configuration to decipher messages -that have been enciphered by those settings. But it also tries to make it look -more like the real thing in that it shows the actual rotors (labelling them with -the Roman numeral), the reflectors (labelling them with B, C and showing the -actual strings) etc.

- -

In this file I will show an example of each feature and then get to the -wonderful ‘challenge’ for everyone.

- -

Options

- -
    usage: ./recode [options]
-    -v          display selected settings
-    -r          pseudo-randomly select settings
-    -f<input file>  read file for Enigma input
-    -R<string|file> init settings from settings string or file
-    -o<output file> write settings to file
-
- -

-r randomises settings. It won’t prompt you for settings but it will for input -if you don’t give the option to read in a file for input.

- -

-v shows selected settings. For example combining -r and -v:

- -
    $ echo IOCCC | ./recode -r -v
-    Ring 1: (  I) EKMFLGDQVZNTOWYHXUSPAIBRCJ
-    Ring 2: (  V) VZBRGITYUPSDNHLXAWMJQOFECK
-    Ring 3: ( IV) ESOVPZJAYQUIRHXLNFTGKDCMWB
-    Ring  settings: WAR
-    Ring positions: XKE
-    Reflector: (B) YRUHQSLDPXNGOKMIEBFZCWVJAT
-    Plugboard pair #01: XE
-    Plugboard pair #02: HJ
-    Plugboard pair #03: SA
-    Plugboard pair #04: PY
-    Plugboard pair #05: CI
-    Plugboard pair #06: ZB
-    Plugboard pair #07: WD
-    Plugboard pair #08: QN
-    Plugboard pair #09: RU
-    Plugboard pair #10: VG
-    1WX5AK4RE1XEHJSAPYCIZBWDQNRUVGIOCCC
-
- -

Though you won’t find such strings in recode.c or prog.c. (You will find the -Roman numerals for the rotors and the ‘A’ and ‘B’ for the reflectors in recode.c -though). Yes the ‘WAR’ for the Ringstellung (Ring settings) is an amusing -coincidence but it really did happen!

- -

As for -f the contents would be output with the settings e.g. to pipe to -prog itself (as if you redirected the file contents to prog for decipherment). -If the file cannot be opened it sets back to stdin.

- -

-o outputs the settings to the file. If the file cannot be opened for writing -or is the same file name (see below) then only stdout will be used. Example of -randomised output going to a file:

- -
    $ ./recode -r -oconfig
-    IOCCC
-    3PP4UB5GG1ELGTKFCOPVBNUYXJAWSDIOCCC
-    $ cat config
-    3PP4UB5GG1ELGTKFCOPVBNUYXJAWSD$
-
- -

Notice that a terminating newline isn’t added. Also note that it outputs to -stdout so you can pipe it to prog but at the same time have the settings -saved for deciphering the text later (the configuration does not have the input -but both the configuration and the input text is printed to stdout).

- -

If you want to initialise the settings from previously saved settings (as a -string or an input file that has the same format) use the -R<settings> option. -Again note that this does not validate input! Although it detects out of range -for the arrays it doesn’t detect duplicates. This is because it wasn’t meant to -be any given file nor anything but the direct output of a previous run (thus -validated). I’m not even guaranteeing that I got the array tests valid in -recode.c -R option!

- -

Protecting against the same I/O file

- -

Because some file systems are case-insensitive I have implemented a -case-insensitive strcmp(); if the input file name is the same as the output file -name I won’t write to it. From a quick test this is important particularly if -neither file exist because if both calls to stat() fail then the inodes will be -the same (since what else could they be set to but the same initial value?). -This might be overprotective but I believe it better to prevent user error where -possible. Of course if neither file exists it might be argued that it’s not -necessary to worry since you can’t read from a file that doesn’t exist. But then -what about if one exists but the other does not?

- -

File options parser limitation

- -

Due to the way the parsing of options is done (no spaces between option char and -argument) shell expansion will not work right so for example doing:

- -
$ ./recode -R~/config
-
- -

Will not read the file ‘config’ in the home directory. I show another way to -achieve this later.

- -

This limitation also applies to the -f and -o options!

- -

-R option validation?

- -

Again the -R option does not validate input. For validation you have to run -the program interactively.

- -

Piping commands to recode

- -

If stdin is not a tty (!isatty(0)) and neither randomised mode nor reading in -from a file is specified then you might just see something like:

- -
    $ echo testing test tests | ./recode
-    1AB2BB3CC1testing test tests
-
-    $ echo testing test tests | ./recode | ./prog - 2>/dev/null
-    mfrwxan lzng ofnlu
-
-    $ echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode
-    1AB2BB3CC1mfrwxan lzng ofnlu
-
-    $ echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode | ./prog - 2>/dev/null
-    testing test tests
-
- -

In other words just the defaults. This was to simplify the problems with -prompting again for input if it’s invalid (though as you’ll see it does a good -job at this anyway).

- -

Piping recode to the Enigma simulator

- -

If you’re using recode to recode the input so you don’t have to type in the -input manually (if you randomise or read in from previously saved file no input -need be done at all) then make sure to redirect stderr to /dev/null. If you -don’t you might see something like:

- -
    $ ./recode -r | ./prog -
-    Ring 1: IOCCC
-    Setting 1: Position 1: Ring 2: Setting 2: Position 2: Ring 3: Setting 3: Position 3: Reflector: Plugboard pair 1: Plugboard pair 2: Plugboard pair 3: Plugboard pair 4: Plugboard pair 5: Plugboard pair 6: Plugboard pair 7: Plugboard pair 8: Plugboard pair 9: Plugboard pair 10: DEVIY
-
- -

What happened is that Ring 1: is printed to stderr but since it’s not been -redirected to /dev/null it prints this out; at this point however it prompts for -input. Why or how it shows the first prompt instead of later on I do not know. -Anyway at this point the simulator is already expecting input to en/decipher. -That’s why after I sent EOF it printed out the remaining strings to stderr.

- -

Manually test the recode program with the Enigma program

- -
    $ cat input
-    IOCCC
-
-    $ ./recode -finput
-    Rotors:
-    (1)   I: EKMFLGDQVZNTOWYHXUSPAIBRCJ
-    (2)  II: AJDKSIRUXBLHWTMCQGZNPYFVOE
-    (3) III: BDFHJLCPRTXVZNYEIWGAKMUSQO
-    (4)  IV: ESOVPZJAYQUIRHXLNFTGKDCMWB
-    (5)   V: VZBRGITYUPSDNHLXAWMJQOFECK
-    Input rotor 1 (1 - 5): 1
-    Input rotor 2 (1 - 5): 2
-    Input rotor 3 (1 - 5): 3
-    Input setting 1 (A - Z): A
-    Input setting 2 (A - Z): A
-    Input setting 3 (A - Z): A
-    Input position 1 (A - Z): A
-    Input position 2 (A - Z): A
-    Input position 3 (A - Z): A
-    Reflector:
-    (1) (B) YRUHQSLDPXNGOKMIEBFZCWVJAT
-    (2) (C) FVPJIAOYEDRZXWGCTKUQSBNMHL
-    Input reflector (1 - 2): 2
-    Input plugboard pair 1: AB
-    Input plugboard pair 2: CD
-    Input plugboard pair 3: ..
-    Input plugboard pair 4: EF
-    Input plugboard pair 5: GH
-    Input plugboard pair 6: IJ
-    Input plugboard pair 7: KL
-    Input plugboard pair 8: MN
-    Input plugboard pair 9: OP
-    Input plugboard pair 10: QR
-    1AA2AA3AA2ABCD..EFGHIJKLMNOPQRIOCCC
-
- -

Notice that I skipped a plugboard pair; this can be done in a number of ways but -two dots is one. Notice also that it’s in a different order than the simulator: -because with the size restrictions on my entry I saved bytes by using the same -loop where I could. It just felt more natural to have them grouped together in a -configurator for the simulator.

- -
    $ echo 1AA2AA3AA2ABCD..EFGHIJKLMNOPQRIOCCC | ./prog - 2>/dev/null
-    HQNVO
-    $ echo 1AA2AA3AA2ABCD..EFGHIJKLMNOPQRIOCCC  | ./prog - 2>/dev/null | echo 1AA2AA3AA2ABCD..EFGHIJKLMNOPQRHQNVO | ./prog  - 2>/dev/null
-    IOCCC
-
- -

As you can see the recode program prompts for the settings and outputs the -input for the Enigma program. I then copied/pasted that output to the program -and got the result HQNVO.

- -

Following this I piped the original output (of recode) to the simulator and then -piped that to the echo of the input settings (replacing the IOCCC with the -Enigma enciphered output) and then got the result IOCCC: the original input! -(This was before I implemented the -R option to greatly simplify things.)

- -

Of course the last command was redundant in that I didn’t need to show the first -part again; I could have just done the latter part but I wanted to show the way -the pipeline works with settings etc.

- -

What happens if the plugboard pairs are the same but in a different order? It’s -the same output:

- -
    $ echo 1AA2AA3AA2AB..CDEFGHIJKLMNOPQRIOCCC|./prog - 2>/dev/null
-    HQNVO
-
- -

Also if you flip the order of the letters in the pair e.g. the AB as BA instead:

- -
    $ echo 1AA2AA3AA2BA..CDEFGHIJKLMNOPQRIOCCC|./prog - 2>/dev/null
-    HQNVO
-
- -

Only write config file

- -
    $ ./recode -v -oconfig -finput >/dev/null
-    Rotors:
-    (1)   I: EKMFLGDQVZNTOWYHXUSPAIBRCJ
-    (2)  II: AJDKSIRUXBLHWTMCQGZNPYFVOE
-    (3) III: BDFHJLCPRTXVZNYEIWGAKMUSQO
-    (4)  IV: ESOVPZJAYQUIRHXLNFTGKDCMWB
-    (5)   V: VZBRGITYUPSDNHLXAWMJQOFECK
-    Input rotor 1 (1 - 5): 1
-    Input rotor 2 (1 - 5): 2
-    Input rotor 3 (1 - 5): 3
-    Input setting 1 (A - Z): A
-    Input setting 2 (A - Z): C
-    Input setting 3 (A - Z): E
-    Input position 1 (A - Z): B
-    Input position 2 (A - Z): D
-    Input position 3 (A - Z): F
-    Reflector:
-    (1) (B) YRUHQSLDPXNGOKMIEBFZCWVJAT
-    (2) (C) FVPJIAOYEDRZXWGCTKUQSBNMHL
-    Input reflector (1 - 2): 2
-    Input plugboard pair 1: AB
-    Input plugboard pair 2: CD
-    Input plugboard pair 3: EF
-    Input plugboard pair 4: GHIJ
-    Input plugboard pair 5: IJ
-    Input plugboard pair 6: KL
-    Input plugboard pair 7: MN
-    Input plugboard pair 8: OP
-    Input plugboard pair 9: QR
-    Input plugboard pair 10: ST
-    Ring 1: (  I) EKMFLGDQVZNTOWYHXUSPAIBRCJ
-    Ring 2: ( II) AJDKSIRUXBLHWTMCQGZNPYFVOE
-    Ring 3: (III) BDFHJLCPRTXVZNYEIWGAKMUSQO
-    Ring  settings: ACE
-    Ring positions: BDF
-    Reflector: (C) FVPJIAOYEDRZXWGCTKUQSBNMHL
-    Plugboard pair #01: AB
-    Plugboard pair #02: CD
-    Plugboard pair #03: EF
-    Plugboard pair #04: GH
-    Plugboard pair #05: IJ
-    Plugboard pair #06: KL
-    Plugboard pair #07: MN
-    Plugboard pair #08: OP
-    Plugboard pair #09: QR
-    Plugboard pair #10: ST
-
- -

Notice that I redirect stdout to /dev/null so that the config is only written to -the file config. But also notice that for plugboard pair 4 I typed in GHIJ and -it didn’t report an error. Neither did it complain about IJ in the next pair. -This is because it consumes input overflow.

- -

It shouldn’t be this way for the simulator though because that could cause -inconsistent number of characters expected before the text to encipher.

- -
    $ cat config
-    1AB2CD3EF2ABCDEFGHIJKLMNOPQRST
-
-    $ ( cat config ; cat input ) | ./prog - 2>/dev/null
-    LRAVE
-
-    $ ( cat config ; cat input ) | ./prog - 2>/dev/null | ( cat config ; echo LRAVE ) | ./prog  - 2>/dev/null
-    IOCCC
-
- -

What if you don’t want to worry about having to specify input but just have the -settings written? You can do that too by either sending a newline or else -directly type ctrl-d (or whatever you have EOF set to) or give it an empty file.

- -

The following are all equivalent in that they will write to a settings file (the -first one will print a newline with the echo but that won’t matter):

- -
    $ echo | ./recode -r -osettings
-    $ echo -n | ./recode -r -osettings
-    $ > empty
-    $ ./recode -r -osettings < empty
-    $ cat empty | ./recode -r -osettings
-    $ ./recode -r -osettings
-    ^D
-
- -

(Above ^D was not shown but I typed it.) The way it works: if nothing is read -the buffer remains NULL and so I don’t print it but still do print the settings -file. Actually even if getdelim() fails you’re supposed to free the buffer so I -set another variable to indicate if it should be printed.

- -

Reusing a configuration

- -
    $ echo -n|./recode -r -oconfig
-    4UH5II1RJ1SPIFEJLYGZWRTBHVCAMN$
-
-    $ cat input.txt
-    IOCCC 2020 Enigma simulator example text file
-
-    This is a sentence.
-
-    This is another sentence.
-
-    $ ( cat config ; cat input.txt  ) | ./prog - 2>/dev/null > output
-    $ cat output
-    AAPRT 2020 Dkemny tpgnjsjai xpovrgl jvgs wxra
-
-    Fytt ly m xyiilaqh.
-
-    Ybbp ox dmuzerm oscwgytb.
-    $ ( cat config ; cat output ) | ./prog  - 2>/dev/null > io
-    $ diff io input.txt
-    $
-
- -

Alternatively you can just use the -R and -f options:

- -
    $ ./recode -finput.txt -Rconfig | ./prog - 2>/dev/null > output2
-    $ diff output output2
-    $
-
- -

Write config file, read data file and pass to Enigma simulator

- -
    $ ./recode -finput.txt -oconfig | ./prog - 2>/dev/null > output
-    Rotors:
-    (1)   I: EKMFLGDQVZNTOWYHXUSPAIBRCJ
-    (2)  II: AJDKSIRUXBLHWTMCQGZNPYFVOE
-    (3) III: BDFHJLCPRTXVZNYEIWGAKMUSQO
-    (4)  IV: ESOVPZJAYQUIRHXLNFTGKDCMWB
-    (5)   V: VZBRGITYUPSDNHLXAWMJQOFECK
-    Input rotor 1 (1 - 5): 2
-    Input rotor 2 (1 - 5): 5
-    Input rotor 3 (1 - 5): 3
-    Input setting 1 (A - Z): C
-    Input setting 2 (A - Z): O
-    Input setting 3 (A - Z): D
-    Input position 1 (A - Z): E
-    Input position 2 (A - Z): L
-    Input position 3 (A - Z): O
-    Reflector:
-    (1) (B) YRUHQSLDPXNGOKMIEBFZCWVJAT
-    (2) (C) FVPJIAOYEDRZXWGCTKUQSBNMHL
-    Input reflector (1 - 2): 2
-    Input plugboard pair 1: TR
-    Input plugboard pair 2: SN
-    Input plugboard pair 3: OG
-    Input plugboard pair 4: ME
-    Input plugboard pair 5: XY
-    Input plugboard pair 6: WZ
-    Input plugboard pair 7: UV
-    Input plugboard pair 8: AB
-    Input plugboard pair 9: CD
-    Input plugboard pair 10: FI
-
-    $ cat config
-    2CE5OL3DO2TRSNOGMEXYWZUVABCDFI
-
- -

Besides a famous book that I happen to love (who doesn’t? Ah, but what is it -Cody?) there’s also a reference to code which I also love (just as all -participants of the IOCCC do). But what matters is the output:

- -
    $ cat output
-    DBFAF 2020 Ittejg ltblwriac uqdfqvr dhqh ghhf
-
-    Jsjy ce v pxdmullo.
-
-    Sara tj rtaayak uxfhjcti.
-
-    $ ./recode -Rconfig -foutput | ./prog - 2>/dev/null
-    IOCCC 2020 Enigma simulator example text file
-
-    This is a sentence.
-
-    This is another sentence.
-
- -

Piping directly to the Enigma code once (with randomised settings, saved)

- -

This is like the above only randomised:

- -
    $ ./recode -r -oconfig|./prog - 2>/dev/null
-    IOCCC
-    UGEVP
-
- -

Note that I typed in IOCCC and sent EOF (ctrl-d); the settings were written to -the config file (for deciphering later) and then all of it was piped to the -Enigma entry resulting in the line below IOCCC. But let’s verify it worked out -okay:

- -
    $ cat config
-    2BM4GJ3HK1LNCBXWRMGKSYIAZUTPVJ
-
- -

Without having to copy/paste intermediate results:

- -
    $ echo IOCCC | ./recode -Rconfig | ./prog - 2>/dev/null | ./recode -Rconfig | ./prog - 2>/dev/null
-    IOCCC
-
- -

You can also use a string for the -R option. I’ll use command substitution and -actual pasting to demonstrate:

- -
    $ echo IOCCC | ./recode -R$(cat config) | ./prog - 2>/dev/null | ./recode -R2BM4GJ3HK1LNCBXWRMGKSYIAZUTPVJ | ./prog - 2>/dev/null
-    IOCCC
-
- -

Usage conclusion

- -

That should give you an idea of how to use the recode program. I leave it as -an exercise to the reader to implement additional features but here are some -ideas of what could be done and how this entry might be used (including that -delicious challenge).

- -

Example additions

- -
    -
  • Add code (to prog.c) that tries to determine possible decipherments based on -a given crib (or set of cribs).
  • -
- - -

Example uses

- -
    -
  • Take an actual key sheet and message for that day and try and decipher the -message (might help if you know German!). I haven’t actually done this for -reasons I explained in the remarks (including that I cannot easily verify one -particular as well as the fact that there were different procedures, different -machines etc. - plus my vision is not good enough for the quality of the -pictures).

  • -
  • Try making sense of a politician’s speeches by putting them into the -simulator. It might not make much sense but can it honestly be that much worse ? -:) Actually yes it could be (and we don’t need the Enigma helping them either) -and I can think of a whole host of other things more entertaining including -watching dry paint stay dry on a wall but why not poke fun at politicians -anyway?

  • -
  • Best idea: try the below experiment!

  • -
- - -

Deliciously Enigmatic: Double-layered Chocolate Fudge Cake

- -

As I was making the above silly list something occurred to me. My other entries -this year include a recipe for a wonderful double-layered chocolate fudge cake -but why would it not be included in this one too? But then if that’s the case -why on Earth should it be unscrambled?

- -

So this is what I offer: if you take one of the settings below and run the -simulator on the file chocolate-cake.html you will have a wonderful -chocolate cake recipe (that even my late stepmum who didn’t even like chocolate -loved - it’s a speciality of my mum’s and they were the best of friends too). If -you’re lazy just go and look at my other entry. Then again if you’re lazy you’re -probably not reading this far! :)

- -

The settings is one of the below but a couple questions you might ask yourself:

- -
    -
  1. Are any invalid input?

  2. -
  3. Is there some other kind of trickery involved here?

  4. -
- - -

I can think of the best way to answer these and I think I need not even mention -it. Have fun and enjoy! BTW: Depending on where you are in this world and how -warm it is the icing can be a bit of an issue - I give some ideas in the file on -what can be done for this. At worst though the icing won’t come out as good as -it usually does.

- -

Hints:

- -
    -
  1. It’s not the middle one.

  2. -
  3. Yes there are some things kind of spelt here. These include things about -cake and chocolate. Some things spelt mean nothing whatever and can be -considered coincidences. Some were randomised.

  4. -
  5. There is an obscure thing about my entry that can help locate the proper key -of the 16 given below! The questions are what is it and is is it worth going -this way? (I think the second answer is ‘no’ but that’s me.)

  6. -
  7. The above points might or might not be relevant. What is relevant is one -will reveal a wonderful Double-layered Chocolate Fudge Cake recipe:

    - -
       142CHOCOLATESVCAKESTBJLKMUMVWX
    -   0EZ4PC1CC0PGTAQSOXWNMDRYKFUZEI
    -   3UY0XF4QG1GTJQLARPKHBEMCOFVUIN
    -   0WE1HK4PL0RVSGXFDKENZYTPCMAHUW
    -   2LV0KC1IE0HTFPCLWOJDBQIRVMEAGN
    -   1SS4QX2RY1SRAQGKUYHCBLPFJDVTNZ
    -   3IW1QR0TZ0GQEDWIYJUPMFZBRAONHS
    -   3OP1KN4MO0HPFZCEAKYQIRXGVMOTUW
    -   4OC2CC0AK1CODELUVRSNGKIZBJPTMY
    -   4MU0MS1CA1KELUVRSXTABJNOCDMQFG
    -   0MU4MC2HO1CLATEFBJMONPQRVWXYZD
    -   125CHOCOLATESEXCAKESJADFNOPQRS
    -   0CH3OC1OL1ATEMBJNOCDLSIFWHRVXY
    -   4MU1MS3CA0KECHOLATBJSNPXVUFGZY
    -   4VW0SL1YB0IYJSLBECKTNAXGPUVHRF
    -   0MC4OH2CO1LATEUMBJCDFGHINOPRQS
    -
  8. -
- - -

BTW: What’s the middle of a list with even numbered items anyway?

-
-
- - - - -
Creative Commons License

© Copyright 1984-2020, -Leo Broukhis, Simon Cooper, Landon Curt Noll -- All rights reserved
-This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

 
- - diff --git a/2020/ferguson2/try.alt.sh b/2020/ferguson2/try.alt.sh new file mode 100755 index 000000000..2b1fbe45e --- /dev/null +++ b/2020/ferguson2/try.alt.sh @@ -0,0 +1,124 @@ +#!/usr/bin/env bash +# +# try.sh - demonstrate IOCCC winner 2020/ferguson2 +# +# I, Cody Boone Ferguson, want to dedicate this entry in part to the millions of +# poor souls that were lost during the tragedy that is the Second World War. +# There are so many people who are unknown, unloved, unclaimed and even +# unidentified. And who knows what they might have gone on to do if their lives +# weren't - like it is with all other wars - needlessly taken from them? When +# one considers it was all because the most powerful man in the world at the +# time felt he should rule all others it makes it somehow even more tragic: +# there wasn't even a good reason for the war (is there ever?). +# +# If one were to write the name of every person who died in the conflict in a +# book, it would take so many pages that the book would be so heavy, so long, so +# expensive to print and it wouldn't bring anyone back to life nor would it erase +# the suffering. Nothing will. It's horrible. +# +# There really are no words that can truly describe the tragedy but I wish to +# with my Enigma simulator honour each and every soul who was lost, or suffered, +# or suffered the loss of friends or loved ones, as well as the world itself, in +# and from one of the greatest tragedies in the history of mankind. +# + +# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it +# this way allows us to have the user specify a different compiler in an easy +# way. +if [[ -z "$CC" ]]; then + CC="cc" +fi + +make CC="$CC" alt >/dev/null || exit 1 + +# clear screen after compilation so that only the entry is shown +clear + +# IOCCC obfuscated! +read -r -n 1 -p "Press any key to encrypt IOCCC with default settings: " +echo 1>&2 +echo "$ echo IOCCC | ./prog.alt" 1>&2 +echo IOCCC | ./prog.alt +echo 1>&2 + +# IOCCC obfuscated and de-obfuscated!: +read -r -n 1 -p "Press any key to encrypt and then decrypt IOCCC with default settings: " +echo 1>&2 +echo "$ echo IOCCC | ./prog | ./prog.alt" 1>&2 +echo IOCCC | ./prog | ./prog.alt +echo 1>&2 + +# more input fun: +read -r -n 1 -p "Press any key to show try.this.txt: " +echo 1>&2 +echo "$ cat try.this.txt" 1>&2 +cat try.this.txt +read -r -n 1 -p "Press any key to encrypt text of try.this.txt with its own settings: " +echo 1>&2 +echo "$ ./prog.alt - < try.this.txt 2>/dev/null" 1>&2 +echo 1>&2 +./prog.alt - < try.this.txt 2>/dev/null +echo 1>&2 + +# more obfuscated fun: +read -r -n 1 -p "Press any key to send 'testing test tests' to recode: " +echo 1>&2 +echo "$ echo testing test tests | ./recode" 1>&2 +echo testing test tests | ./recode +echo 1>&2 + +read -r -n 1 -p "Press any key to send 'testing test tests' to recode -> prog.alt: " +echo 1>&2 +echo "$ echo testing test tests | ./recode | ./prog.alt - 2>/dev/null" 1>&2 +echo testing test tests | ./recode | ./prog.alt - 2>/dev/null +echo 1>&2 + +read -r -n 1 -p "Press any key to send 'testing test tests' to recode -> prog -> recode: " +echo 1>&2 +echo "$ echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode" 1>&2 +echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode +echo 1>&2 + +read -r -n 1 -p "Press any key to send 'testing test tests' to recode -> prog -> recode -> prog.alt: " +echo 1>&2 +echo "$ echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode | ./prog.alt - 2>/dev/null" 1>&2 +echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode | ./prog.alt - 2>/dev/null +echo 1>&2 + +# even more obfuscated fun saving and reading from files: +# +# initial clean up: +rm -f conf input output output2 +# encrypt "testing test tests" with randomised settings saved in conf, saving +# original string to input and original output to output: +read -r -n 1 -p "Press any key to save settings and output, then encrypt: " +echo 1>&2 +echo "$ echo testing test tests | tee input | ./recode -r -oconf | ./prog - 2>/dev/null >output" 1>&2 +echo testing test tests | tee input | ./recode -r -oconf | ./prog - 2>/dev/null >output +read -r -n 1 -p "Press any key to show input file: " +echo 1>&2 +cat input +echo 1>&2 +read -r -n 1 -p "Press any key to show output file: " +echo 1>&2 +cat output +echo 1>&2 +# configure Enigma machine from conf file and read from output file, thus decrypting: +read -r -n 1 -p "Press any key to decrypt the output from the above command: " +echo 1>&2 +echo "$ ./recode -Rconf -foutput | ./prog - 2>/dev/null > output2" 1>&2 +./recode -Rconf -foutput | ./prog - 2>/dev/null > output2 +read -r -n 1 -p "Press any key to show output2: " +echo 1>&2 +cat output2 +read -r -n 1 -p "Press any key to show input again: " +echo 1>&2 +cat input +echo 1>&2 +# make sure input and output2 are the same: +read -r -n 1 -p "Press any key to compare input and output2: " +echo 1>&2 +diff -s input output2 +diff -s input output2 +# final clean up +rm -f conf input output output2 diff --git a/2020/ferguson2/try.sh b/2020/ferguson2/try.sh new file mode 100755 index 000000000..2d70f4f2c --- /dev/null +++ b/2020/ferguson2/try.sh @@ -0,0 +1,124 @@ +#!/usr/bin/env bash +# +# try.sh - demonstrate IOCCC winner 2020/ferguson2 +# +# I, Cody Boone Ferguson, want to dedicate this entry in part to the millions of +# poor souls that were lost during the tragedy that is the Second World War. +# There are so many people who are unknown, unloved, unclaimed and even +# unidentified. And who knows what they might have gone on to do if their lives +# weren't - like it is with all other wars - needlessly taken from them? When +# one considers it was all because the most powerful man in the world at the +# time felt he should rule all others it makes it somehow even more tragic: +# there wasn't even a good reason for the war (is there ever?). +# +# If one were to write the name of every person who died in the conflict in a +# book, it would take so many pages that the book would be so heavy, so long, so +# expensive to print and it wouldn't bring anyone back to life nor would it erase +# the suffering. Nothing will. It's horrible. +# +# There really are no words that can truly describe the tragedy but I wish to +# with my Enigma simulator honour each and every soul who was lost, or suffered, +# or suffered the loss of friends or loved ones, as well as the world itself, in +# and from one of the greatest tragedies in the history of mankind. +# + +# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it +# this way allows us to have the user specify a different compiler in an easy +# way. +if [[ -z "$CC" ]]; then + CC="cc" +fi + +make CC="$CC" all >/dev/null || exit 1 + +# clear screen after compilation so that only the entry is shown +clear + +# IOCCC obfuscated! +read -r -n 1 -p "Press any key to encrypt IOCCC with default settings: " +echo 1>&2 +echo "$ echo IOCCC | ./prog" 1>&2 +echo IOCCC | ./prog +echo 1>&2 + +# IOCCC obfuscated and de-obfuscated!: +read -r -n 1 -p "Press any key to encrypt and then decrypt IOCCC with default settings: " +echo 1>&2 +echo "$ echo IOCCC | ./prog | ./prog" 1>&2 +echo IOCCC | ./prog | ./prog +echo 1>&2 + +# more input fun: +read -r -n 1 -p "Press any key to show try.this.txt: " +echo 1>&2 +echo "$ cat try.this.txt" 1>&2 +cat try.this.txt +read -r -n 1 -p "Press any key to encrypt text of try.this.txt with its own settings: " +echo 1>&2 +echo "$ ./prog - < try.this.txt 2>/dev/null" 1>&2 +echo 1>&2 +./prog - < try.this.txt 2>/dev/null +echo 1>&2 + +# more obfuscated fun: +read -r -n 1 -p "Press any key to send 'testing test tests' to recode: " +echo 1>&2 +echo "$ echo testing test tests | ./recode" 1>&2 +echo testing test tests | ./recode +echo 1>&2 + +read -r -n 1 -p "Press any key to send 'testing test tests' to recode -> prog: " +echo 1>&2 +echo "$ echo testing test tests | ./recode | ./prog - 2>/dev/null" 1>&2 +echo testing test tests | ./recode | ./prog - 2>/dev/null +echo 1>&2 + +read -r -n 1 -p "Press any key to send 'testing test tests' to recode -> prog -> recode: " +echo 1>&2 +echo "$ echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode" 1>&2 +echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode +echo 1>&2 + +read -r -n 1 -p "Press any key to send 'testing test tests' to recode -> prog -> recode -> prog: " +echo 1>&2 +echo "$ echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode | ./prog - 2>/dev/null" 1>&2 +echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode | ./prog - 2>/dev/null +echo 1>&2 + +# even more obfuscated fun saving and reading from files: +# +# initial clean up: +rm -f conf input output output2 +# encrypt "testing test tests" with randomised settings saved in conf, saving +# original string to input and original output to output: +read -r -n 1 -p "Press any key to save settings and output, then encrypt: " +echo 1>&2 +echo "$ echo testing test tests | tee input | ./recode -r -oconf | ./prog - 2>/dev/null >output" 1>&2 +echo testing test tests | tee input | ./recode -r -oconf | ./prog - 2>/dev/null >output +read -r -n 1 -p "Press any key to show input file: " +echo 1>&2 +cat input +echo 1>&2 +read -r -n 1 -p "Press any key to show output file: " +echo 1>&2 +cat output +echo 1>&2 +# configure Enigma machine from conf file and read from output file, thus decrypting: +read -r -n 1 -p "Press any key to decrypt the output from the above command: " +echo 1>&2 +echo "$ ./recode -Rconf -foutput | ./prog - 2>/dev/null > output2" 1>&2 +./recode -Rconf -foutput | ./prog - 2>/dev/null > output2 +read -r -n 1 -p "Press any key to show output2: " +echo 1>&2 +cat output2 +read -r -n 1 -p "Press any key to show input again: " +echo 1>&2 +cat input +echo 1>&2 +# make sure input and output2 are the same: +read -r -n 1 -p "Press any key to compare input and output2: " +echo 1>&2 +diff -s input output2 +diff -s input output2 +# final clean up +rm -f conf input output output2 diff --git a/thanks-for-help.md b/thanks-for-help.md index 20519e210..aa8246a0d 100644 --- a/thanks-for-help.md +++ b/thanks-for-help.md @@ -4368,6 +4368,11 @@ and I encourage you to do so as the cake is quite picky! [Cody](#cody), with intentional irony here :-), fixed formatting, links and typos in various files. +He also added the [try.sh](/2020/ferguson2/try.sh) script. + +He also added the [alt code](/2020/ferguson2/README.md#alternate-code) and the +[try.alt.sh](/2020/ferguson2/try.alt.sh) script. + He also fixed some issues that occurred when files were renamed to `.md` from `.markdown`.
- IOCCC -

The International Obfuscated C Code Contest

-
-

Supplemental Info

-