Files
ioccc/2004/gavare
Landon Curt Noll 2ba12ecc3c restore *.orig.c to each entry
Under each yyyy/dir there is a file of the form '*.orig.c'
containing the original source code, or as close as we can
get to the original source code.
2023-07-06 21:49:38 -07:00
..
2023-04-25 02:51:11 -07:00
2023-05-13 11:45:33 +10:00
2022-09-18 23:37:49 -07:00
2023-07-06 21:49:38 -07:00
2023-04-25 02:51:11 -07:00
2023-04-25 02:51:11 -07:00
2023-04-25 02:51:11 -07:00

Best Use of Light and Spheres

Anders Gavare
Sweden
https://gavare.se

To build:

make

To run:

./gavare

Try:

./gavare > ioccc_ray.ppm

Alternate code:

The author provided on their web page for the entry an unobfuscated version that was used during development, which we have included in the file gavare.r3.c. To compile, try:

make alt

Use gavare.r3 as you would gavare above.

Judges' remarks:

For users of systems that distinguish between text and binary mode (you know who you are), add a library call that specifies binary mode for stdout as the first statement of main(), or use freopen("ioccc_ray.ppm", "wb", stdout); and do not use redirection.

A freely distributable command-line version of Microsoft Visual C exhibits an optimizer bug when compiling this entry. Disable /Og for best results.

The judges were able to figure out how to control position (in all 3 coordinates), size, and color (to some extent) of the balls.

Author's remarks:

It is possible to write some kinds of programs in C without using reserved words. For very short and trivial programs, it usually isn't very hard to write a variant using no reserved words, but with this program I want to show that also non-trivial programs can be written this way. This IOCCC entry contains no reserved words (I don't count 'main' as a reserved word, although the compiler gives it special meaning) and no preprocessor directives.

The program is a small ray-tracer. The first line of the source code may be modified if you want the resulting image to be of some other resolution than the predefined. The A value is an anti-alias factor. Setting it to 1 disables the anti-aliasing feature (this makes the output look bad), but setting it too high makes the trace take a lot more time to complete.

The ppm image can then be viewed using an image viewer of your own choice. (Running the ray-tracer may take several minutes, even on fast machines, so be patient.)

I am very much aware about the fact that I'm breaking the guidelines. For example, the word int is a reserved word and therefore all variable declarations are implicit. There will no doubt be lots of warnings, no matter which compiler is used. Still, the source code should be word- length-independent and endianness-independent.

Humor

Another reason for writing code without using reserved words is that many text editors will make all reserved words turn BOLD when printed on paper. Since I care for the global environment, we shouldn't waste any more laser toner, or ink, than necessary. Everyone should write C code with no reserved words, and our world will be a better place.

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/