From 2daa0822f6496b429e588b2e667ce3c0eb6da2c5 Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Mon, 15 Jan 2024 11:04:29 -0800 Subject: [PATCH] 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. --- 1994/weisberg/README.md | 13 ++++++++-- 1994/weisberg/primes.sh | 40 +++++++++++++++++++++++++++++++ 1994/weisberg/try.sh | 53 +++++++++++++++++++++++++++++++++++++++++ thanks-for-help.md | 7 ++++++ 4 files changed, 111 insertions(+), 2 deletions(-) create mode 100755 1994/weisberg/primes.sh create mode 100755 1994/weisberg/try.sh diff --git a/1994/weisberg/README.md b/1994/weisberg/README.md index dd038ea76..3d98f7abc 100644 --- a/1994/weisberg/README.md +++ b/1994/weisberg/README.md @@ -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: diff --git a/1994/weisberg/primes.sh b/1994/weisberg/primes.sh new file mode 100755 index 000000000..c9b490fe0 --- /dev/null +++ b/1994/weisberg/primes.sh @@ -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 diff --git a/1994/weisberg/try.sh b/1994/weisberg/try.sh new file mode 100755 index 000000000..b12a3d2e0 --- /dev/null +++ b/1994/weisberg/try.sh @@ -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 diff --git a/thanks-for-help.md b/thanks-for-help.md index cf32259c5..827418c81 100644 --- a/thanks-for-help.md +++ b/thanks-for-help.md @@ -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. + ## [1994/westley](/1994/westley/westley.c) ([README.md](/1994/westley/README.md]))