Add 2020/kurdyukov2/try.sh + format/typo checks
Also made a minor change to makegif.sh to use $0 instead of literal 'makegif.sh' in usage string.
This commit is contained in:
1 parent
85042e4487
commit
635bad2b1a
4 files changed
+75
-20
No files matched your search
+20
-18
@@ -19,29 +19,27 @@ make
|
||||
./prog 1000 selfie.jpg output.jpg
|
||||
# Admire your portrait in cubist style
|
||||
|
||||
(echo P6 1024 1024 255; dd if=/dev/urandom bs=3M count=1) > random.ppm
|
||||
# Look at random.ppm. Do you see any patterns?
|
||||
./prog_ppm 1000 random.ppm output.ppm
|
||||
# See which patterns the program has found
|
||||
|
||||
for i in 0001 0002 0004 0008 0016 0032 0064 0128 0256 0512 1024 2048 4096 8192 ; do ./prog $i sample.jpg out$i.jpg; done
|
||||
# Then flip through the out*.jpg pictures and see when you start recognizing the image.
|
||||
``
|
||||
./try.sh
|
||||
```
|
||||
|
||||
|
||||
## Judges' remarks:
|
||||
|
||||
This entry has reminded us of a winning entry back in the early 90s. Can you guess which one?
|
||||
This entry has reminded us of a winning entry back in the early 90s. Can you
|
||||
guess which one?
|
||||
|
||||
For a given image, try graphing the execution time relative to the number of rectangles.
|
||||
What is the complexity? Is it obvious from the source code?
|
||||
For a given image, try graphing the execution time relative to the number of
|
||||
rectangles. What is the complexity? Is it obvious from the source code?
|
||||
|
||||
|
||||
## Author's remarks:
|
||||
|
||||
|
||||
### Usage
|
||||
|
||||
This program divides the image into a specified number of rectangles. This process is content aware, so algorithm tries to match most of the information. However, it doesn't find the best theoretically possible layout.
|
||||
This program divides the image into a specified number of rectangles. This
|
||||
process is content aware, so the algorithm tries to match most of the information.
|
||||
However, it doesn't find the best theoretically possible layout.
|
||||
|
||||
```sh
|
||||
./prog 1000 input.jpg output.jpg
|
||||
@@ -54,7 +52,7 @@ You can build three versions, depending on the image format.
|
||||
Default is JPEG version; if you have the `libjpeg` development package installed
|
||||
in your system, then `make` without arguments should do the right thing.
|
||||
|
||||
If you want to use `libjpeg` compiled from sources, then use `LIBS` define to
|
||||
If you want to use `libjpeg` compiled from sources, then use the `LIBJPEG` define to
|
||||
specify the path to includes and the library. For example using
|
||||
[libjpeg source](https://mac-dev-env.patrickbougie.com/libjpeg/) version 9c:
|
||||
|
||||
@@ -68,7 +66,8 @@ Use this command to build a PNG version (you need `libpng`):
|
||||
make prog_png LIBPNG="-lpng"
|
||||
```
|
||||
|
||||
And the PPM version (no additional dependencies, can read raw/ASCII PPM, writes raw PPM):
|
||||
And the PPM version (no additional dependencies, can read raw/ASCII PPM, writes
|
||||
raw PPM):
|
||||
|
||||
```
|
||||
make prog_ppm
|
||||
@@ -76,7 +75,8 @@ make prog_ppm
|
||||
|
||||
### Building on macOS with MacPorts:
|
||||
|
||||
- Thanks to [Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) for this information!
|
||||
Thanks to [Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) for this
|
||||
information!
|
||||
|
||||
First, make sure you have the compiler tools installed e.g. by:
|
||||
|
||||
@@ -90,12 +90,13 @@ Make sure you install [MacPorts](https://www.macports.org/install.php). Then do:
|
||||
sudo port install jpeg libpng ImageMagick
|
||||
```
|
||||
|
||||
The program itself doesn't need ImageMagick, install it only if you plan to make GIFs from the results using `makegif.sh`.
|
||||
The program itself doesn't need ImageMagick, install it only if you plan to make
|
||||
GIFs from the results using `makegif.sh`.
|
||||
|
||||
After that’s installed you need to run make with these options:
|
||||
|
||||
```sh
|
||||
make LIBS="-I/opt/local/include -L/opt/local/lib"
|
||||
make LDFLAGS="-I/opt/local/include -L/opt/local/lib"
|
||||
```
|
||||
|
||||
### Building on macOS with HomeBrew
|
||||
@@ -121,11 +122,12 @@ You are now ready to compile this entry:
|
||||
make clobber all
|
||||
```
|
||||
|
||||
|
||||
### Notes
|
||||
|
||||
Made this thing while experimenting with the idea of representing an image with
|
||||
rectangles (lossy compression). It's not very good in that sense, but the
|
||||
results look funny, like a kind of cubism pixelart.
|
||||
results look funny, like a kind of cubism pixel art.
|
||||
|
||||
Do not use values above 50000, it'll be slow.
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ ext="${image##*.}"
|
||||
dir="gif"
|
||||
[ $# -lt 3 ] && [ "$ext" = "png" -o "$ext" = "ppm" ] && prog="./prog_$ext"
|
||||
[ -f "$image" ] || {
|
||||
echo "Usage: makegif.sh image.jpg output.gif ./prog"
|
||||
echo "Usage: $0 image.jpg output.gif ./prog"
|
||||
echo "Dependencies: ImageMagick, bc (basic calculator)"
|
||||
echo "Note: don't use large images (dimensions above 1000), ImageMagick may fail."
|
||||
echo "Uses \"gif\" directory for temporary files."
|
||||
|
||||
Executable
+51
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# try.sh - demonstrate IOCCC winner 2020/kurdyukov2
|
||||
#
|
||||
|
||||
# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it
|
||||
# this way allows us to have the user specify a different compiler in an easy
|
||||
# way.
|
||||
if [[ -z "$CC" ]]; then
|
||||
CC="cc"
|
||||
fi
|
||||
|
||||
make CC="$CC" all >/dev/null || exit 1
|
||||
|
||||
# clear screen after compilation so that only the entry is shown
|
||||
clear
|
||||
|
||||
# try finding convert(1) from ImageMagick
|
||||
CONVERT="$(type -P convert)"
|
||||
|
||||
|
||||
echo "$ (echo P6 1024 1024 255; dd if=/dev/urandom bs=3M count=1) > random.ppm" 1>&2
|
||||
(echo P6 1024 1024 255; dd if=/dev/urandom bs=3M count=1) > random.ppm
|
||||
echo "Look at random.ppm. Do you see any patterns?" 1>&2
|
||||
read -r -n 1 -p "Press any key to continue: "
|
||||
echo 1>&2
|
||||
# Look at random.ppm. Do you see any patterns?
|
||||
echo "$ ./prog_ppm 1000 random.ppm output.ppm" 1>&2
|
||||
./prog_ppm 1000 random.ppm output.ppm
|
||||
echo 1>&2
|
||||
# See which patterns the program has found
|
||||
echo "Now open output.ppm. What patterns has the program found?" 1>&2
|
||||
echo 1>&2
|
||||
read -r -n 1 -p "Press any key to continue: "
|
||||
echo 1>&2
|
||||
|
||||
echo "$ for i in 0001 0002 0004 0008 0016 0032 0064 0128
|
||||
0256 0512 1024 2048 4096 8192 ; do ./prog $i sample.jpg out$i.jpg; done" 1>&2
|
||||
for i in 0001 0002 0004 0008 0016 0032 0064 0128 0256 0512 1024 2048 4096 8192 ; do ./prog "$i" sample.jpg "out$i".jpg; done
|
||||
echo "Now flip through out*.jpg and see when you start to recognise the image." 1>&2
|
||||
|
||||
if [[ -n "$CONVERT" ]]; then
|
||||
echo 1>&2
|
||||
read -r -n 1 -p "Press any key to create GIF: "
|
||||
echo 1>&2
|
||||
echo "$ $CONVERT -delay 10 -dither none -loop 0 $(ls out*.jpg | sort -V) $(ls out*.jpg | sort -rV) +map out.gif" 1>&2
|
||||
"$CONVERT" -delay 10 -dither none -loop 0 $(ls out*.jpg | sort -V) $(ls out*.jpg | sort -rV) +map out.gif
|
||||
echo 1>&2
|
||||
echo "Now look at out.gif with a viewer that can show animation." 1>&2
|
||||
echo "Warning: includes flashing colours." 1>&2
|
||||
fi
|
||||
+3
-1
@@ -4411,7 +4411,9 @@ use the program to play the WAV files (and in one case `stdout`).
|
||||
|
||||
## <a name="2020_kurdyukov2"></a>[2020/kurdyukov2](/2020/kurdyukov2/prog.c) ([README.md](/2020/kurdyukov2/README.md))
|
||||
|
||||
[Cody](#cody) added `-L`/`-I` paths to the Makefile to let this compile more easily if
|
||||
[Cody](#cody) added the [try.sh](/2020/kurdyukov2/try.sh) script.
|
||||
|
||||
Cody also added `-L`/`-I` paths to the Makefile to let this compile more easily if
|
||||
the user has installed the appropriate library with
|
||||
[MacPorts](https://www.macports.org) (with the default MacPorts prefix
|
||||
`/opt/local`).
|
||||
|
||||
Reference in new issue
Block a user