As requested on GitHub: a tool that will be written, readme2index, will,
as explained:
'... will take the converted HTML from the README.md markdown and
inject it into an HTML template. Things such title, award one and
author information will be injected into the HTML page ahead of the
HTML that was converted from the README.md markdown. Without going
into details of HOW at this time, the result will be a coherent HTML
index.html page with the winner title / award, winning author
information, and important file links come from other sources and
NOT from the README.md file.
The text from the 1st award line, thru the authorship information,
and up to but not including the "## To build:" line in the README.md
file will just get in the way. Moreover authors might be tempted to
try and maintain that top of README.md text instead of working with
the author/_author_handle_.json and winner .winner.json files.
This was done with my[0] sgit(1) (https://github.com/xexyl/sgit) tool like:
sgit -o -n -e '/^## To build:/,$p' '[12][0-9][0-9][0-9]/*/README.md'
[0] Is that shameless self-promotion? I don't know but I don't care: it
is generally a very useful tool and has been used in other repos too.
Besides, I've done it many times before and it's a great example that I
will be adding to the README.md file of the tool, one I hadn't thought
of doing.
3.3 KiB
To build:
make
Bugs and (Mis)features:
The current status of this entry is:
STATUS: doesn't work with some platforms - please help us fix
For more detailed information see 2011 richards in bugs.md.
To use:
./richards
Try:
echo '10 9 8 7 6 5 4 3 2 1*p*p*p*p*p*p*p*p*p' | ./richards
echo '64 256 128 p/p*p' | ./richards
Judges' remarks:
Oh no, yet another
dc-style calculator? (see
2000/dlowe using an embedded Perl interpreter and deemed Worst Abuse of the Rules). Well, this one does it (expression calculation, that is,
not the rule abuse) in a different way. The author claims that his calculator
does just-in-time compilation. What would you do to prove or disprove his claim
without attempting to unravel the source?
Author's remarks:
This is an implementation of the classic UNIX
dc command, the
reverse Polish
calculator. Actually it's a pretty bad implementation, since it only implements
32-bit integers (well, sizeof(int)-sized integers). It only implements the
commands +, -, *, /, p (only for numbers), register stacks, macros and
comparisons. Wow, you'd think I could've done better in 2K of code.
OH! I forgot to mention! It's a JIT.
Wait, don't stop reading! I know what you're thinking, platform-specific code is discouraged in IOCCC. But do you see any platform-specific code? There's no assembler here! This JIT works on a dozen platforms, and the only platform-specific assumptions it makes are that the stack grows down and integers are at least 32-bit.
You will probably get warnings while compiling the code. In particular:
-
If your system requires the inclusion of alloca.h to use alloca, use the compile flag
-DAH. -
If your system cannot use
mmap(), use the compile flag-DNM. -
I don't include any headers I don't strictly need to, so you'll get warnings about (at least)
memcpy(),isdigit(),atoi(),calloc(),malloc()andalloca()if you didn't use-DAH.- NOTE from judges: we added these includes in 2023.
-
GCC likes to complain about
while (a = b)(assignments as a condition). -
I don't return from
main(), even though it's declared to return int.
Platforms on which all known/tested optimization levels work with no additional flags:
- gcc 4.6.2 + x86[_64] + GNU/Linux, Mac OS X or Windows
- clang 2.9-16 + x86[_64] + GNU/Linux or Mac OS X
- tcc 0.9.25
- gcc 4.4.5 + alpha, arm, mips[el], powerpc[64], s390x (IBM zSeries)
- gcc 4.1.3 + vax + NetBSD
Platforms which work but not at all optimization levels or needing special flags:
- owcc 1.9 + x86 + Windows: Needs
-DNM -DAH -fno-stack-check - gcc 4.4.5 + sh4: -O0 works, higher optimization levels don't work for unknown reasons.
Copyright and CC BY-SA 4.0 License:
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/