85 lines
2.2 KiB
Markdown
85 lines
2.2 KiB
Markdown
## To build:
|
|
|
|
This entry requires SDL2 to be installed. See the
|
|
FAQ on "[SDL1 and SDL2](../../faq.html#SDL)"
|
|
if you don't have it
|
|
installed and don't know how to do so.
|
|
|
|
``` <!---sh-->
|
|
make
|
|
```
|
|
|
|
|
|
## To use:
|
|
|
|
``` <!---sh-->
|
|
./prog
|
|
```
|
|
|
|
|
|
## Try:
|
|
|
|
``` <!---sh-->
|
|
./prog ioccc.txt
|
|
|
|
./prog prog.c
|
|
|
|
./prog sand.txt
|
|
|
|
./prog sand.alt.txt
|
|
```
|
|
|
|
**NOTE**: these invocations will take quite some time to finish.
|
|
|
|
|
|
## Judges' remarks:
|
|
|
|
Can you explain the behavior of the program when [ioccc.txt](ioccc.txt) is given
|
|
to it as input?
|
|
|
|
How would the description of the state machine look like when translated from
|
|
Polynomish to English?
|
|
|
|
|
|
## Author's remarks:
|
|
|
|
### Remarks
|
|
|
|
This entry graphically displays a simulation of sand falling.
|
|
It uses SDL to draw the interface.
|
|
|
|
The code makes the following assumptions about the underlying system:
|
|
|
|
* SDL2 is installed from [https://libsdl.org](https://libsdl.org) or your
|
|
package manager.
|
|
* `double` is an IEEE 754 floating-point type and `sizeof(double)==8`.
|
|
* The compiler supports the C99 standard.
|
|
|
|
In order to simulate the motion of the sand, a cellular automaton is used. The
|
|
state transition table is not stored directly. Instead, the program stores the
|
|
coefficients of a polynomial that map each state to the correct one. These
|
|
coefficients are stored as raw hexadecimal in the `V[]` array, and they are
|
|
reinterpreted as `double`s when used. This allows more numeric precision in fewer
|
|
characters (base 16 > base 10), and makes the purpose of the array less clear.
|
|
|
|
The code is laid out graphically as a bucket pouring sand, and it is far easier
|
|
to observe this high-level layout than the code's actual function.
|
|
|
|
The preprocessor is used to both obfuscate the code as a whole and abbreviate
|
|
the calls to SDL. Additionally, throughout the code, the variables were named
|
|
so that they are short and easily confused with each other.
|
|
|
|
<!--
|
|
|
|
Copyright © 1984-2024 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/
|
|
|
|
-->
|