Author:
- Name: Volker Diels-Grabsch
Location: DE - Federal Republic of Germany (Germany)
To build:
make
To use:
./prog < file > file.Z
Try:
./try.sh
Judges’ remarks:
Finally, IOCCC now has its own text compression program, and it is short enough to qualify for the Best Short Program award! That said, can you compress it down to a one-liner, still producing files in the UNIX compress format, albeit sacrificing the compression ratio?
Can you explain why the /dev/zero
file compresses identically by the entry and
the standard compress(1)
tool (see
try.sh), but the text file
compresses differently? The judges know. :)
Author’s remarks:
A tiny “compress” tool:
Usage:
./prog < input.txt > input.txt.Z
Example:
./prog < guidelines.txt > guidelines.txt.Z
Check for correctness:
zcat guidelines.txt.Z > guidelines2.txt
diff -s guidelines.txt guidelines2.txt
Of course you can also use 2015/mills2 instead of
zcat
to verify the output file. The achieved compression ratio roughly matches
that of the classic Unix compress(1)
tool. And the source code is very
compressed, too: It has exactly the same size as the paragraph you are reading
right now. And exactly the same shape. Nevertheless, it is portable C99 code
that runs on 32-bit and 64-bit platforms. It compiles without warnings on both
GCC and Clang even with -Wextra and -Weverything
.
2023 note: the above paragraph might not be true as far as number of bytes goes.
Inventory for 2019/diels-grabsch1
Primary files
- prog.c - entry source code
- Makefile - entry Makefile
- prog.orig.c - original source code
- guidelines.txt - 2018 IOCCC guidelines
- try.sh - script to try entry
- Shakespeare.txt - Coriolanus by Shakespeare
Secondary files
- 2019_diels-grabsch1.tar.bz2 - download entry tarball
- README.md - markdown source for this web page
- .entry.json - entry summary and manifest in JSON
- .gitignore - list of files that should not be committed under git
- .path - directory path from top level directory
- index.html - this web page