Files
ioccc/2014/wiedijk
Landon Curt Noll f29b37e49a improve HTML menus, add social.html, prep for IOCCC28 winners
Prepare for the winners of **IOCCC28**.

> However these are not the 2024 droids you are looking for.  :-)

The HTML menu (both JavaScript and non-JavaScript) has been updated.

The `Status -> Rules and guidelines' have been replaced with two
separate menus `Status -> IOCCC rules` and `Status -> IOCCC guidelines`.

Added a new top level `social.html` page: built from a new `social.md`.

Sorted rules for building specific web pages in the top level `Makefile`.
Added `make social` to make the `social.html` page from `social.md`.

The `bin/gen-top-html.sh` now is able to process a argument of **social**
to process the new top level `social.html` page.

Changed `bin/gen-top-html.sh` VERSION from "2.0.0 2025-03-13"
to "2.0.1 2025-07-25".

Below `About -> Home page` a new `About -> IOCCC social media` menu item
as added.

Because the menu change touched every HTML file, we changed the general
copyright date range for HTML files from "1984-2024" to "1984-2025"
due to the extensive changes made for **IOCCC28**.

Those markdown files that were modified in 2025 had their copyright date
range also changed from "1984-2024" to "1984-2025".

Rebuilt tarballs and sitemap due to the extensive HTML rebuilding.

Ran `make update` to perform the above.
2025-07-26 13:06:29 -07:00
..
2020-12-30 16:57:03 -08:00
2023-07-06 21:49:38 -07:00

To build:

    make

To use:

    ./prog

Try:

    ./try.sh

By default that will use indent(1) found by the shell type -P indent and sed(1) found by the shell type -P sed but if you want to change these, say to try a different beautifier, you can do it like:

    INDENT=bcpp ./try.sh

which would change it to use bcpp(1) instead of indent(1). Do similar for sed(1) only use the name SED.

Judges' remarks:

C11 features definitely help this entry to be as concise as it is.

The judges would like to think that they had almost understood how this entry works.

If you win a bet by demonstrating this entry, please let us know.

Author's remarks:

Remarks

  • Computes the factorial function.
  • No loops, no explicit recursion.
  • Untyped C without any casts, using a w word datatype.
  • Varargs not essential, w(*)(w,w*) works just as well.
  • Conforming to ISO C.
  • No warnings when compiled with -std=c99 -Wall -Wextra -pedantic.
  • Comments in the code explain what this really is about.
  • C as a functional programming language: untyped lambda calculus compiled to executable C functions.
  • Untagged closures (just a function pointer followed by some values).
  • Recursion implemented through Curry's paradoxical combinator Y.
  • The readable implementation of Y is on lines 29-30:
    W_f = \x.f(xx)
    Y = \f.W_f W_f
  • A mixture of strict and lazy evaluation, with a _ force function (John Tromp notes that if Turing's fixed-point combinator (\xy.y\z.xxyz)(\xy.y\z.xxyz) had been used, all applications could have been strict).
  • Uses Y to implement factorial on native ints.
  • 10! seconds = 6 weeks.
  • Answers the ultimate question of life, the universe and everything.