We added a space between the markdown triple code mark and language that was enclosed in HTML comments. So a line of the form: ```` ```<!---c---> ```` became: ```` ``` <!---c---> ```` This was done to **help** some code see that the HTML comment string was not a markdown code specifier. Not all code understands this after this changed. For example, `pandoc(1)` still forms HTML classes of the form "<!---c-->" when it encounters the above mentioned change. We also fixed a problem with `2019/dogon/README.md` regarding a markdown code block. We also fixed a problem with `2020/yang/README.md` regarding a markdown code block.
1.9 KiB
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.