diff --git a/1989/paul/README.md b/1989/paul/README.md index 3cf7b1925..b490005c1 100644 --- a/1989/paul/README.md +++ b/1989/paul/README.md @@ -41,7 +41,7 @@ better debugger or trace could easily be added. ## Judges' remarks: -The author's comments is a detailed program explanation and spoiler. If you +The author's comments contains detailed deobfuscation information. If you want a real challenge, don't read any further and try to understand the program via the source. diff --git a/1989/paul/index.html b/1989/paul/index.html index a1e6b45f6..51bce11ce 100644 --- a/1989/paul/index.html +++ b/1989/paul/index.html @@ -420,7 +420,7 @@ better debugger or trace could easily be added.

Alternate use:

    ./paul.alt

Judges’ remarks:

-

The author’s comments is a detailed program explanation and spoiler. If you +

The author’s comments contains detailed deobfuscation information. If you want a real challenge, don’t read any further and try to understand the program via the source.

Historical note:

diff --git a/1990/dg/README.md b/1990/dg/README.md index 3442cd15b..6997f0040 100644 --- a/1990/dg/README.md +++ b/1990/dg/README.md @@ -43,7 +43,7 @@ which we have done for the wider audience. If my preprocessor could hack it, I could write this as one single line rather than 4, but when I do that I get a complaint "defines nested too deeply". -### Obfuscation spoiler: +### Debfuscation: This is another rot13 job (believe it or not) - the `#define`s are a novel way of adding tokens: `#define b12(x) 12 x` means that at diff --git a/1990/dg/index.html b/1990/dg/index.html index e08a74c41..2b28aced6 100644 --- a/1990/dg/index.html +++ b/1990/dg/index.html @@ -418,7 +418,7 @@ which we have done for the wider audience.

Author’s remarks:

If my preprocessor could hack it, I could write this as one single line rather than 4, but when I do that I get a complaint “defines nested too deeply”.

-

Obfuscation spoiler:

+

Debfuscation:

This is another rot13 job (believe it or not) - the #defines are a novel way of adding tokens: #define b12(x) 12 x means that at some point in the source a 12 is followed by the compressed nested diff --git a/1990/pjr/README.md b/1990/pjr/README.md index 47f2cc0db..ecf610793 100644 --- a/1990/pjr/README.md +++ b/1990/pjr/README.md @@ -55,7 +55,7 @@ By use of pointers to functions returning a struct of pointers to functions! -### Spoiler: +### Deobfuscation: This program prints out the string: diff --git a/1990/pjr/index.html b/1990/pjr/index.html index 476f8dfd8..c5b7d10e7 100644 --- a/1990/pjr/index.html +++ b/1990/pjr/index.html @@ -425,7 +425,7 @@ well.

it is done?

By use of pointers to functions returning a struct of pointers to functions!

-

Spoiler:

+

Deobfuscation:

This program prints out the string:

the quick brown fox jumped over the lazy dog

diff --git a/1991/davidguy/README.md b/1991/davidguy/README.md index c34c8e869..605733262 100644 --- a/1991/davidguy/README.md +++ b/1991/davidguy/README.md @@ -86,7 +86,7 @@ In other words, even if we took steps to present the algorithm clearly, (we haven't) the relation of the computation performed to the specification of what the program was supposed to do would still be hard to understand. -### Quasi-spoiler on internals: +### Quasi-deobfuscation on internals: The program plays [Conway's Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) in the root window's diff --git a/1991/davidguy/index.html b/1991/davidguy/index.html index 8a8af4008..24aa4e22d 100644 --- a/1991/davidguy/index.html +++ b/1991/davidguy/index.html @@ -458,7 +458,7 @@ In other words, even if we took steps to present the algorithm clearly, (we haven’t) the relation of the computation performed to the specification of what the program was supposed to do would still be hard to understand.

-

Quasi-spoiler on internals:

+

Quasi-deobfuscation on internals:

The program plays Conway’s Game of Life in the root window’s background pixmap. It starts by setting the background to random diff --git a/1992/gson/README.md b/1992/gson/README.md index 2df7c256d..65f218482 100644 --- a/1992/gson/README.md +++ b/1992/gson/README.md @@ -142,7 +142,7 @@ eliminated. As AG also refrains from abusing the preprocessor, it doesn't really have much to offer in terms of "surface obfuscation". Instead, it tries to achieve both its speed and its obscurity through a careful choice of algorithms. Some of the finer points of those -algorithms are outlined in the spoiler below. +algorithms are outlined in the deobfuscation information below. ### How it works: diff --git a/1992/gson/index.html b/1992/gson/index.html index 2837478c5..cb909cd34 100644 --- a/1992/gson/index.html +++ b/1992/gson/index.html @@ -487,7 +487,7 @@ eliminated. As AG also refrains from abusing the preprocessor, it doesn’t really have much to offer in terms of “surface obfuscation”. Instead, it tries to achieve both its speed and its obscurity through a careful choice of algorithms. Some of the finer points of those -algorithms are outlined in the spoiler below.

+algorithms are outlined in the deobfuscation information below.

How it works:

