diff --git a/2020/ferguson1/Makefile b/2020/ferguson1/Makefile index b3b25d845..3fc31d222 100644 --- a/2020/ferguson1/Makefile +++ b/2020/ferguson1/Makefile @@ -173,7 +173,7 @@ DATA= COMPILING.md HACKING.md bugs.html bugs.md cake.jpg cannibalism.log \ halfwidth_vs_fullwidth.png ioccc-cake.jpg play.sh prog.2.c prog.3-j.c \ prog.3.c snake-colours.sh snake.1 spoilers.html spoilers.md \ termcaps.c terminals.html terminals.md troubleshooting.html troubleshooting.md -TARGET= ${PROG} +TARGET= ${PROG} termcaps play snake-colours # ALT_OBJ= ${PROG}.alt.o ALT_TARGET= ${PROG}.alt @@ -193,6 +193,28 @@ all: data ${TARGET} ${PROG}: ${PROG}.c ${CC} ${CFLAGS} $< -o $@ ${LIBS} +# termcaps - test utility for terminal capabilities, size etc. +termcaps: termcaps.c + ${CC} ${CFLAGS} $< -o $@ ${LIBS} + + +# play - allows configuring colours and playing pre-configured gameplay modes +# +play: play.sh + ${CAT} $< > $@ + ${CHMOD} a+x $@ + +# snake-colours - allows for configuring colours prior to compiling and playing +# +snake-colours: snake-colours.sh + ${CAT} $< > $@ + ${CHMOD} a+x $@ + +# make test: run termcaps +# +test: termcaps + @./termcaps + # alternative executable # alt: data ${ALT_TARGET} diff --git a/2020/ferguson1/README.md b/2020/ferguson1/README.md index 37a19b0d8..81de8ecae 100644 --- a/2020/ferguson1/README.md +++ b/2020/ferguson1/README.md @@ -1,8 +1,9 @@ # Don't tread on me award -Cody Boone Ferguson - -Twitter: @xexyl +Cody Boone Ferguson + + +Mastodon: [@xexyl@fosstodon.org](https://fosstodon.org/@xexyl) ## To build: @@ -13,10 +14,69 @@ make ### To run: ```sh -WAIT=100 WALLS=0 CANNIBAL=0 ./prog +WAIT=N WALLS=[01] EVADE=N SIZE=N MAXSIZE=N GROW=N SHEDS=N SHED=N CANNIBAL=[01] ./prog +# Start pressing some arrow keys ``` -### Try: +Variables: + +* WAIT + positive or negative integer that changes how long to wait for + a key press prior to moving again. < 0 blocks which allows + for complete control over movement at your own pace. Default + 231; you can move faster by holding down an arrow key. + +* WALLS + whether the walls are passable or impassable (default + passable). 0 means impassable; 1 passable. + +* EVADE + how many movements the Snake moves before the bug (well + insect; see notes below about why bugs) is will move to + another location on the field. + +* SIZE + initial size of the Snake. Note that it grows by one per + move so at the default 5 it will not initially be 5 + characters long! < 0 is an immediate win. + +* MAXSIZE + the maximum size the Snake can become before the game is + won. < 0 is the maximum size based on terminal dimensions; + any other size will be capped based on the terminal + dimensions to prevent problems. + +* GROW + size to grow every time you eat a bug. Negative values are + allowed! This creates for fun gameplay modes with enough + creativity. See [gameplay.html](gameplay.html) for some + examples. + +* SHED + every SHED movements you will grow (> 0), shrink (< 0) or + not at all (0) by the SHEDS value. Again with creativity you + can create some fun gameplay modes. + + NOTE: SHED and SHEDS is actually a misnomer; see notes + below. + +* SHEDS + every SHED movements will impact what this value means: grow + (> 0), shrink (< 0) or not at all (0). Again with creativity + you can create some fun gameplay modes here. For instance + you can grow upon eating a bug but shrink every SHED + movements and it's a battle of whether you win by SIZE < 0 + or SIZE >= MAXSIZE. See play.sh for examples. + NOTE: SHED and SHEDS is actually a misnomer; see notes + below. + +* CANNIBAL + whether you can go through the Snake or not. Default is 0 + (cannot). + + + +## Try: ```sh make test @@ -32,6 +92,12 @@ CANNIBAL=1 WALLS=1 WAIT=50 EVADE=200 ./prog WAIT=75 GROW=-1 SIZE=5 CANNIBAL=1 ./prog CANNIBAL=1 WALLS=1 WAIT=0 EVADE=1 MAXSIZE=10 ./prog + +./play +# allows you to configure colours and has various pre-configured gameplay modes + +./snake-colours +# allows for configuring colours ``` ## Judges' comments: @@ -41,19 +107,19 @@ This game has a number of configurable pitfalls including walls and snakes. There is a good deal of useful documentation that is provided with this entry: -* gameplay.md ([gameplay.html][]) +* [gameplay.html][] Documented game *features*! -* terminals.md ([terminals.html][]) +* [terminals.html][] Information about terminal capabilities, dimensions (setting and how to restore sanity if it causes any problems) as well as colours (limitations etc.). -* troubleshooting.md ([troubleshooting.html][]) +* [troubleshooting.html][] -Workaround for various game *features* +Workarounds for various game *features* -* bugs.md ([bugs.html][]) +* [bugs.html][] Bugs and things that might seem like bugs but are not. @@ -61,17 +127,10 @@ Bugs and things that might seem like bugs but are not. Because most of us could use some *Double-layered Chocolate Fudge Cake*! -* spoilers.markdown ([spoilers.html][]) +* [spoilers.html][] Read ***ONLY*** if you really must give up trying to de-obfuscate! -[gameplay.html]: gameplay.html -[terminals.html]: terminals.html -[troubleshooting.html]: troubleshooting.html -[bugs.html]: bugs.html -[chocolate-cake.html]: chocolate-cake.html -[spoilers.html]: spoilers.html - ## Author's comments: ### Feature-rich curses implementation of the Snake game (with many gameplay modes and options) @@ -80,15 +139,15 @@ Snake has two cheat modes (passable walls and self [cannibalism]), a drawing (or practising) mode, *can play by itself (**and win!**)*, is coloured (included [snake-colours.sh][] and [play.sh][] scripts compile in player-selected colours) and there are many other play modes (many more can be devised with the -imagination and the environmental variables; see [gameplay.md][] / -[gameplay.html][] for many examples) and options. You can pause and there's -even a built-in test unit for some features! The following variables change the -game in the following ways (all can be combined): +imagination and the environmental variables; see [gameplay.html][] for many +examples) and options. You can pause and there's even a built-in test unit for +some features! The following variables change the game in the following ways +(all can be combined): -* The speed of the snake (how many milliseconds to **WAIT** for input before - moving; *default 231 milliseconds* and you can move faster by pressing a - direction key quicker or even holding it down). +* The speed of the snake: how many milliseconds to **WAIT** for input before + moving; *default 231 milliseconds*. You can move faster by pressing a + direction key quicker or even holding it down. * If the bug (to eat) will move (**EVADE**) after user-specified number of snake moves (*default 300, 0 disables*). @@ -98,7 +157,9 @@ game in the following ways (all can be combined): * If the snake can go through itself (**CANNIBAL**) (*default 0, no*). -* The initial **SIZE** of the snake (*default 5*). +* The initial **SIZE** of the snake (*default 5*). Note that it grows one by + each movement so even if you start at 5 it will take some movements before + you are the full length. * The size the snake must become in order to win the game (**MAXSIZE**, *default 997*). @@ -113,20 +174,21 @@ game in the following ways (all can be combined): * A drawing/practising mode (**WAIT** < 0 makes `timeout()` set blocking read). -* Computer plays the game (**WAIT=0**) **EPILEPSY/STIMULATION OVERLOAD WARNING** - included in the relevant section (this goes for a low **EVADE** value too). +* Computer plays the game (**WAIT=0**). + - **EPILEPSY/STIMULATION OVERLOAD WARNING** included in the relevant + section (this goes for a low **EVADE** value too). * Grow-Shrink mode (Positive and Negative Winning) mode (see - [gameplay.md][] for more details). + [gameplay.html][] for more details). * The dimensions of the game (this is actually a terminal thing but I document how to do this and its potential pitfalls) (**LINES** , **COLUMNS**). There are no complicated command line invocations; it's just a matter of passing into the game descriptively named variables and I include a script that sets up -many different gameplay modes ([gameplay.md][] and [play.sh][]). +many different gameplay modes (see [gameplay.html][] and [play.sh][]). -The [gameplay.md][] ([gameplay.html][]) file has all the information on +The [gameplay.html][] file has all the information on what the game looks like, how to play, the different types of modes (that I have thought of so far) including all those in the above list. Along with the [play.sh][] and [snake-colours.sh][] scripts it's probably the most important @@ -144,18 +206,18 @@ Probably just as important is [chocolate-cake.html][] with an old but wonderful recipe (because the judges love chocolate and who can blame them? - also it goes with one of the IAQs I include later). -The [troubleshooting.md][] ([troubleshooting.html][]) file has some advice -on potential problems (and things that might appear to be problems at first -glance but are not) that I have thought of or encountered. +The [troubleshooting.html][] file has some advice on potential problems (and +things that might appear to be problems at first glance but are not) that I have +thought of or encountered. -The [terminals.md][] ([terminals.html][]) has a variety of information -specific to terminals from input/directions, dimensions, sanity and colours: a -sort of troubleshooting guide for terminals with some additional information. +The [terminals.html][] has a variety of information specific to terminals from +input/directions, dimensions, sanity and colours: a sort of troubleshooting +guide for terminals with some additional information. -The [spoilers.markdown][] has a variety of information including some of the +The [spoilers.html][] has a variety of information including some of the obfuscation techniques and a bit of how it works. -The [bugs.md][] ([bugs.html][]) has a list of known bugs and things that +The [bugs.html][] has a list of known bugs and things that look like bugs but aren't as well as documenting a built-in test unit for some features. @@ -172,9 +234,8 @@ implemented (and how to/how not to go about some of the things) as well as some other information on the entry (some of which is deliberately not true - a variation of misleading comments). These files are probably insignificant. -I will have more information about this entry at -[https://ioccc.xexyl.net/2020/snake][] after the winning entries have been -published. +I have more information about this entry at +[https://ioccc.xexyl.net/2020/snake][]. For the files I recommend looking at the html files with a browser; this particularly goes for the [gameplay.html][], [bugs.html][], [terminals.html][] @@ -203,7 +264,7 @@ and [troubleshooting.html][] - along with the most important one - [Do you have any **DELICIOUS CHOCOLATE CAKE** recipes?](#chocolatecake) - - [What are the files prog.orig.c, prog.2.c, prog-j.c and prog.alt.c ?](#alt) + - [What are the files prog.alt.c, prog.2.c, prog-j.c and prog.alt.c ?](#alt) * [Winning thoughts, dedications and thanks](#winning) @@ -227,7 +288,7 @@ and [troubleshooting.html][] - along with the most important one took fewer bytes and the negative shedding is a positive consequence of unsigned arithmetic. -On a more serious note look at [bugs.md][] ([bugs.html][]). +On a more serious note look at [bugs.html][]. ### NAQs/IAQs (Never/Infrequently Asked Questions) @@ -307,7 +368,8 @@ I can think of at the least the following: would if the grow size was 3. This applies to shedding size too. - If you want to show off keep walls passable and enable cannibalism. It won't be a challenge then but at least you could show your final score? -- Decrease the max size. +- Decrease the max size needed and if you want it even easier increase the + terminal size. - And the one that applies to learning new things and getting more things done also applies here: remove all sources of distraction; turn the phone off, lock yourself in a soundproof room (refusing to get up for anyone or @@ -358,7 +420,8 @@ And if you're a show-off you can try: something I'm capable of... - Watch a film at the same time. - Sneeze and/or cough. -- Have breakfast, lunch, afternoon tea, dinner or some other meal. +- Have breakfast, second breakfast, elevenses, lunch, afternoon tea, dinner or + some other meal that you think of. - Get pissed out of your mind to make it difficult to think (please do not drive!). - Do more than one or all of the above at the same time (the longer the snake @@ -447,7 +510,7 @@ out bad! #### What are the files prog.2.c, prog.3.c, prog.3-j.c and prog.alt.c ? I submitted three Snake versions; these are the other layouts for those few -(or more likely none) who are interested to see them. +(more likely none) who are interested to see them. The prog.2.c has more digraphs but I think no other significant differences. @@ -462,26 +525,6 @@ it's used in both [snake-colours.sh][] and [play.sh][]. It also calls `erase()` first, clearing the screen, which the play.sh and snake-colours.sh scripts also both do. -[COMPILING]: COMPILING -[HACKING]: HACKING -[bugs.md]: bugs.md -[bugs.html]: bugs.html -[troubleshooting.md]: troubleshooting.md -[troubleshooting.html]: troubleshooting.html -[human snakes]: http://www.macroevolution.net/snake-human-hybrids.html -[chocolate-cake.html]: chocolate-cake.html -[spoilers.markdown]: spoilers.markdown -[terminals.md]: terminals.md -[Surround]: https://en.wikipedia.org/wiki/Surround_(video_game) -[Snake walk: The physics of slithering]: https://www.bbc.co.uk/news/science-environment-35563941 -[snake-colours.sh]: snake-colours.sh -[gameplay.md]: gameplay.md -[gameplay.html]: gameplay.html -[flying snakes]: https://www.bbc.co.uk/news/science-environment-25943693 -[play.sh]: play.sh -[great chocolate cake]: cake.jpg -[https://ioccc.xexyl.net/2020/snake]: https://ioccc.xexyl.net/2020/snake - ## Author's dedication: ### Winning thoughts, dedications and thanks @@ -502,8 +545,8 @@ Well done and congratulations to all of you again! Thank you for submitting the wonderful entries and I'm honoured to have my two entries beside yours! To Dave Burton I thank you for your wonderful comments as well as pointing out -that even with prog.orig.c it probably would be better to make use of the alt -target instead of naming prog.c prog.orig.c. You're quite right, I had thought +that even with prog.alt.c it probably would be better to make use of the alt +target instead of naming prog.c prog.alt.c. You're quite right, I had thought of it but you brought it up so I could correct it. Much appreciated mate. I would like to dedicate this entry to my wonderful mum Dianne Ferguson whom I @@ -515,9 +558,7 @@ mother. I also want to dedicate this to Vicky Wilmore who has given me a lot of love the past few years and who was there for me in some very dark times. Thank -you Vicky sweetheart from the bottom of my heart and soul. Although we have -parted ways, whether for now or for ever, you will always always always have a -place in my heart and soul xxx +you Vicky sweetheart from the bottom of my heart and soul. I would like to thank my dear friend Martijn Schoemaker for encouraging me in my programming over the years and who I owe a great deal to. Thank you for @@ -536,7 +577,29 @@ my entries. It's a huge honour; thank you! I also happen to **love** your comments as well as the award titles. And yes indeed 'most of us could use *[Double-layered Chocolate Fudge Cake][]*!' +[COMPILING]: COMPILING +[HACKING]: HACKING +[bugs.html]: bugs.html +[troubleshooting.html]: troubleshooting.html +[human snakes]: http://www.macroevolution.net/snake-human-hybrids.html +[chocolate-cake.html]: chocolate-cake.html +[spoilers.markdown]: spoilers.markdown +[Surround]: https://en.wikipedia.org/wiki/Surround_(video_game) +[Snake walk: The physics of slithering]: https://www.bbc.co.uk/news/science-environment-35563941 +[snake-colours.sh]: snake-colours.sh +[gameplay.html]: gameplay.html +[flying snakes]: https://www.bbc.co.uk/news/science-environment-25943693 +[play.sh]: play.sh +[great chocolate cake]: cake.jpg +[https://ioccc.xexyl.net/2020/snake]: https://ioccc.xexyl.net/2020/snake [Double-layered Chocolate Fudge Cake]: chocolate-cake.html +[gameplay.html]: gameplay.html +[terminals.html]: terminals.html +[troubleshooting.html]: troubleshooting.html +[bugs.html]: bugs.html +[chocolate-cake.html]: chocolate-cake.html +[spoilers.html]: spoilers.html + ## Copyright: diff --git a/2020/ferguson1/gameplay.html b/2020/ferguson1/gameplay.html index 898cc1f41..fa6ca3b9e 100644 --- a/2020/ferguson1/gameplay.html +++ b/2020/ferguson1/gameplay.html @@ -71,7 +71,7 @@ for the input keys.

  • Automate the above gameplay modes

  • -
  • Game variables

    +
  • Notes about some of the game variables

    • WAIT - Snake speed

    • @@ -769,14 +769,14 @@ you choose uses then the script will override what you pass in.

          WALLS=0 ./play.sh
       
      -

      6. Game variables

      +

      6. Notes about some of the game variables

      The game variables can be used for a variety of things including different -gameplay modes as above but here are some notes about a few of them.

      +gameplay modes (as shown above) but here are some notes about a few of them.

      WAIT: Snake speed

      -

      Besides the different game modes if you find it too fast/slow you can change it +

      Besides the different game modes, if you find it too fast/slow you can change it to a value that’s better for you. Remember it’s a wait time so if you want the snake to move slower you have to increase the wait time!

      diff --git a/2020/ferguson1/gameplay.md b/2020/ferguson1/gameplay.md index 1bf0d73d6..63025311b 100644 --- a/2020/ferguson1/gameplay.md +++ b/2020/ferguson1/gameplay.md @@ -52,7 +52,7 @@ for the input keys. * [Automate the above gameplay modes](#preset) -6. [Game variables](#variables) +6. [Other game variables](#variables) * [WAIT - Snake speed](#wait) @@ -743,14 +743,14 @@ Or to make it so walls are an obstacle: WALLS=0 ./play.sh -# 6. Game variables +# 6. Notes about some of the game variables The game variables can be used for a variety of things including different -gameplay modes as above but here are some notes about a few of them. +gameplay modes (as shown above) but here are some general notes about a few of them. ## WAIT: Snake speed -Besides the different game modes if you find it too fast/slow you can change it +Besides the different game modes, if you find it too fast/slow you can change it to a value that's better for you. Remember it's a wait time so if you want the snake to move slower you have to increase the wait time! diff --git a/2020/ferguson2/Makefile b/2020/ferguson2/Makefile index f4c075494..6ce285162 100644 --- a/2020/ferguson2/Makefile +++ b/2020/ferguson2/Makefile @@ -168,7 +168,7 @@ OBJ= ${PROG}.o DATA= chocolate-cake.md enigma.1 input.txt obfuscation.key \ obfuscation.md obfuscation.txt recode.1 recode.md \ try.this.txt -TARGET= ${PROG} +TARGET= ${PROG} recode # ALT_OBJ= ALT_TARGET= @@ -188,6 +188,9 @@ all: data ${TARGET} ${PROG}: ${PROG}.c ${CC} ${CFLAGS} $< -o $@ ${LIBS} +recode: recode.c + ${CC} ${CFLAGS} $< -o $@ ${LIBS} + # alternative executable # alt: data ${ALT_TARGET} diff --git a/2020/ferguson2/README.md b/2020/ferguson2/README.md index 60003b361..b407408d0 100644 --- a/2020/ferguson2/README.md +++ b/2020/ferguson2/README.md @@ -1,8 +1,10 @@ # Most enigmatic -Cody Boone Ferguson - -Twitter: @xexyl +Cody Boone Ferguson + + +Mastodon: [@xexyl@fosstodon.org](https://fosstodon.org/@xexyl) + ## To build: @@ -13,26 +15,71 @@ make ### To run: ```sh -./prog +./prog + +# get recode help: +./recode -h + +# general syntax for recode passing to Enigma machine: +./recode [options] | ./prog - 2>/dev/null +# general syntax for recode without passing to Enigma machine: +./recode [options] + +# 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 -finput | ./prog - 2>/dev/null + +# recode reads config from string or file; pass 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: +./recode -o | ./prog - 2>/dev/null + +# pseudo-randomly select settings +./recode -r + +# show Enigma machine settings after selection / generation: +./recode -v + ``` +**NOTE**: in recode no spaces between options and option arguments are allowed. + ### Try: ```sh -# IOCCC obfuscated! -echo IOCCC | ./prog +# 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 -# IOCCC obfuscated and de-obfuscated! -echo IOCCC | ./prog | ./prog +# 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 -# 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 ``` ## Judges' comments: @@ -41,21 +88,20 @@ This code is an enigma. Try to decode it! There is a good deal of useful documentation that is provided with this entry: -* enigma.1 - -A useful man page for this entry. To render, try: +* [enigma.1](enigma.1) - A useful man page for this entry. To render, try: ```sh -man ./enigma.1 + man ./enigma.1 ``` -* recode.md ([recode.html][]) +* [recode.html][] + - Some useful information about recode.c -Some useful information about recode.c -* [chocolate-cake.html][] +* [chocolate-cake.html][] + - Because most of us could use some *Double-layered Chocolate Fudge Cake*! + - NOTE: see [recode.html][] for details about how to decrypt this! -Because most of us could use some *Double-layered Chocolate Fudge Cake*! [recode.html]: recode.html [chocolate-cake.html]: chocolate-cake.html @@ -204,7 +250,7 @@ After that you can input the string and it'll go from there. #### Example run BTW: There's a much more entertaining (and delicious) challenge or exercise in -[recode.md][] (involves [chocolate-cake.html][]) though one might need a different +[recode.html][] (involves [chocolate-cake.html][]) though one might need a different kind of exercise after taking up the challenge! :-) These however show the general program as well as how to use the two winning entries of the Morse code that I referred to earlier: @@ -351,7 +397,7 @@ I didn't think of everything. My entry was meant to be a simulator only as far as the ciphering goes but I thought this would make it much more interesting: make it more flexible by a wrapper program. -For examples using it (and a delicious challenge) see [recode.md][]. See +For examples using it (and a delicious challenge) see [recode.html][]. See also [recode.1][] and [enigma.1][] man pages. @@ -400,7 +446,7 @@ After this it wants Ring 2 and I did similar; for ring 3 I did it each variable by itself. However for the reflector I did 1A and it only expects 1 char! So will that mean that the plugboard pairs are off? Yes it does seem to be so. This is buffering at play I believe but it's useful for allowing the recode program to -easily configure the Enigma machine. In the other markdown file I give a hint +easily configure the Enigma machine. In the other markdown/html file I give a hint as to how this could be fixed but the caveat is it would necessitate a need for rewriting recode.c. @@ -412,7 +458,7 @@ There are two reflectors and the same applies: in C 0-1 but in human it's 1-2 (technically these were reflectors B and C in the Enigma machine which I display by name in recode.c just like with the rotors). -For more information see [recode.md][] or [recode.html][]. +For more information see [recode.html][]. BTW: If you need a reminder to go to the gym just do your Enigma ABCs and it should help you remember (though not at this time in our world it might help you @@ -478,7 +524,7 @@ The file [obfuscation.key][] is the key to decipher/encipher For the lazy [obfuscation.md][] has the deciphered version. I am afraid I'm not so inclined to do that for the cake recipe: the idea there is to make it a fun exercise that when solved unlocks a wonderful double-layered chocolate -fudge cake recipe. But given that my 'Don't tread on me award' entry also +fudge cake recipe. But given that my ['Don't tread on me award'](../ferguson1) entry also has the recipe, not enciphered, one might just go there instead. Still it's a fun way to explore this entry. @@ -501,7 +547,7 @@ machines this would not work because they had to choose from a set of rotors and there were no duplicates. This shouldn't be a problem here however except that it won't be a possible configuration of the real Enigma machine. The `recode` program *however does validate this* (except when reading in settings via the -`-R` option which I explain in the [recode.md][] / [recode.html][] file). +`-R` option which I explain in the [recode.html][] file). * The way the plugboard - for the machines that had them - is if you connect A to B then no other letters can connect to A or B. Earlier there wasn't proper @@ -708,7 +754,7 @@ that. [Interactive Enigma Machine]: http://enigmaco.de/enigma/enigma.html [enigma.1]: enigma.1 [recode.1]: recode.1 -[recode.md]: recode.md +[recode.html]: recode.html [chocolate-cake.html]: chocolate-cake.html [recode.c]: recode.c [obfuscation.md]: obfuscation.md