Files
ioccc/1990/dg
Landon Curt Noll ffb738af07 create new status.json model
Changed the model of `status.json` model.

Updated `status.json` IOCCC_status_version from  "0.2 2023-05-22"
to "1.0 2024-03-09".

Updated FAQ 2.6, improving how IOCCC entries announced.

Moved `bin/ioccc-status.sh` to `tmp/ioccc-status.sh`
now that we have a new status.json model for
which this tool no longer fits (sorry tm Canada 🇨🇦).

Added `status.md` markdown to explain the `status.json` model.

Added `status.html` to both display the contents of `status.json`
and render the contents of `status.md` as HTML.

Added `bin/status2html.sh` to convert `status.json`
into HTML for the `status.html` file.

Added `bin/gen-status.sh` to form `status.json`
and `status.html` files.

Added `make gen_status` to top level Makefile.

Performed `make www` to complete all of the above.
2024-03-10 10:05:08 -07:00
..
2024-02-27 23:21:32 -08:00
2023-07-06 21:49:38 -07:00
2024-03-10 10:05:08 -07:00
2024-01-15 04:29:39 -08:00

To build:

make all

To use:

echo foo bar | ./dg

Try:

./try.sh

Judges' remarks:

Some C preprocessors got confused about single quotes in certain cases. In particular, the following source line:

b12(ase(bco(acp(bi(acp(bcp(acp(bpl(aqu(bqu(A))))))))))))))))))))))))))))))

sometimes has to be changed to:

b12(ase(bco(acp(bi(acp(bcp(acp(bpl('A'))))))))))))))))))))))))))))

particularly if the C preprocessor botches single quotes in cpp expansions, 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:

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 #defines. The b12 gets the previous compression as an argument, and prepends the 12, thus making another step in the recreation of the source. The axx() #defines do the same, but add tokens after.

As for the rot13 algorithm, it relies on index(3) to find if the character is in the set A-Za-z. l[] is an array that gets filled with:

"nopqrstuvwxyzzzzabcdefghijklmmmmNOPQRSTUVWXYZZZZABCDEFGHIJKLMMMM"

If index(3) says the char is in the alphabet, then XOR the offset with 16 to translate, and output, otherwise pass it unchanged.

This file is Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved. You are free to share and adapt this file under the terms of this license:

Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)

For more information, see: https://creativecommons.org/licenses/by-sa/4.0/