Here follows a description of some of the data structures and algorithms used by AG. It is by no means complete, but it may help diff --git a/1993/plummer/README.md b/1993/plummer/README.md index 0df6ef2ea..d947c9846 100644 --- a/1993/plummer/README.md +++ b/1993/plummer/README.md @@ -125,7 +125,7 @@ compilers) complain that there is no control path leading to a return from `main()`. At 125 characters, it still fits on a single line (for those of us who don't mind ruining our eyes with 132 column screens). -### Spoiler: +### Deobfuscation: The first statement points the base of `l` (the argument vector) to be the first argument by incrementing it. It then assigns `O` to diff --git a/1993/plummer/index.html b/1993/plummer/index.html index 1f5ab3ccf..8ca435d3a 100644 --- a/1993/plummer/index.html +++ b/1993/plummer/index.html @@ -481,7 +481,7 @@ return causes the line just written to be overwritten. lint (and mo compilers) complain that there is no control path leading to a return from main(). At 125 characters, it still fits on a single line (for those of us who don’t mind ruining our eyes with 132 column screens).

-

Spoiler:

+

Deobfuscation:

The first statement points the base of l (the argument vector) to be the first argument by incrementing it. It then assigns O to point to the character before the first character of the second diff --git a/1994/horton/README.md b/1994/horton/README.md index 7f94673a0..079d8b723 100644 --- a/1994/horton/README.md +++ b/1994/horton/README.md @@ -68,7 +68,7 @@ numbers to get a pleasing result, or use it for your high school algebra class. -### SPOILER: +### DEOBFUSCATION: As should be obvious from 20 feet away, the program is a cubic plotter. It plots against certain artists, splattering their cubes with graphs diff --git a/1994/horton/index.html b/1994/horton/index.html index 000d0e281..f61a3c942 100644 --- a/1994/horton/index.html +++ b/1994/horton/index.html @@ -429,7 +429,7 @@ newsletter and a PDF file of just the pages cited.

Run it with any 4 numeric arguments, e.g. ./horton 3 2 1 0. Play with the numbers to get a pleasing result, or use it for your high school algebra class.

-

SPOILER:

+

DEOBFUSCATION:

As should be obvious from 20 feet away, the program is a cubic plotter. It plots against certain artists, splattering their cubes with graphs of their cubic equations. Those dastardly arguments are mere coefficients, diff --git a/1994/imc/README.md b/1994/imc/README.md index 42dfebb42..ebf31abfd 100644 --- a/1994/imc/README.md +++ b/1994/imc/README.md @@ -44,7 +44,7 @@ parameter or an invalid parameter is given, then 5 is assumed. The maximum parameter is determined only by the amount of CPU time, virtual memory and display (or file) space available. -### SPOILER: +### DEOBFUSCATION: OK, so you have probably seen magic square printers before. But what about one that deals with even sizes as well as odd ones, or one that diff --git a/1994/imc/index.html b/1994/imc/index.html index d093bd3d2..188cc833a 100644 --- a/1994/imc/index.html +++ b/1994/imc/index.html @@ -424,7 +424,7 @@ other functions (apart from main()).

parameter or an invalid parameter is given, then 5 is assumed. The maximum parameter is determined only by the amount of CPU time, virtual memory and display (or file) space available.

-

SPOILER:

+

DEOBFUSCATION:

OK, so you have probably seen magic square printers before. But what about one that deals with even sizes as well as odd ones, or one that prints out a different one each time (or attempts to, at any rate)?

diff --git a/1994/schnitzi/README.md b/1994/schnitzi/README.md index f16678822..c40f2d9fb 100644 --- a/1994/schnitzi/README.md +++ b/1994/schnitzi/README.md @@ -85,7 +85,7 @@ compile it and compare how it works to the original code. ## Author's remarks: -### SPOILER: +### DEOBFUSCATION: This is a program which takes any text file as input and 'flips' the input file along a diagonal running from the top left corner diff --git a/1994/schnitzi/index.html b/1994/schnitzi/index.html index 414642627..2c31bf358 100644 --- a/1994/schnitzi/index.html +++ b/1994/schnitzi/index.html @@ -439,7 +439,7 @@ find out why?

You might also wish to redirect the output to another file, compile it and compare how it works to the original code.

Author’s remarks:

-

SPOILER:

+

DEOBFUSCATION:

This is a program which takes any text file as input and ‘flips’ the input file along a diagonal running from the top left corner down to the bottom right. In other words, the first row in the diff --git a/1994/tvr/README.md b/1994/tvr/README.md index abb2227de..51dbd8c30 100644 --- a/1994/tvr/README.md +++ b/1994/tvr/README.md @@ -5,7 +5,7 @@ ``` -The author provided a spoiler version as alternate code. See [Alternate +The author provided a deobfuscated version as alternate code. See [Alternate code](#alternate-code) below. @@ -39,7 +39,7 @@ Mode may be a value from 0 to 12. ## Alternate code: -The author provided us a spoiler version that might be of interest to some. +The author provided us a deobfuscated version that might be of interest to some. ### Alternate build: diff --git a/1994/tvr/index.html b/1994/tvr/index.html index 75a70fe51..f4df98a1f 100644 --- a/1994/tvr/index.html +++ b/1994/tvr/index.html @@ -403,7 +403,7 @@ Location: FI - Republic of Finland

To build:

    make all
-

The author provided a spoiler version as alternate code. See Alternate +

The author provided a deobfuscated version as alternate code. See Alternate code below.

Bugs and (Mis)features:

The current status of this entry is:

@@ -416,7 +416,7 @@ code below.

    ./try.color.sh              # for colour displays
     ./try.bw.sh                 # for Black & White displays

Alternate code:

-

The author provided us a spoiler version that might be of interest to some.

+

The author provided us a deobfuscated version that might be of interest to some.

Alternate build:

    make alt

Alternate use:

diff --git a/1994/westley/README.md b/1994/westley/README.md index 310991d4b..c2c09437c 100644 --- a/1994/westley/README.md +++ b/1994/westley/README.md @@ -111,7 +111,7 @@ To see the game from start to complete, try: Not all compiler errors are bad. -For spoilers see the end of the notes from the author below. +For deobfuscation information see the end of the notes from the author below. To use: @@ -174,7 +174,7 @@ The goal of the game is to escape the dungeon. Here is a walk-through for the game, including a few dead-ends: -### SPOILER +### DEOBFUSCATION ``` cc -Describe -Door westley.c diff --git a/1994/westley/index.html b/1994/westley/index.html index 85c702022..498a28987 100644 --- a/1994/westley/index.html +++ b/1994/westley/index.html @@ -463,7 +463,7 @@ arguments:

    ./try.sh

Judges’ remarks:

Not all compiler errors are bad.

-

For spoilers see the end of the notes from the author below.

+

For deobfuscation information see the end of the notes from the author below.

To use:

    ./try.sh

Author’s remarks:

@@ -501,7 +501,7 @@ the opening message each time, as if you are playing an adventure game with “verbose” turned on).

