Add 1994/weisberg/try.sh and primes.sh

The primes.sh script is like 1985/august/primes.sh but it only acts on
reversed output (if rev(1) is installed) of the weisberg because
weisberg actually prints out primes so there's no point doing it without
reversing it. One can specify the number of lines to reverse (not how
many primes to show) by passing an arg to the script. The try.sh script
uses the default (15) and also 25.
This commit is contained in:
Cody Boone Ferguson committed 2024-01-15 11:04:29 -08:00
1 parent e5c062d27d
commit 2daa0822f6
4 files changed
+111 -2

No files matched your search

+11 -2
View File
@@ -5,7 +5,7 @@ make all
```
There is an alternate version that uses more memory. See [alternate
code](#alternate-code) below.
code](#alternate-code) below for more details.
## To use:
@@ -18,9 +18,18 @@ code](#alternate-code) below.
## Try:
```sh
./weisberg | head -n 15
./try.sh
```
If you have `primes(1)` installed you might also wish to try:
```sh
./primes.sh number
```
where `number` is a positive number, defaulting to 15. The [try.sh](try.sh)
script will also do this.
## Alternate code:
+40
View File
@@ -0,0 +1,40 @@
#!/usr/bin/env bash
#
# primes.sh - feed primes(1) IOCCC winner 1994/weisberg
#
# 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
PRIMES=$(type -P primes)
COUNT=15
if [[ "$#" -ge 1 ]]; then
COUNT="$1"
if ! [[ $COUNT =~ ^[0-9]+$ ]]; then
echo "not a number: $COUNT" 1>&2
exit 1
fi
fi
REV="$(type -P rev)"
if [[ -n "$PRIMES" && -n "$REV" ]]; then
read -r -n 1 -p "Press any key to find primes in ./weisberg | head -n $COUNT, reversed: "
echo 1>&2
while read -r n; do primes "$n" $((n + 1)); done < <((./weisberg | head -n "$COUNT" | "$REV" ))
else
echo "primes not installed" 1>&2
echo 1>&2
echo "See the following GitHub repo:" 1>&2
echo 1>&2
echo " https://github.com/vattam/BSDGames" 1>&2
echo 1>&2
echo "and after installing it try running this again."
exit 1
fi
+53
View File
@@ -0,0 +1,53 @@
#!/usr/bin/env bash
#
# try.sh - demonstrate IOCCC winner 1994/weisberg
#
# 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
REV="$(type -P rev)"
read -r -n 1 -p "Press any key to run: ./weisberg | head -n 15: "
echo 1>&2
./weisberg | head -n 15
echo 1>&2
read -r -n 1 -p "Press any key to run: ./weisberg | head -n 42 (space = next page, q = quit): "
echo 1>&2
./weisberg | head -n 42 | less -rEXF
echo 1>&2
if [[ -n "$REV" ]]; then
echo 1>&2
read -r -n 1 -p "Press any key to reverse ./weisberg | head -n 15: "
echo 1>&2
./weisberg | head -n 15 | "$REV"
read -r -n 1 -p "Press any key to reverse: ./weisberg | head -n 42 (space = next page, q = quit): "
echo 1>&2
./weisberg | head -n 42 | "$REV" | less -rEXF
echo 1>&2
fi
# run primes.sh too
echo 1>&2
read -r -n 1 -p "Press any key to run: ./primes.sh: "
echo 1>&2
./primes.sh
echo 1>&2
read -r -n 1 -p "Press any key to run: ./primes.sh 25: "
echo 1>&2
./primes.sh 25
echo 1>&2
exit 0
+7
View File
@@ -1948,6 +1948,13 @@ Note that the alt code does not use `fgets(3)` but rather `gets(3)`.
use with other tools as well by making the program output not a space after each
number but rather a newline.
Cody also added the scripts [try.sh](/1994/weisberg/try.sh) and
[primes.sh](/1994/weisberg/primes.sh). The `primes.sh` script is used by
`try.sh` and if both `primes(1)` and `rev(1)` are installed it will reverse the
lines of the `weisberg`, feeding it to `primes(1)`, showing those that are
primes. It only does the reversed output because the program actually prints
primes.
## <a name="1994_westley"></a>[1994/westley](/1994/westley/westley.c) ([README.md](/1994/westley/README.md]))