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.
To build:
make
Bugs and (Mis)features:
The current status of this entry is:
STATUS: INABIAF - please DO NOT fix
For more detailed information see 2011/borsanyi in bugs.html.
To use:
./borsanyi < some_data_file
Try:
./try.sh
Judges' remarks:
This is a nice quick histogram plotter. A useful utility when you need to look at the distribution of some data.
Challenges:
You can modify the number of histogram bins and the scaling of the histogram by editing the source. Try to find them!
If you look at the source you will notice that the usual array of
histogram bins is missing. The source contains no arrays and it does not
use malloc(3) or alloca(3). How does it build the histogram?
While the input does not need to be sorted, the histogram output is sorted.
How does it put the data into buckets? Why does it fork(2) 22 times?
Author's remarks:
This small piece of program is meant to be a useful tool, when there are some data around and you need a quick glance at the histogram. I am all too often logged in to a remote machine with slow X connection, and a terminal-based program would be of great help.
Limitations
- I optimized the output for the data I had around, you might want to adjust for your needs. For a great excess of data points the program will crash (depending on the available stack).
- Giving too few (distinct) points can also cause crash (or division by zero).
- The program expects plain numbers separated by white spaces.
- ASCII is assumed.
- Some POSIX-like system is assumed (
fork()andwait(NULL)are used). - Do not give any arguments to the program.
- Could rounding errors cause the omission of the highest bin? There might be empty bins at the edges.
Obfuscation
- The program follows a rather unconventional approach to the task of histogram building. The usual array of integers (for the histogram bins) is missing entirely. The data are read once, the range is determined, but the data points are not put in any array. Yet they are remembered, and each of them is put into its own bin afterwards. But where are the bins?
- I tried to use as few keywords as possible, hence there are no loops.
- Multi-process approach for optimal use of resources.
- Some bin size obfuscation.