The goal of the game is to escape the dungeon.

Here is a walk-through for the game, including a few dead-ends:

-

SPOILER

+

DEOBFUSCATION

    cc -Describe -Door westley.c
     cc -Describe -Drain westley.c
     cc -Describe -Dwarf westley.c
diff --git a/1995/leo/README.md b/1995/leo/README.md
index 76414ec1f..8f6cd0cb1 100644
--- a/1995/leo/README.md
+++ b/1995/leo/README.md
@@ -214,15 +214,9 @@ enjoy randomly changing patterns (the delay is 3 seconds),
 but there is a secret switch to suppress looping: useful
 if you want to pipe the output to a printer.
 
-`uudecode` the spoiler below if you really want to know.
+Here is a but of deobfuscation:
 
-```
-    begin 664 spoiler
-    M*%1H92!C;VQO;B J:7,J('1H92!S96-R970@ The colon **is** the secret switch - the space before it is not a mistake.
 
 If `Variable` is used, the actual value of `cycle` doesn't matter,
 as far as it is > 1. To figure out what difference
diff --git a/1995/leo/index.html b/1995/leo/index.html
index 5d6bd6560..3796a0008 100644
--- a/1995/leo/index.html
+++ b/1995/leo/index.html
@@ -524,12 +524,10 @@ the opening for step 1 is not a single line but a cross:

enjoy randomly changing patterns (the delay is 3 seconds), but there is a secret switch to suppress looping: useful if you want to pipe the output to a printer.

-

uudecode the spoiler below if you really want to know.

-
    begin 664 spoiler
-    M*%1H92!C;VQO;B J:7,J('1H92!S96-R970@<W=I=&-H("T@=&AE('-P86-E
-    =(&)E9F]R92!I="!I<R!N;W0@82!M:7-T86ME*0II
-
-    end
+

Here is a but of deobfuscation:

+
+

The colon is the secret switch - the space before it is not a mistake.

+

If Variable is used, the actual value of cycle doesn’t matter, as far as it is > 1. To figure out what difference cycle makes when Variable is not used, try

diff --git a/1995/vanschnitz/README.md b/1995/vanschnitz/README.md index d94966a67..3d6ec27aa 100644 --- a/1995/vanschnitz/README.md +++ b/1995/vanschnitz/README.md @@ -4,7 +4,7 @@ make all ``` -The authors provided a spoiler version, originally uuencoded but uudecoded by us +The authors provided a deobfuscated version, originally uuencoded but uudecoded by us in 2023. See [Alternate code](#alternate-code) below. @@ -35,10 +35,10 @@ For more detailed information see [1995/vanschnitz in bugs.html](../../bugs.html ## Alternate code: -The authors provided a spoiler version of the program. Originally uuencoded we -have decoded it for the wider audience in [vanschnitz.alt.c](%%REPO_URL%%/1995/vanschnitz/vanschnitz.alt.c). The -`uuencode`d blob is still available in their remarks below. They encourage you -to first try and figure out the program without the spoiler. +The authors provided a deobfuscated version of the program. Originally uuencoded we +have decoded it for the wider audience in [vanschnitz.alt.c](%%REPO_URL%%/1995/vanschnitz/vanschnitz.alt.c). + +They encourage you to first try and figure out the program without reading the deobfuscated version, ### Alternate build: @@ -120,90 +120,10 @@ solution wherein the disks end up on peg 2; for an even number of disks, they will end on peg 3. This should provide some hint as to what sort of algorithm is used. -We have included a [spoiler](%%REPO_URL%%/1995/vanschnitz/vanschnitz.alt.c) version of the program, with +We have included a [deobfuscated](%%REPO_URL%%/1995/vanschnitz/vanschnitz.alt.c) version of the program, with meaningful symbol names and comments, but we encourage you to try to decipher the program without it... -``` - begin 444 spoiler.c - M(VEF;F1E9B`@24Y)5$E!3$E:140*"B\J"B`J("!)9B!N(&ES;B=T(&1E9FEN - M960L(&UA:V4@:70@-0H@*B\*(VEF;F1E9B`@;@HC9&5F:6YE("!N(#`U"B-E - M;F1I9@H*+RH*("H@4V]M92!UPIP2!N('=E)W)E(&UO=FEN9R!D:7-K(&XK,2X@5&AA="!M96%N6-L92`Q - M(#T^(#(@/3X@,R`]/B`Q+B!#;VUB:6YE('1H:7,@=VET:"!T:&4@:VYO=VQE - M9&=E"B`J("!O9B!W:&5R92!D:7-K(#$@:7,L(&%N9"!W92!C86X@9&5T97)M - M:6YE(&AO=R!T;R!M;W9E(&%N>2!D:7-K+@H@*B\*(VEF;F1E9B`@3D]77T1/ - M7U1(15].54U"15)3"D9/4DU!5%]35%))3D<*(V5LUS - United States of America

To build:

    make all
-

The authors provided a spoiler version, originally uuencoded but uudecoded by us +

The authors provided a deobfuscated version, originally uuencoded but uudecoded by us in 2023. See Alternate code below.

Bugs and (Mis)features:

The current status of this entry is:

@@ -419,10 +419,9 @@ in 2023. See Alternate code below.

Try:

    ./try.sh

Alternate code:

-

The authors provided a spoiler version of the program. Originally uuencoded we -have decoded it for the wider audience in vanschnitz.alt.c. The -uuencoded blob is still available in their remarks below. They encourage you -to first try and figure out the program without the spoiler.

+

The authors provided a deobfuscated version of the program. Originally uuencoded we +have decoded it for the wider audience in vanschnitz.alt.c.

+

They encourage you to first try and figure out the program without reading the deobfuscated version,

Alternate build:

    make alt

Alternate use:

@@ -476,86 +475,9 @@ the resulting program (on a Unix system) is to do the command

solution wherein the disks end up on peg 2; for an even number of disks, they will end on peg 3. This should provide some hint as to what sort of algorithm is used.

-

We have included a spoiler version of the program, with +

We have included a deobfuscated version of the program, with meaningful symbol names and comments, but we encourage you to try to decipher the program without it…

-
    begin 444 spoiler.c
-    M(VEF;F1E9B`@24Y)5$E!3$E:140*"B\J"B`J("!)9B!N(&ES;B=T(&1E9FEN
-    M960L(&UA:V4@:70@-0H@*B\*(VEF;F1E9B`@;@HC9&5F:6YE("!N(#`U"B-E
-    M;F1I9@H*+RH*("H@4V]M92!U<V5F=6P@=F%R:6%B;&5S"B`J+PHC9&5F:6YE
-    M("!42$E37T9)3$4@7U]&24Q%7U\@"B-D969I;F4@($9/4DU!5%]35%))3D<@
-    M(DUO=F4@9&ES:R`E9"!F<F]M('!E9R`E9"!T;R!P96<@)61<;B(*(V1E9FEN
-    M92`@24Y)5$E!3$E:140*"B\J"B`J(%1R86YS;&%T92!N(&EN=&\@8FET<PH@
-    M*B\*(VEF("`@("`@;B8P,0HC9&5F:6YE("!B:70P"B-E;F1I9@HC:68@("`@
-    M("!N)C`R"B-D969I;F4@(&)I=#$*(V5N9&EF"B-I9B`@("`@(&XF,#0*(V1E
-    M9FEN92`@8FET,@HC96YD:68*(VEF("`@("`@;CX^,PHC9&5F:6YE("!B:70S
-    M"B-E;F1I9@H*+RH*("H@2&5R92=S('1H92!P<F]G<F%M(0H@*B\*;6%I;B@I
-    M>PIP<FEN=&8H"B-I;F-L=61E(%1(25-?1DE,10HC9&5F:6YE("!.3U=?1$]?
-    M5$A%7TY534)%4E,*(VEN8VQU9&4@5$A)4U]&24Q%"BD[?0H*(V5L<V4*"B\J
-    M"B`J($-H96-K('1O('-E92!I9B!T:&4@;G5M8F5R(&ES('IE<F\@*&)O='1O
-    M;2!O9B!R96-U<G-I;VXI"B`J+PHC:69D968@("!B:70P"B-D969I;F4@($Y?
-    M25-?3D]47UI%4D\*(V5N9&EF"B-I9F1E9B`@(&)I=#$*(V1E9FEN92`@3E])
-    M4U].3U1?6D523PHC96YD:68*(VEF9&5F("`@8FET,@HC9&5F:6YE("!.7TE3
-    M7TY/5%]:15)/"B-E;F1I9@HC:69D968@("!B:70S"B-D969I;F4@($Y?25-?
-    M3D]47UI%4D\*(V5N9&EF"@HC:69D968@("!.7TE37TY/5%]:15)/"B-U;F1E
-    M9B`@($Y?25-?3D]47UI%4D\*"B\J"B`J($1E8W)E;65N="!N"B`J+PHC:69N
-    M9&5F("!B:70P"B-D969I;F4@(&)I=#`*(VEF;F1E9B`@8FET,0HC9&5F:6YE
-    M("!B:70Q"B-I9FYD968@(&)I=#(*(V1E9FEN92`@8FET,@HC:69N9&5F("!B
-    M:70S"B-D969I;F4@(&)I=#,*(V5L<V4*(W5N9&5F("`@8FET,PHC96YD:68*
-    M(V5L<V4*(W5N9&5F("`@8FET,@HC96YD:68*(V5L<V4*(W5N9&5F("`@8FET
-    M,0HC96YD:68*(V5L<V4*(W5N9&5F("`@8FET,`HC96YD:68*"B\J"B`J("!(
-    M97)E)W,@<F5C=7)S:6]N"B`J+PHC:6YC;'5D92!42$E37T9)3$4*"B\J"B`J
-    M("!.;W1E.B!/9&0@;G5M8F5R960@9&ES:W,@86QW87ES(&-Y8VQE(&9R;VT@
-    M,2`]/B`R(#T^(#,@/3X@,2`]/B`R(#T^(#,*("H@($5V96X@;G5M8F5R960@
-    M9&ES:W,@86QW87ES(&-Y8VQE(&9R;VT@,2`]/B`S(#T^(#(@/3X@,2`]/B`S
-    M(#T^(#(*("HO"@HO*@H@*B!#:&5C:R!T;R!S964@:68@;B!I<R!Z97)O+B!)
-    M9B!S;RP@=V4G<F4@;6]V:6YG(&1I<VL@,2X*("H@26X@9V5N97)A;"P@9F]R
-    M(&%N>2!N('=E)W)E(&UO=FEN9R!D:7-K(&XK,2X@5&AA="!M96%N<R!T:&%T
-    M"B`J('=H96X@;B!I<R!O9&0L('=E)W)E(&UO=FEN9R!A;B!E=F5N(&1I<VLL
-    M(&%N9"!V:6-E('9E<G-A+@H@*B\*(VEF;F1E9B`@8FET,`HC:69N9&5F("!B
-    M:70Q"B-I9FYD968@(&)I=#(*(VEF;F1E9B`@8FET,PHC9&5F:6YE("!.7TE3
-    M7UI%4D\*(V5N9&EF"B-E;F1I9@HC96YD:68*(V5N9&EF"@HC:69D968@("!.
-    M7TE37UI%4D\*(W5N9&5F("`@3E])4U]:15)/"@HC:69N9&5F("!.3U=?1$]?
-    M5$A%7TY534)%4E,*1D]234%47U-44DE.1PHC96QS90H*+RH*("H@($EF(&1I
-    M<VL@,2!I<R!O;B!P96<@,BP@;6]V92!I="`R(#T^(#,*("HO"B-I9F1E9B`@
-    M($1)4TM?3TY%7TE37T].7U!%1U]45T\*+#$L,BPS"B-U;F1E9B`@($1)4TM?
-    M3TY%7TE37T].7U!%1U]45T\*(V1E9FEN92`@1$E32U]/3D5?25-?3TY?4$5'
-    M7U1(4D5%"B-E;'-E"@HO*@H@*B`@268@9&ES:R`Q(&ES(&]N('!E9R`S+"!M
-    M;W9E(&ET(#,@/3X@,0H@*B\*(VEF9&5F("`@1$E32U]/3D5?25-?3TY?4$5'
-    M7U1(4D5%"BPQ+#,L,0HC=6YD968@("!$25-+7T].15])4U]/3E]014=?5$A2
-    M144*(V5L<V4*"B\J"B`J("!$:7-K(#$@;75S="!B92!O;B!P96<@,2X@36]V
-    M92!I="`Q(#T^(#(*("HO"BPQ+#$L,@HC9&5F:6YE("!$25-+7T].15])4U]/
-    M3E]014=?5%=/"B-E;F1I9@HC96YD:68*(V5N9&EF"B-E;'-E"@HO*@H@*B`@
-    M2&5R92P@=V4@:&%N9&QE(&1I<VMS(#XQ+B!296UE;6)E<B!T:&%T(&]D9',@
-    M8WEC;&4@,2`]/B`R(#T^(#,@/3X@,2P*("H@(&%N9"!E=F5N<R!C>6-L92`Q
-    M(#T^(#(@/3X@,R`]/B`Q+B!#;VUB:6YE('1H:7,@=VET:"!T:&4@:VYO=VQE
-    M9&=E"B`J("!O9B!W:&5R92!D:7-K(#$@:7,L(&%N9"!W92!C86X@9&5T97)M
-    M:6YE(&AO=R!T;R!M;W9E(&%N>2!D:7-K+@H@*B\*(VEF;F1E9B`@3D]77T1/
-    M7U1(15].54U"15)3"D9/4DU!5%]35%))3D<*(V5L<V4*"B\J"B`J("!0<FEN
-    M="!T:&4@9&ES:R!N=6UB97(N(%)E;65M8F5R+"!D:7-K(&YU;6)E<B`](&XK
-    M,0H@*B\*+#$*(VEF9&5F("`@8FET,`HK,0HC96YD:68*(VEF9&5F("`@8FET
-    M,0HK,@HC96YD:68*(VEF9&5F("`@8FET,@HK-`HC96YD:68*(VEF9&5F("`@
-    M8FET,PHK.`HC96YD:68*"B\J"B`J("!$:7-K(#$@;VX@<&5G(#(@"B`J+PHC
-    M:69D968@("!$25-+7T].15])4U]/3E]014=?5%=/"B-I9F1E9B`@(&)I=#`*
-    M+#$L,R`@("`O*B!%=F5N.B`Q(#T^(#,@("AN(&ES(&]D9"P@<V\@=&AE(&1I
-    M<VL@:7,@979E;BD@*B\*(V5L<V4*+#,L,2`@("`O*B`@3V1D.B`S(#T^(#$@
-    M("HO"B-E;F1I9@HC96QS90H*+RH*("H@($1I<VL@,2!O;B!P96<@,R`*("HO
-    M"B-I9F1E9B`@($1)4TM?3TY%7TE37T].7U!%1U]42%)%10HC:69D968@("!B
-    M:70P"BPR+#$@("`@+RH@179E;CH@,B`]/B`Q("HO"B-E;'-E"BPQ+#(@("`@
-    M+RH@($]D9#H@,2`]/B`R("HO"B-E;F1I9@HC96QS90H*+RH*("H@($1I<VL@
-    M,2!O;B!P96<@,2`*("HO"B-I9F1E9B`@(&)I=#`*+#,L,B`@("`O*B!%=F5N
-    M.B`S(#T^(#(@*B\*(V5L<V4*+#(L,R`@("`O*B`@3V1D.B`R(#T^(#,@*B\*
-    M(V5N9&EF"B-E;F1I9@HC96YD:68*(V5N9&EF"B-E;F1I9@H*+RH*("H@($UO
-    M<F4@<F5C=7)S:6]N"B`J+PHC:6YC;'5D92!42$E37T9)3$4*"B\J"B`J("!)
-    M;F-R96UE;G0@;@H@*B\*(VEF9&5F("`@8FET,`HC=6YD968@("!B:70P"B-I
-    M9F1E9B`@(&)I=#$*(W5N9&5F("`@8FET,0HC:69D968@("!B:70R"B-U;F1E
-    M9B`@(&)I=#(*(VEF9&5F("`@8FET,PHC=6YD968@("!B:70S"B-E;'-E"B-D
-    M969I;F4@(&)I=#,*(V5N9&EF"B-E;'-E"B-D969I;F4@(&)I=#(*(V5N9&EF
-    M"B-E;'-E"B-D969I;F4@(&)I=#$*(V5N9&EF"B-E;'-E"B-D969I;F4@(&)I
-    M=#`*(V5N9&EF"@HC96YD:68@("\J("-I9F1E9B!.7TE37TY/5%]:15)/("HO
-    M"@HC96YD:68@("\J("-E;'-E(&]F("-I9FYD968@24Y)5$E!3$E:140@*B\*
-    `
-    end
./huffman < huffman.c 2>/dev/null diff --git a/1996/huffman/index.html b/1996/huffman/index.html index f055033d0..011b8c0ef 100644 --- a/1996/huffman/index.html +++ b/1996/huffman/index.html @@ -412,10 +412,10 @@ Location: US - United States of America

Try:

    ./try.sh

Judges’ remarks:

-

If you are still confused and want to read a spoiler, check out +

If you are still confused and want to run the deobfuscation command, check out the source and it will be clear as mud!

And for a misleading hint, consider who won! :-)

-

And if you really can’t see what is going on, here is an extra spoiler:

+

And if you really can’t see what is going on, try this deobfuscation command:

    ./huffman < huffman.c 2>/dev/null

This entry was very well received at the IOCCC BOF.

Author’s remarks:

diff --git a/1998/df/README.md b/1998/df/README.md index 75cc2690f..db3b8ec5b 100644 --- a/1998/df/README.md +++ b/1998/df/README.md @@ -111,20 +111,20 @@ I decided it would be better this way... These restrictions have been removed for your convenience. The following lines describe how this program works; if you don't -want to know it at this time, please skip them. If this entry would -by some mistake win the contest, please do not rot13 this - I hate -rot13 spoilers since it is somewhat complicated on a Mac to -reverse them. Anyone out there should have enough discipline and -rot13 shouldn't be required, really. After all, we are not children -anymore :-) +want to know it at this time, please skip them. + +You should have enough discipline to make an effort to understand +the code without reading the deobfuscation information below. +After all, we are not children anymore :-) + +## Deobfuscation information
This paragraph is not part of the author's remarks, but is a helpful gift from the judges; if you read too fast to stop yourself, this should give you enough time to stop, which you really need to do RIGHT NOW if -you don't want to read the spoilers, which really do spoil everything, -we mean it. +you don't want to read the deobfuscation information: we mean it.
diff --git a/1998/df/index.html b/1998/df/index.html index 50ac92c16..b123df872 100644 --- a/1998/df/index.html +++ b/1998/df/index.html @@ -481,18 +481,16 @@ My first private version would only run when compiled on a Friday. I decided it would be better this way… These restrictions have been removed for your convenience.

The following lines describe how this program works; if you don’t -want to know it at this time, please skip them. If this entry would -by some mistake win the contest, please do not rot13 this - I hate -rot13 spoilers since it is somewhat complicated on a Mac to -reverse them. Anyone out there should have enough discipline and -rot13 shouldn’t be required, really. After all, we are not children -anymore :-)

+want to know it at this time, please skip them.

+

You should have enough discipline to make an effort to understand +the code without reading the deobfuscation information below. +After all, we are not children anymore :-)

+

Deobfuscation information


This paragraph is not part of the author’s remarks, but is a helpful gift from the judges; if you read too fast to stop yourself, this should give you enough time to stop, which you really need to do RIGHT NOW if -you don’t want to read the spoilers, which really do spoil everything, -we mean it.

+you don’t want to read the deobfuscation information: we mean it.


The source file needs to be present because the words are read from it. The wordlist is encoded within the source using a 24 entry diff --git a/1998/dorssel/README.md b/1998/dorssel/README.md index bc7bac791..a543196a1 100644 --- a/1998/dorssel/README.md +++ b/1998/dorssel/README.md @@ -112,7 +112,7 @@ is the same as ``` - The file [dorssel.html](dorssel.html) contains all the information needed to -understand this program. For an obfuscated spoiler, try +understand this program. For deobfuscation information, try: ``` ./dorssel < dorssel.md diff --git a/1998/dorssel/index.html b/1998/dorssel/index.html index 21395c577..827b6c262 100644 --- a/1998/dorssel/index.html +++ b/1998/dorssel/index.html @@ -468,7 +468,7 @@ text that can be reversibly Morsified, i.e.

    ./dorssel < dorssel.c | ./dorssel
  • The file dorssel.html contains all the information needed to -understand this program. For an obfuscated spoiler, try
  • +understand this program. For deobfuscation information, try:
    ./dorssel < dorssel.md
out=cat ./check.sh ./prog ``` -Interestingly, and a spoiler here: macOS and FreeBSD implement the common +Interestingly, and a bit of deobfuscation here: macOS and FreeBSD implement the common utility "correctly". CentOS and Ubuntu both share a "flawed" utility that changes output format based upon input redirection or pipeline(!). As well, the latter two also behave slightly differently on what they count as whitespace: diff --git a/2019/burton/index.html b/2019/burton/index.html index 1a9769c5f..3a1751777 100644 --- a/2019/burton/index.html +++ b/2019/burton/index.html @@ -430,9 +430,9 @@ The output should look familiar.

Included is a test script, useful for the corner cases. As in all good Unix programs, it is silent upon success; any output demonstrates an error. Instead of checking correctness, the check.sh script can simply output the -results: (The Makefile contains the spoiler):

+results: (The Makefile contains some deobfuscation information):

    out=cat ./check.sh ./prog
-

Interestingly, and a spoiler here: macOS and FreeBSD implement the common +

Interestingly, and a bit of deobfuscation here: macOS and FreeBSD implement the common utility “correctly”. CentOS and Ubuntu both share a “flawed” utility that changes output format based upon input redirection or pipeline(!). As well, the latter two also behave slightly differently on what they count as whitespace: diff --git a/2019/dogon/README.md b/2019/dogon/README.md index 5dee9abfe..161f4b37c 100644 --- a/2019/dogon/README.md +++ b/2019/dogon/README.md @@ -225,7 +225,7 @@ character juxtaposed against a very ancient one, not to mention the program includes some famous name dropping and documents itself as usual. -### Further spoilers, engineering, and obfuscation galore: +### Further deobfuscation, engineering, and obfuscation galore: Those wait for you, curious and intrepid reader, in the attached [apholife.c](%%REPO_URL%%/2019/dogon/apholife.c) file, which is a partially obfuscated version of the diff --git a/2019/dogon/index.html b/2019/dogon/index.html index 85499d213..9cddca912 100644 --- a/2019/dogon/index.html +++ b/2019/dogon/index.html @@ -565,7 +565,7 @@ resulting F in hexadecimal…

And yes, the layout hint involves a mix of the most trendy typographical character juxtaposed against a very ancient one, not to mention the program includes some famous name dropping and documents itself as usual.

-

Further spoilers, engineering, and obfuscation galore:

+

Further deobfuscation, engineering, and obfuscation galore:

Those wait for you, curious and intrepid reader, in the attached apholife.c file, which is a partially obfuscated version of the program I wrote with a lot of helpful annotations and comments for myself and diff --git a/2019/duble/README.md b/2019/duble/README.md index 623c1d0cd..32e34476e 100644 --- a/2019/duble/README.md +++ b/2019/duble/README.md @@ -184,7 +184,9 @@ You will probably have a hard time analyzing this entry, because: ### A few more things: Did you notice the `enum` declaration? Could it be just an `int` or `const int` -variable, instead? (spoiler: ) +variable, instead? + +See also this [deobfuscation page](http://c-faq.com/ansi/constasconst.html>). If your keyboard has no arrow keys, you can probably find alternate keys by reading the source code. diff --git a/2019/duble/index.html b/2019/duble/index.html index 32b8bc28a..556612e7a 100644 --- a/2019/duble/index.html +++ b/2019/duble/index.html @@ -506,7 +506,8 @@ background color?

A few more things:

Did you notice the enum declaration? Could it be just an int or const int -variable, instead? (spoiler: http://c-faq.com/ansi/constasconst.html)

+variable, instead?

+

See also this deobfuscation page.

If your keyboard has no arrow keys, you can probably find alternate keys by reading the source code.

Limits, Portability:

diff --git a/2019/poikola/README.md b/2019/poikola/README.md index f8fdf2ef3..f94010d10 100644 --- a/2019/poikola/README.md +++ b/2019/poikola/README.md @@ -228,7 +228,7 @@ compilers. Small change in code can produce really unexpected results, i.e. the compiler can skip a few expressions or statements without obvious reason. -### Major spoilers +### Major deobfuscation It is commonly believed that [Mike Keith's algorithm](http://www.cadaeic.net/calendar.htm) published in _Journal of diff --git a/2019/poikola/index.html b/2019/poikola/index.html index db6c1f040..9ea6a155b 100644 --- a/2019/poikola/index.html +++ b/2019/poikola/index.html @@ -521,7 +521,7 @@ prime is missing from output.

achieve exactly the same output from different optimization levels and compilers. Small change in code can produce really unexpected results, i.e. the compiler can skip a few expressions or statements without obvious reason.

-

Major spoilers

+

Major deobfuscation

It is commonly believed that Mike Keith’s algorithm published in Journal of Recreational Mathematics, Vol. 22, No. 4, 1990, p. 280, is the shortest way to diff --git a/2020/ferguson1/README.md b/2020/ferguson1/README.md index 63dcd7b86..bc218a6b1 100644 --- a/2020/ferguson1/README.md +++ b/2020/ferguson1/README.md @@ -185,7 +185,7 @@ The gameplay file is long but it includes game printouts as well as explaining the many different gameplay modes. The [play.sh][] script automates most (if not all) of the gameplay modes described in the gameplay file (it also allows you to change colours like [snake-colours.sh][]) as well as the judges' -suggestions (that I don't document so as to not spoil them). You can pass in +suggestions (that I don't document so as to not deobfuscate them). You can pass in environmental variables to both scripts though obviously some will conflict with different options in play.sh. @@ -519,7 +519,7 @@ I submitted three Snake versions; these are the other layouts for those few The [prog.2.c](%%REPO_URL%%/2020/ferguson1/prog.2.c) has more digraphs but I think no other significant differences. The [prog.3.c](%%REPO_URL%%/2020/ferguson1/prog.3.c) is in a more artistic layout (a backwards S), has at least one -additional obfuscation technique (see spoilers) but it also has more digraphs +additional obfuscation technique (see deobfuscation information) but it also has more digraphs and as the judges said they feel that digraphs are dated so that's probably why they chose the first layout. The [prog.3-j.c](%%REPO_URL%%/2020/ferguson1/prog.3-j.c) version is [prog.3.c](%%REPO_URL%%/2020/ferguson1/prog.3.c) with a shorter `J` macro. diff --git a/2020/ferguson1/index.html b/2020/ferguson1/index.html index 76f14231a..8726bf09e 100644 --- a/2020/ferguson1/index.html +++ b/2020/ferguson1/index.html @@ -547,7 +547,7 @@ file for players.

the many different gameplay modes. The play.sh script automates most (if not all) of the gameplay modes described in the gameplay file (it also allows you to change colours like snake-colours.sh) as well as the judges’ -suggestions (that I don’t document so as to not spoil them). You can pass in +suggestions (that I don’t document so as to not deobfuscate them). You can pass in environmental variables to both scripts though obviously some will conflict with different options in play.sh.

Probably just as important is chocolate-cake.html @@ -819,7 +819,7 @@ been warned. (more likely none) who are interested to see them.

The prog.2.c has more digraphs but I think no other significant differences.

The prog.3.c is in a more artistic layout (a backwards S), has at least one -additional obfuscation technique (see spoilers) but it also has more digraphs +additional obfuscation technique (see deobfuscation information) but it also has more digraphs and as the judges said they feel that digraphs are dated so that’s probably why they chose the first layout. The prog.3-j.c version is prog.3.c with a shorter J macro.

diff --git a/2020/yang/README.md b/2020/yang/README.md index 9075493a8..256837911 100644 --- a/2020/yang/README.md +++ b/2020/yang/README.md @@ -37,7 +37,7 @@ What is compiling this entry about? [Having a good .. time](https://southpark.fandom.com/wiki/Asspen/Script)! This winning entry also comes with a [JavaScript timelapse -spoiler](spoiler.html) that shows how this entry was written. +deobfuscation](spoiler.html) that shows how this entry was written. ## Author's remarks: diff --git a/2020/yang/index.html b/2020/yang/index.html index 6213e3bf3..ac3609b71 100644 --- a/2020/yang/index.html +++ b/2020/yang/index.html @@ -417,7 +417,7 @@ If you use the wrong code, you’re gonna have a bad time. What is compiling this entry about? Having a good .. time!

This winning entry also comes with a JavaScript timelapse -spoiler that shows how this entry was written.

+deobfuscation that shows how this entry was written.

Author’s remarks:

Synopsis

    echo "Hello world" | ./prog 12345 > encoded.c