From 8d020bac962093eaadb9386fe2668b77368b1720 Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Wed, 6 Dec 2023 08:55:43 -0800 Subject: [PATCH 1/2] Add 2015/yang/try.sh + formatting/typo checks --- 2015/yang/README.md | 29 ++++------------ 2015/yang/try.sh | 85 +++++++++++++++++++++++++++++++++++++++++++++ thanks-for-fixes.md | 2 ++ 3 files changed, 93 insertions(+), 23 deletions(-) create mode 100755 2015/yang/try.sh diff --git a/2015/yang/README.md b/2015/yang/README.md index fdae97a93..f91ff51b3 100644 --- a/2015/yang/README.md +++ b/2015/yang/README.md @@ -8,35 +8,16 @@ make ## To use: ```sh -echo Some text | ./prog\ +echo Some text | ./prog ``` ### Try: ```sh -echo IOCCC 2015 | ./prog | tee output.c -make output -./output - -echo IOCCC 2015 | ./prog_c11 | tee output.c -make output -./output - -echo IOCCC 2015 | ./prog_c++98 | tee output.c -make output -./output +./try.sh ``` -### Also try: - -```sh -./prog - -``` - -Keep pressing enter to see more output. Send EOF to terminate. - ## Judges' remarks: @@ -54,7 +35,7 @@ so you need not worry about this. ## Author's remarks: `Fuuko` is a [sea star](https://en.wikipedia.org/wiki/Starfish) generator. Feed -her some input through `stdin` to get lots of sea star patterns in `stdout`. +her some input through `stdin` to get lots of sea star patterns on `stdout`. ```sh cc -O3 -std=c90 fuuko.c -lm -o fuuko_c90 @@ -70,7 +51,7 @@ echo IOCCC | ./fuuko_c99 > output_c99.c ``` Don't like [sea stars](https://en.wikipedia.org/wiki/Starfish)? Use a C++98 -compiler to get [dango](https://en.wikipedia.org/wiki/Dango) instead. +compiler to get a [dango](https://en.wikipedia.org/wiki/Dango) instead. ```sh g++ -O3 -std=c++98 fuuko.c -lm -o fuuko_cpp98 @@ -102,6 +83,7 @@ filled with pointer dereferences (C stars). Next time people ask you for a few pointers on C, you can run their question through `Fuuko` and give them pointers all day long. + ### Compatibility `Fuuko` has been tested under these environments: @@ -117,6 +99,7 @@ question through `Fuuko` and give them pointers all day long. - clang 3.4.1 on Linux - tcc 0.9.25 on JS/Linux (C99 only) + ### Features The most obscure parts are in detecting the subtle differences in diff --git a/2015/yang/try.sh b/2015/yang/try.sh new file mode 100755 index 000000000..966f95c06 --- /dev/null +++ b/2015/yang/try.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +# +# try.sh - demonstrate IOCCC winner 2015/yang +# + +# 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" everything >/dev/null || exit 1 + +# clear screen after compilation so that only the entry is shown +clear + + +echo "$ echo IOCCC 2015 | ./prog | tee output.c | less" 1>&2 +read -r -n 1 -p "Press any key to continue (space = next page, q = quit): " +echo 1>&2 +echo IOCCC 2015 | ./prog | tee output.c | less -EXF +echo "$ make CC=\"${CC}\" output" 1>&2 +make CC="${CC}" output 2>/dev/null +read -r -n 1 -p "Press any key to run: ./output: " +echo 1>&2 +./output + +echo 1>&2 +echo "$ echo IOCCC 2015 | ./prog_c90 | tee output.c | less" 1>&2 +read -r -n 1 -p "Press any key to show sea star (space = next page, q = quit): " +echo 1>&2 +echo IOCCC 2015 | ./prog_c90 | tee output.c | less -EXF +echo "$ make CC=\"${CC}\" output" 1>&2 +make CC="${CC}" output 2>/dev/null +read -r -n 1 -p "Press any key to run: ./output: " +echo 1>&2 +./output + +echo 1>&2 +echo "$ echo IOCCC 2015 | ./prog_c99 | tee output.c | less" 1>&2 +read -r -n 1 -p "Press any key to show sea star with eyes (space = next page, q = quit): " +echo 1>&2 +echo IOCCC 2015 | ./prog_c99 | tee output.c | less -EXF +echo "Did you notice the 'rabbit' in there?" 1>&2 +read -r -n 1 -p "Press any key to continue: " +echo 1>&2 +echo "$ make CC=\"${CC}\" output" 1>&2 +make CC="${CC}" output 2>/dev/null +read -r -n 1 -p "Press any key to run: ./output: " +echo 1>&2 +./output + +echo "$ echo IOCCC 2015 | ./prog_cpp98 | tee output.c | less" 1>&2 +read -r -n 1 -p "Press any key to show dango (space = next page, q = quit): " +echo IOCCC 2015 | ./prog_cpp98 | tee output.c | less -EXF +echo "$ make CC=\"${CC}\" output" 1>&2 +make CC="${CC}" output 2>/dev/null +read -r -n 1 -p "Press any key to run: ./output: " +echo 1>&2 +./output + +echo "$ echo IOCCC 2015 | ./prog_cpp11 | tee output.c | less" 1>&2 +read -r -n 1 -p "Press any key to show circles/Swiss cheese (space = next page, q = quit): " +echo IOCCC 2015 | ./prog_cpp11 | tee output.c | less -EXF +echo "$ make CC=\"${CC}\" output" 1>&2 +make CC="${CC}" output 2>/dev/null +read -r -n 1 -p "Press any key to run: ./output: " +echo 1>&2 +./output + +echo 1>&2 +echo "$ echo IOCCC 2015 | ./prog_c11 | tee output.c | less" 1>&2 +read -r -n 1 -p "Press any key to show no extra pattern (space = next page, q = quit): " +echo 1>&2 +echo IOCCC 2015 | ./prog_c11 | tee output.c | less -EXF +echo "$ make CC=\"${CC}\" output" 1>&2 +make CC="${CC}" output 2>/dev/null +read -r -n 1 -p "Press any key to run: ./output: " +echo 1>&2 +./output + +read -r -n 1 -p "Press enter key repeatedly to get more output (send EOF to quit): " +./prog +exit 0 diff --git a/thanks-for-fixes.md b/thanks-for-fixes.md index c21981d26..29d0b303d 100644 --- a/thanks-for-fixes.md +++ b/thanks-for-fixes.md @@ -3811,6 +3811,8 @@ files from compiling properly, trying instead to compile already compiled code. He also added explicit linking of libm (`-lm`) for systems that do not do this (Linux seems to not but macOS does). +He also added the [try.sh](2015/yang/try.sh) script. + # 2018 From af310e0b3a4aeb86cd26d75e32befe65a997df17 Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Wed, 6 Dec 2023 10:10:31 -0800 Subject: [PATCH 2/2] Add 2015/muth/try.sh + format/typo checks --- 2015/muth/README.md | 53 ++++++++++++++++++++++++++------------------- 2015/muth/try.sh | 46 +++++++++++++++++++++++++++++++++++++++ thanks-for-fixes.md | 5 +++++ 3 files changed, 82 insertions(+), 22 deletions(-) create mode 100755 2015/muth/try.sh diff --git a/2015/muth/README.md b/2015/muth/README.md index 336f7f649..dce9bcf41 100644 --- a/2015/muth/README.md +++ b/2015/muth/README.md @@ -15,13 +15,7 @@ make -B [MACHINE=your_machine.h] [TAPE=your_tape.h] [X=[0|1|2|3|4|5|6|7|8|9]] [V ### Try: ```sh -make -B V=2 run - -strings prog | grep '(,)' - -make -B MACHINE=machine_times2.h TAPE=tape_five.h V=1 run - -make -B MACHINE=machine_chaos_5_2.h X=5 run +./try.sh ``` @@ -51,21 +45,28 @@ even without conditionals and recursive file inclusion as some kind of a - make target `run` runs `./prog` and filters a little statistics out of the verbose output - `X` (defaults to 3) sets the maximum number of steps: *M*(`X`) ~ 8`X` + ### Limitations -If the machine does not halt after *M*(`X`) steps, you will see unexpanded macros in the output. +If the machine does not halt after *M*(`X`) steps, you will see unexpanded +macros in the output. + ### Compiler warnings -If `V=1` or `V=2` is used, you may see "`warning: string length is greater than the length '4095' ISO C99 compilers are required to support`". +If `V=1` or `V=2` is used, you may see "`warning: string length is greater than +the length '4095' ISO C99 compilers are required to support`". + ### Programming -Implementing your own Turing machine is easy. Take a look at the supplied header files for examples. +Implementing your own Turing machine is easy. Take a look at the supplied header +files for examples. + #### Tape Symbols -Every symbol used (except "`_`") must be explicitly declared using +Every symbol used (except `_`) must be explicitly declared using ```c #define sym_SYMBOL(sym, _SYMBOL) sym @@ -77,9 +78,11 @@ Example: #define sym_1(sym, _1) sym ``` + #### Tape -The initial content of the tape must be defined in the tape header using a triple like: +The initial content of the tape must be defined in the tape header using a +triple like: ```c #define tape ((((,),...l2), l1), c, (r1, (r2..., (,)))) @@ -89,26 +92,32 @@ The initial content of the tape must be defined in the tape header using a tripl - `c` is the symbol at the current position - `r1`, `r2`, ... are the symbols to the right -The empty pairs "`(,)`" represent the continuations of the tape, filled with underscore symbols ("`_`"). They are expanded on demand. +The empty pairs `(,)` represent the continuations of the tape, filled with +underscore symbols (`_`). They are expanded on demand. + #### State Machine All transitions are defined in the machine header using the syntax - #define CURRENT_SCANNED (WRITE, MOVEMENT, NEXT) +``` +#define CURRENT_SCANNED (WRITE, MOVEMENT, NEXT) +``` where -- `CURRENT` is the current state -- `SCANNED` is the symbol at the current position -- the whitespace before the parentheses is significant -- `WRITE` is the symbol to be written to the tape -- `MOVEMENT` is "`L`" for left, "`R`" for right, or nothing -- `NEXT` is the next state +- `CURRENT` is the current state. +- `SCANNED` is the symbol at the current position. +- The whitespace before the parentheses is significant. +- `WRITE` is the symbol to be written to the tape. +- `MOVEMENT` is `L` for left, `R` for right; don't specify anything if you +want no movement. +- `NEXT` is the next state. -There must be a state "`A`" defined, which becomes the initial state of the machine. +There must be a state `A` defined, which becomes the initial state of the +machine. -To halt the machine, use the keyword "`break`" as in +To halt the machine, use the keyword `break` as in ```c #define A_1 (2, break) diff --git a/2015/muth/try.sh b/2015/muth/try.sh new file mode 100755 index 000000000..022d3d441 --- /dev/null +++ b/2015/muth/try.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +# +# try.sh - demonstrate IOCCC winner 2015/muth +# + +# 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 "$ make -B V=2 run" 1>&2 +read -r -n 1 -p "Press any key to continue (space = next page, q = quit): " +echo 1>&2 +make CC="${CC}" -B V=2 run | less -EXF +echo 1>&2 +echo 1>&2 + +echo "$ strings prog | grep '(,)'" 1>&2 +read -r -n 1 -p "Press any key to continue (space = next page, q = quit): " +echo 1>&2 +strings prog | grep '(,)' | less -EXF +echo 1>&2 +echo 1>&2 + +for h in machine*.h; do + for t in tape*.h; do + echo "$ make CC=\"\${CC}\" -B MACHINE=$h TAPE=$t V=1 run" 1>&2 + read -r -n 1 -p "Press any key to continue (q to exit): " + if [[ "$REPLY" == "q" || "$REPLY" == "Q" ]]; then + exit 0 + fi + echo 1>&2 + make -B MACHINE="$h" TAPE="$t" V=1 run + echo 1>&2 + echo 1>&2 + done +done + diff --git a/thanks-for-fixes.md b/thanks-for-fixes.md index 29d0b303d..bcc597b33 100644 --- a/thanks-for-fixes.md +++ b/thanks-for-fixes.md @@ -3803,6 +3803,11 @@ simply typing `make back_to` or `make mullender`. (Linux doesn't seem to but macOS does). +## [2015/muth](2015/muth/prog.c) ([README.md](2015/muth/README.md)) + +[Cody](#cody) added the [try.sh](2015/muth/try.sh) script. + + ## [2015/yang](2015/yang/prog.c) ([README.md](2015/yang/README.md])) [Cody](#cody) fixed an unfortunate typo in the Makefile that was preventing some of the