Merge pull request #1611 from xexyl/cable22013-try-bugs
This commit is contained in:
4 files changed
+119
-41
No files matched your search
+25
-41
@@ -5,6 +5,19 @@ make
|
||||
```
|
||||
|
||||
|
||||
### Bugs and (Mis)features:
|
||||
|
||||
The current status of this entry is:
|
||||
|
||||
```
|
||||
STATUS: INABIAF - please **DO NOT** fix
|
||||
```
|
||||
|
||||
For more detailed information see [2013 cable2 in bugs.md](/bugs.md#2013-cable2).
|
||||
|
||||
|
||||
|
||||
|
||||
## To use:
|
||||
|
||||
```sh
|
||||
@@ -14,44 +27,10 @@ make
|
||||
|
||||
### Try:
|
||||
|
||||
Here is an OCR example that shows all 94 supported ASCII characters:
|
||||
For different OCR examples:
|
||||
|
||||
```sh
|
||||
./cable2 ascii.bmp
|
||||
```
|
||||
|
||||
Here is an example of colored ASCII:
|
||||
|
||||
```sh
|
||||
./cable2 multi_color.bmp color
|
||||
```
|
||||
|
||||
Here is an example using different character sizes and different
|
||||
positions in the same file:
|
||||
|
||||
```sh
|
||||
./cable2 mixed_sizes.bmp
|
||||
```
|
||||
|
||||
How about about hand-written C code:
|
||||
|
||||
```sh
|
||||
./cable2 hello_world.bmp | gcc -xc -o hello -
|
||||
./hello
|
||||
```
|
||||
|
||||
Sometimes typeset text will work, if the typeset has characters that
|
||||
are enough to the supported handwritten shapes. For example
|
||||
Menlo, 160 pt:
|
||||
|
||||
```sh
|
||||
./cable2 typeset.bmp
|
||||
```
|
||||
|
||||
And as an added IOCCC bonus: :-)
|
||||
|
||||
```sh
|
||||
./cable2 bonus.bmp
|
||||
./try.sh
|
||||
```
|
||||
|
||||
|
||||
@@ -73,6 +52,7 @@ Magic!
|
||||
BMP files created by most paint programs should work. The author recommends
|
||||
Paint.NET.
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
- Every printable ASCII character is recognized (94 characters plus space), plus
|
||||
@@ -91,6 +71,7 @@ colors for different text characters.
|
||||
- If "color" is specified as the second command line parameter, the program's
|
||||
output will also be in color, on ANSI/VTxxx terminals.
|
||||
|
||||
|
||||
### Why is this entry obfuscated/interesting?
|
||||
|
||||
- The source is presented as a beautiful moonlit scene, in which a quick brown
|
||||
@@ -117,6 +98,7 @@ sequences? Clue: the weird macro `P` does the interesting part of it, but how?
|
||||
do this? Clue: the string to print is defined in the macro `$`, but how can a
|
||||
string defined in that way ever get printed?
|
||||
|
||||
|
||||
### Other notes
|
||||
|
||||
- The novel character recognition algorithm used has not been previously
|
||||
@@ -125,10 +107,10 @@ this entry win the IOCCC, it will be the first time (to the author's knowledge)
|
||||
that the IOCCC has been used for peer review/publication of original research.
|
||||
- OCR in general is a hard problem. Here, we only recognise one possible form
|
||||
for each character. You can see what the supported character shapes look like by
|
||||
looking at the examples in ascii.bmp. If you copy the shape of the character
|
||||
forms you find in there, recognition accuracy should be very good (95%+). A more
|
||||
"useful" version would extend the character stroke table to support multiple
|
||||
different commonly-used forms for each character.
|
||||
looking at the examples in [ascii.bmp](ascii.bmp). If you copy the shape of the
|
||||
character forms you find in there, recognition accuracy should be very good
|
||||
(95%+). A more "useful" version would extend the character stroke table to
|
||||
support multiple different commonly-used forms for each character.
|
||||
- Despite being the largest possible IOCCC entry at 4096 bytes, it is also
|
||||
probably the smallest general-purpose OCR program ever written (including the
|
||||
character stroke data), maybe by several orders of magnitude.
|
||||
@@ -137,6 +119,7 @@ McCaughan - thank you!) to squeeze the character stroke table (containing around
|
||||
2000 strokes for the whole ASCII character set) into a string constant of just
|
||||
472 characters.
|
||||
|
||||
|
||||
### Bugs/features
|
||||
|
||||
- The width of input images must be a multiple of 4.
|
||||
@@ -146,11 +129,12 @@ feature, do not use a greyscale input file!
|
||||
- Normal Windows BMP files are stored "upside-down", i.e. the bottom line in the
|
||||
image is written first. Some (old) graphics programs actually write BMP files
|
||||
"top-to-bottom" and the program does not support such files.
|
||||
- Using antialiased brush strokes to draw your letters is fine; however,
|
||||
- Using anti-aliased brush strokes to draw your letters is fine; however,
|
||||
antialiasing interferes with color detection in "color" mode.
|
||||
- Only runs on little endian machines (since the BMP format is little endian,
|
||||
and endianness conversion would make the source too large for IOCCC rule 2).
|
||||
|
||||
|
||||
### Compiler warnings
|
||||
|
||||
`clang` warns about unused expression results, missing type specifiers, and
|
||||
|
||||
Executable
+55
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# try.sh - demonstrate IOCCC winner 2013/cable2
|
||||
#
|
||||
|
||||
# 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
|
||||
|
||||
read -r -n 1 -p "Press any key for OCR example that shows all 94 ASCII chars: "
|
||||
echo 1>&2
|
||||
echo "$ ./cable2 ascii.bmp" 1>&2
|
||||
./cable2 ascii.bmp
|
||||
echo 1>&2
|
||||
|
||||
read -r -n 1 -p "Press any key for OCR example with ASCII colours: "
|
||||
echo 1>&2
|
||||
echo "$ ./cable2 multi_color.bmp color" 1>&2
|
||||
./cable2 multi_color.bmp color
|
||||
echo 1>&2
|
||||
|
||||
read -r -n 1 -p "Press any key for OCR example of different character size/positions: "
|
||||
echo 1>&2
|
||||
echo "$ ./cable2 mixed_sizes.bmp" 1>&2
|
||||
./cable2 mixed_sizes.bmp
|
||||
echo 1>&2
|
||||
|
||||
read -r -n 1 -p "Press any key to extract and compile C code by OCR: "
|
||||
echo 1>&2
|
||||
echo "$ ./cable2 hello_world.bmp | gcc -xc -o hello -" 1>&2
|
||||
./cable2 hello_world.bmp | gcc -xc -o hello -
|
||||
echo "$ ./hello" 1>&2
|
||||
./hello
|
||||
echo 1>&2
|
||||
|
||||
echo "Sometimes typeset text will work if the typeset has characters that are" 1>&2
|
||||
echo "enough to support the handwritten shapes." 1>&2
|
||||
read -r -n 1 -p "Press any key to try Menlo 160pt text: "
|
||||
echo 1>&2
|
||||
echo "$ ./cable2 typeset.bmp" 1>&2
|
||||
./cable2 typeset.bmp
|
||||
echo 1>&2
|
||||
|
||||
read -r -n 1 -p "Press any key for an added IOCCC bonus: "
|
||||
echo 1>&2
|
||||
echo "$ ./cable2 bonus.bmp" 1>&2
|
||||
./cable2 bonus.bmp
|
||||
@@ -2840,6 +2840,26 @@ fire](https://en.wikipedia.org/wiki/Halt_and_Catch_Fire_(computing)) :-)
|
||||
|
||||
# 2013
|
||||
|
||||
## 2013 cable2
|
||||
|
||||
### STATUS: INABIAF - please **DO NOT** fix
|
||||
### Source code: [2013/cable2/cable2.c](2013/cable2/cable2.c)
|
||||
### Information: [2013/cable2/README.md](2013/cable2/README.md)
|
||||
|
||||
The author stated:
|
||||
|
||||
- The width of input images must be a multiple of 4.
|
||||
- Input images can be 8-bit greyscale, 24-bit color or 32-bit color only. 8-bit
|
||||
color and 16-bit color are not supported. If you use the "color" command-line
|
||||
feature, do not use a greyscale input file!
|
||||
- Normal Windows BMP files are stored "upside-down", i.e. the bottom line in the
|
||||
image is written first. Some (old) graphics programs actually write BMP files
|
||||
"top-to-bottom" and the program does not support such files.
|
||||
- Using anti-aliased brush strokes to draw your letters is fine; however,
|
||||
antialiasing interferes with color detection in "color" mode.
|
||||
- Only runs on little endian machines (since the BMP format is little endian,
|
||||
and endianness conversion would make the source too large for IOCCC rule 2).
|
||||
|
||||
|
||||
## 2013 cable3
|
||||
|
||||
@@ -2882,6 +2902,20 @@ This program will not terminate on its own; you must kill `hou` (but not Qiming
|
||||
Hou :-) ) yourself. This should not be fixed.
|
||||
|
||||
|
||||
## 2013 mills
|
||||
|
||||
### STATUS: INABIAF - please **DO NOT** fix
|
||||
### Source code: [2013/mills/mills.c](2013/mills/mills.c)
|
||||
### Information: [2013/mills/README.md](2013/mills/README.md)
|
||||
|
||||
The author reminds us that if you kill the program you will have to wait a short
|
||||
bit of time before you can start it again if you want it to be able to bind to
|
||||
the socket (which obviously you do). The source is out the scope of this
|
||||
document but the author does mention the well known (at least to those of us who
|
||||
have experience with socket programming :-) ) fix. However as the author pointed
|
||||
it out as a known limitation it is not a bug but a feature.
|
||||
|
||||
|
||||
# 2014
|
||||
|
||||
|
||||
|
||||
@@ -3495,6 +3495,11 @@ Cody also added the [try.sh](2013/birken/try.sh) script for the entry and the
|
||||
joke Easter egg in it based on the judges' remarks.
|
||||
|
||||
|
||||
## [2013/cable2](2013/cable2/cable2.c) ([README.md](2013/cable2/README.md]))
|
||||
|
||||
[Cody](#cody) added the [try.sh](2013/cable2/try.sh) script.
|
||||
|
||||
|
||||
## [2013/cable3](2013/cable3/cable3.c) ([README.md](2013/cable3/README.md]))
|
||||
|
||||
[Cody](#cody) fixed this to compile with modern systems. The problems were that
|
||||
|
||||
Reference in new issue
Block a user