Format 2013/dlowe, new script, rename others etc.

The demo.sh was renamed try.sh to be like the other entries.

The new script diff.sh runs some commands that I had previously added
(to demonstrate the entry) but which would be better in a script.

Renamed sflen.sh (for sparkline file length) to be slflen.sh (for
sparkline file length also).

Updated bugs.md - added more features that the author noted.

Format/typo check README.md file.

This should complete the review of 2013/dlowe.
This commit is contained in:
Cody Boone Ferguson committed 2023-12-04 07:48:23 -08:00
1 parent a6a108c57b
commit c5b831f3a0
9 files changed
+109 -70

No files matched your search

+3
View File
@@ -1,5 +1,8 @@
1.txt
2.txt
dlowe
dlowe.orig
fun
ioccc.txt
prog.orig
sparkl
+16 -40
View File
@@ -19,33 +19,23 @@ For more detailed information see [2013 dlowe in bugs.md](/bugs.md#2013-dlowe).
## To use:
```sh
./dlowe [numbers...]
./dlowe [word...]
```
where `[word...]` is one or more words including numbers or otherwise.
### Try:
```sh
./dlowe 0 1 2 3 4 5 6 7
./dlowe 16 32 64 128
./dlowe 16 32 64 128 256
./dlowe 16 32 64 128 256 512
./dlowe 0
echo "sparkline of file sizes: $(wc -c * | awk '{print $1}' | xargs ./dlowe)" # or ./sflen.sh
```
Alternatively, for the lazy or those short on time, try:
```sh
./demo.sh
./try.sh
```
What is different about the above if you do something like:
```sh
echo 'IOCCC 2013' > ioccc.txt
./demo.sh
echo 'IOCCC winning entry 2013/dlowe' > ioccc.txt
./try.sh
rm -f ioccc.txt
```
@@ -54,31 +44,14 @@ rm -f ioccc.txt
To make it simpler to see try showing just the different line like:
```sh
./demo.sh | tail -n 2 > 1.txt
echo 'IOCCC 2013' > ioccc.txt
./demo.sh | tail -n 2 > 2.txt
rm -f ioccc.txt
diff 1.txt 2.txt
rm 1.txt 2.txt
./diff.sh
```
This program will possibly crash or draw something funny with 0 args. Then
again it might not. :-)
This is supposed to happen. As is written in the
[The Jargon File](http://catb.org/jargon/html/F/feature.html):
```
That's not a bug, that's a feature.
```
Ask yourself the following questions: when will it crash, when will it draw
something funny (or will it ? :-) ) and when will it do nothing?
## Judges' remarks:
We liked how this entry used Unicode, specifically UTF-8, in a somewhat obfuscated way.
We liked how this entry used Unicode, specifically UTF-8, in a somewhat
obfuscated way.
Also, why doesn't it crash but instead produces a correct output when called
with one argument or when all arguments are equal?
@@ -140,13 +113,14 @@ $ echo "sparkline of file lengths: $(wc -c * | awk '{print $1}' | xargs ./sparkl
sparkline of file sizes: ▁▁▁▃▃▂▁▂▁▁▉
```
NOTE: this has been provided in [sflen.sh](sflen.sh) so you can try:
NOTE: this has been provided in [slflen.sh](slflen.sh) so you can try:
```sh
./sflen.sh
./slflen.sh
```
instead.
instead (which [try.sh](try.sh) also uses).
### Description
@@ -164,14 +138,16 @@ sense of the shape of your data.
used.
* Produces a few harmless compiler warnings.
### Obfuscation
The code is very terse. I was torn between submitting this version, and a
one-line version compressed using a couple more -D flags.
one-line version compressed using a couple more `-D` flags.
Hand-rolled UTF-8 sequence, magic numbers (what's that 7 for?), meaningless
variable names, reused variables, and so on.
### Acknowledgements
Edward Tufte invented sparklines (among other things.) Brilliant.
-20
View File
@@ -1,20 +0,0 @@
#!/usr/bin/env bash
make all || exit 1
echo "$ ./dlowe 0 1 2 3 4 5 6 7"
./dlowe 0 1 2 3 4 5 6 7
echo
echo "$ ./dlowe 16 32 64 128"
./dlowe 16 32 64 128
echo
echo "$ ./dlowe 16 32 64 128 256"
./dlowe 16 32 64 128 256
echo
echo "$ ./dlowe 16 32 64 128 256 512"
./dlowe 16 32 64 128 256 512
echo
echo "$ ./dlowe 0"
./dlowe 0
echo
echo "$ ./sflen.sh"
./sflen.sh
+22
View File
@@ -0,0 +1,22 @@
#!/usr/bin/env bash
#
# 2013/dlowe/diff.sh - show diff of output of two commands based on different
# number of files (due to total length differing) in the directory
# 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
echo "$ ./try.sh | tail -n 3 > 1.txt" 1>&2
./try.sh | tail -n 3 > 1.txt
echo "$ echo 'IOCCC winning entry 2013/dlowe' > ioccc.txt" 1>&2
echo 'IOCCC winning entry 2013/dlowe' > ioccc.txt
echo "$ ./try.sh | tail -n 3 > 2.txt" 1>&2
./try.sh | tail -n 3 > 2.txt
echo "$ diff 1.txt 2.txt" 1>&2
diff 1.txt 2.txt
rm -f 1.txt 2.txt ioccc.txt
-5
View File
@@ -1,5 +0,0 @@
#!/usr/bin/env bash
make all || exit 1
ln -sf dlowe sparkl
echo "sparkline of file lengths: $(wc -c ./* | awk '{print $1}' | xargs ./sparkl)"
+19
View File
@@ -0,0 +1,19 @@
#!/usr/bin/env bash
#
# 2013/dlowe/slflen.sh - show sparkline length of all files in the current
# working directory
#
# 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
ln -sf dlowe sparkl
ls -1 *
echo -n "sparkline length of above files: "
wc -c ./* | awk '{print $1}' | xargs ./sparkl
+34
View File
@@ -0,0 +1,34 @@
#!/usr/bin/env bash
#
# try.sh - demonstrate IOCCC winner 2013/dlowe
#
# 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
echo "$ ./dlowe 0 1 2 3 4 5 6 7"
./dlowe 0 1 2 3 4 5 6 7
echo
echo "$ ./dlowe 16 32 64 128"
./dlowe 16 32 64 128
echo
echo "$ ./dlowe 16 32 64 128 256"
./dlowe 16 32 64 128 256
echo
echo "$ ./dlowe 16 32 64 128 256 512"
./dlowe 16 32 64 128 256 512
echo
echo "$ ./dlowe 0"
./dlowe 0
echo
echo "$ ./slflen.sh"
./slflen.sh
+6
View File
@@ -2876,6 +2876,12 @@ exercise to see if you understand the code.
You can try and answer the questions, too: when will it crash? When will it draw
something funny (or will it? :-) ) and when will it just do nothing?
The author also stated:
* Produces bogus graphs when given > about 5000 arguments.
* Only works if your terminal is UTF-8 and your font supports the 8 glyphs
used.
## 2013 hou
+9 -5
View File
@@ -3541,20 +3541,24 @@ author linked to at `https://bitly.com/1bU8URK`.
different compilers as [fun.c](2013/dlowe/fun.c). He modified the Makefile so
that running `make all` will compile it, saving you the effort.
He also provided the script [sflen.sh](2013/dlowe/sflen.sh), fixing it for
shellcheck, which is based on the author's remarks, giving a script that shows
the spark line of the file lengths (as in `wc -c`). These fixes were applied in
the author's remarks as well.
He also provided the script [slflen.sh](2013/dlowe/slflen.sh) which is based on
the author's remarks, fixing it for shellcheck and improving upon it (show what
files will be processed). This script shows the sparkline of the file lengths
(as in `wc -c`). The fixes (but not the improvements) were added to the author's
remarks.
Since the author called the program `sparkl` Cody modified the Makefile so that
running `make all` will create a symlink to `dlowe` as `sparkl`. Running `make
clobber` will delete both and running `make clobber all` will ensure that the
symlink is created. The `sflen.sh` script also explicitly makes sure to create
symlink is created. The `slflen.sh` script also explicitly makes sure to create
the symlink as it uses it, even though it runs `make clobber all`.
Cody also added the [try.sh](2013/dlowe/try.sh) script to more easily try the
program.
He also added the [diff.sh](2013/dlowe/diff.sh) script which is based on some
commands to try that he suggested to see how different lengths look.
## [2013/endoh2](2013/endoh2/endoh2.c) ([README.md](2013/endoh2/README.md))