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
dlowe.orig dlowe.orig
fun fun
ioccc.txt
prog.orig prog.orig
sparkl 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: ## To use:
```sh ```sh
./dlowe [numbers...] ./dlowe [word...]
``` ```
where `[word...]` is one or more words including numbers or otherwise.
### Try: ### Try:
```sh ```sh
./dlowe 0 1 2 3 4 5 6 7 ./try.sh
./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
``` ```
What is different about the above if you do something like: What is different about the above if you do something like:
```sh ```sh
echo 'IOCCC 2013' > ioccc.txt echo 'IOCCC winning entry 2013/dlowe' > ioccc.txt
./demo.sh ./try.sh
rm -f ioccc.txt 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: To make it simpler to see try showing just the different line like:
```sh ```sh
./demo.sh | tail -n 2 > 1.txt ./diff.sh
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
``` ```
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: ## 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 Also, why doesn't it crash but instead produces a correct output when called
with one argument or when all arguments are equal? 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: ▁▁▁▃▃▂▁▂▁▁▉ 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 ```sh
./sflen.sh ./slflen.sh
``` ```
instead. instead (which [try.sh](try.sh) also uses).
### Description ### Description
@@ -164,14 +138,16 @@ sense of the shape of your data.
used. used.
* Produces a few harmless compiler warnings. * Produces a few harmless compiler warnings.
### Obfuscation ### Obfuscation
The code is very terse. I was torn between submitting this version, and a 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 Hand-rolled UTF-8 sequence, magic numbers (what's that 7 for?), meaningless
variable names, reused variables, and so on. variable names, reused variables, and so on.
### Acknowledgements ### Acknowledgements
Edward Tufte invented sparklines (among other things.) Brilliant. 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 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? 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 ## 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 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. 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 He also provided the script [slflen.sh](2013/dlowe/slflen.sh) which is based on
shellcheck, which is based on the author's remarks, giving a script that shows the author's remarks, fixing it for shellcheck and improving upon it (show what
the spark line of the file lengths (as in `wc -c`). These fixes were applied in files will be processed). This script shows the sparkline of the file lengths
the author's remarks as well. (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 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 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 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`. 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 Cody also added the [try.sh](2013/dlowe/try.sh) script to more easily try the
program. 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)) ## [2013/endoh2](2013/endoh2/endoh2.c) ([README.md](2013/endoh2/README.md))