Best of Show - Most Shrinkable

Don Yang
omoikane@uguu.org
http://uguu.org/

Judges' comments:

To build:

make akari

To run:

./akari [input_file_or_- [output_file_or_- [even]]]

Try:

./akari < example.ppm > odd_output.ppm
./akari - - even < example.ppm > even_output.ppm
./akari example.ppm odd_output.ppm

make akari2.c
cat akari2.c

make akari2

./akari2 < akari2.c
./akari2 rot13 < akari2.c

make akari3.c
cat akari3.c

make akari3

./akari3

make akari4.c
cat akari4.c

./akari4

Selected Judges Remarks:

Akari is an image downsampling utility that accepts 3 inout formats:

* PGM (netpbm grayscale image).  Akari only accept PGM files with this
  header: P5 <width> <height> 255.  Images with extra comments such as
  the ones produced by GIMP will not be parsed properly.

* PPM (netpbm RGB image).  Only PPM files with this header are
  accepted: P6 <width> <height> 255.

* ASCII art (with end of lines in LF bytes only, not CR-LF)

Anything that is not parseable as PGM or PPM will be downsampled as ASCII art.

Author’s comments:

Akari is an image downsampling utility. She accepts up to 3 arguments:

First argument is the input image. If it’s “-” or unspecified, Akari will read from stdin.

Second argument is the output image. If it’s “-” or unspecified, Akari will write to stdout.

Third argument, if specified, causes Akari to keep even pixels on even scanlines. By default Akari will keep odd pixels on odd scanlines.

Examples:

gcc akari.c -o akari
./akari < example.ppm > odd_output.ppm
./akari - - even < example.ppm > even_output.ppm
./akari example.ppm odd_output.ppm

Akari accepts 3 input formats: * PGM (netpbm grayscale image). Akari only accept PGM files with this header: P5 255. Images with extra comments such as the ones produced by GIMP will not be parsed properly. * PPM (netpbm RGB image). Only PPM files with this header are accepted: P6 255. * ASCII art (with end of lines in LF bytes only, not CR-LF)

This is useful for decoding some curiously interlaced images, such as the included example.ppm

Anything that is not parseable as PGM or PPM will be downsampled as ASCII art. Since the source code is formatted as ASCII art, it’s only natural to try:

./akari akari.c akari2.c

akari2.c is also a valid C program, and accepts up to 1 argument. By default, this second program reads text from stdin and writes expanded output to stdout. If the extra argument is specified, the output text will also pass through a rot13 filter.

gcc akari2.c -o akari2
./akari2 < input.txt > expanded_output.txt
./akari2 rot13 < input.txt > expanded_and_rot13_output.txt

You can combine the two programs together to have just a regular rot13 filter:

./akari2 rot13 < input.txt | ./akari > rot13.txt

Of course, we wouldn’t stop with just 2 programs, you can downsample the source again and get yet another C program:

./akari < akari.c | ./akari > akari3.c

We must go deeper:

./akari < akari.c | ./akari | ./akari > akari4.c

akari3.c and akari4.c are still (mostly valid) C programs. “gcc -Wall” will output a few warnings, but still produce output executables. The output executables each print a message to stdout.

It takes quite a bit of skill and obfuscation to interleave a C program 4 levels deep, it’s much easier to interleave something like a brainf#$% program in a C program, for example. For comparison, a brainf#$% program is embedded inside akari.c


Creative Commons License

© Copyright 1984-2012, Leo Broukhis, Simon Cooper, Landon Curt Noll - All rights reserved
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.