From 2bdf97ec41aea3687f708657d36f06a951ccbb0c Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Fri, 12 Jan 2024 09:51:14 -0800 Subject: [PATCH] Add 1990/theorem/try.sh This script shows not just theorem but the sorter and the Fibonacci generator as well. For the sorter it reverses output of ls (redirected to a file) and then shows how using sorter on it results in the same output of ls (with no options specified). Of course if different ls sorts output differently this could fail but I did not think of that until after I wrote it. --- 1990/theorem/Makefile | 2 +- 1990/theorem/README.md | 17 ++++------ 1990/theorem/try.sh | 76 ++++++++++++++++++++++++++++++++++++++++++ thanks-for-help.md | 3 ++ 4 files changed, 86 insertions(+), 12 deletions(-) create mode 100755 1990/theorem/try.sh diff --git a/1990/theorem/Makefile b/1990/theorem/Makefile index cb3aec200..9f9b30157 100644 --- a/1990/theorem/Makefile +++ b/1990/theorem/Makefile @@ -42,7 +42,7 @@ CSILENCE= -Wno-deprecated-declarations -Wno-empty-body -Wno-error -Wno-unused-va -Wno-implicit-function-declaration -Wno-incompatible-pointer-types \ -Wno-macro-redefined -Wno-parentheses -Wno-return-type -Wno-unused-parameter \ -Wno-empty-translation-unit -Wno-deprecated-non-prototype -Wno-int-conversion \ - -Wno-strict-prototypes + -Wno-strict-prototypes -Wno-implicit-int # Common C compiler warning flags # diff --git a/1990/theorem/README.md b/1990/theorem/README.md index 6969d78a5..351a1adc9 100644 --- a/1990/theorem/README.md +++ b/1990/theorem/README.md @@ -36,20 +36,10 @@ y1 - initial value (y(x1) == y1) ### Try: ```sh -./theorem y 0 1 0.1 1 +./try.sh ``` -If the two args passed to `fibonacci` and `theorem_bkp` add to 0 it will -print 0 over and over again in an infinite loop. In this case it should not be -fixed (another condition where this occurred was fixed in 2023 as it affected -usability of the program). -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. -``` ## Judges' remarks: @@ -113,6 +103,11 @@ make fibonacci ./fibonacci 2 1 ``` +NOTE: if the two args passed to `fibonacci` and `theorem_bkp` add to 0 it will +print 0 over and over again in an infinite loop. In this case it should not be +fixed (another condition where this occurred was fixed in 2023 as it affected +usability of the program). + Program available on 9 track and cartridge cassette. Neither [Ginsu knife](https://ginsu.com) nor [Swiss army knife](https://en.wikipedia.org/wiki/Swiss_Army_knife) included! :-) diff --git a/1990/theorem/try.sh b/1990/theorem/try.sh new file mode 100755 index 000000000..4a38fca89 --- /dev/null +++ b/1990/theorem/try.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash +# +# try.sh - demonstrate IOCCC winner 1990/theorem +# + +# 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 to run: ./theorem y 0 1 0.1 1: " +echo 1>&2 +./theorem y 0 1 0.1 1 +echo 1>&2 + +read -r -n 1 -p "Press any key to run: ./theorem x 1 2 0.1 2: " +echo 1>&2 +./theorem x 1 2 0.1 2 +echo 1>&2 + +echo "$ ./theorem -r 0 0 0 0 < theorem.c > sorter.c" 1>&2 +./theorem -r 0 0 0 0 < theorem.c > sorter.c +echo "$ make sorter" 1>&2 +make sorter +echo 1>&2 + +read -r -n 1 -p "Press any key to run: ls | ./sorter > ls.sorted.txt: " +echo 1>&2 +# SC2012 (info): Use find instead of ls to better handle non-alphanumeric filenames. +# shellcheck disable=SC2012 +ls | ./sorter > ls.sorted.txt + +read -r -n 1 -p "Press any key to run: ls -r > ls.txt: " +echo 1>&2 +ls -r > ls.txt +echo 1>&2 + +read -r -n 1 -p "Press any key to run: ./sorter < ls.txt: " +echo 1>&2 +./sorter < ls.txt +echo 1>&2 + +read -r -n 1 -p "./sorter < ls.txt > ls.sorted.2.txt: " +echo 1>&2 +./sorter < ls.txt > ls.sorted.2.txt +echo 1>&2 + +read -r -n 1 -p "Press any key to show diff between ls.sorted.2.txt and ls.sorted.txt: " +echo 1>&2 +diff -s ls.sorted.2.txt ls.sorted.txt +echo 1>&2 + +read -r -n 1 -p "Press any key to run: ./sorter 0 0 0 0 < theorem.c > fibonacci.c: " +./sorter 0 0 0 0 < theorem.c > fibonacci.c +echo "$ make fibonacci" 1>&2 +make fibonacci + +read -r -n 1 -p "Press any key to run: ./fibonacci 1 7: " +echo 1>&2 +./fibonacci 1 7 +echo 1>&2 + +read -r -n 1 -p "Press any key to run: ./fibonacci 2 5: " +echo 1>&2 +./fibonacci 2 5 +echo 1>&2 diff --git a/thanks-for-help.md b/thanks-for-help.md index 78de83f87..7507f6b7b 100644 --- a/thanks-for-help.md +++ b/thanks-for-help.md @@ -1111,6 +1111,9 @@ with clang in Linux but which was defaulting to an error. This way was the simplest way to deal with the problem in question due to the way the entry works. +Cody also added the [try.sh](/1990/theorem/try.sh) script which shows the +original program and some of the programs it generates. + [Yusuke](#yusuke) pointed out that `atof` nowadays needs `#include ` which was used in order to get this to work initially (prior to this output was there but incomplete).