diff --git a/1984/mullender/README.md b/1984/mullender/README.md index 4bcd2c477..fbbe982c4 100644 --- a/1984/mullender/README.md +++ b/1984/mullender/README.md @@ -58,7 +58,7 @@ overflow! BTW: is there such a thing as too fast a CPU ? :-) Actually yes for certain code which is probably not as uncommon as you think :-). -#### Try: +### Alternate try: ```sh @@ -137,7 +137,7 @@ make gentab ./gentab file ``` -#### Try: +### Alternate try: ```sh ./gentab gentab diff --git a/1985/lycklama/README.md b/1985/lycklama/README.md index eeb96f532..8ec3c2955 100644 --- a/1985/lycklama/README.md +++ b/1985/lycklama/README.md @@ -76,7 +76,7 @@ make all ./lycklama < some_file ``` -#### Try: +### Alternate try: ```sh ./lycklama < lycklama.c diff --git a/1985/sicherman/README.md b/1985/sicherman/README.md index 0cea686d6..63ff49234 100644 --- a/1985/sicherman/README.md +++ b/1985/sicherman/README.md @@ -45,7 +45,7 @@ make alt ./sicherman.alt < file ``` -#### Try: +### Alternate try: ```sh diff --git a/1988/litmaath/README.md b/1988/litmaath/README.md index c0513887f..934e66e29 100644 --- a/1988/litmaath/README.md +++ b/1988/litmaath/README.md @@ -40,7 +40,7 @@ make alt Use `litmaath.alt` as you would `litmaath` above. -#### Try: +### Alternate try: ```sh ./litmaath.alt six was afraid of seven because seven eight nine diff --git a/1989/ovdluhe/Makefile b/1989/ovdluhe/Makefile index 30326a98e..1534720b8 100644 --- a/1989/ovdluhe/Makefile +++ b/1989/ovdluhe/Makefile @@ -41,7 +41,7 @@ include ../../var.mk CSILENCE= -Wno-char-subscripts -Wno-constant-conversion -Wno-empty-body \ -Wno-implicit-function-declaration -Wno-parentheses -Wno-unsequenced \ -Wno-unused-variable -Wno-strict-prototypes \ - -Wno-extra-semi -Wno-non-literal-null-conversion + -Wno-extra-semi -Wno-non-literal-null-conversion -Wno-implicit-int # Common C compiler warning flags # diff --git a/1989/ovdluhe/README.md b/1989/ovdluhe/README.md index db6a83b04..d4bca6376 100644 --- a/1989/ovdluhe/README.md +++ b/1989/ovdluhe/README.md @@ -38,13 +38,25 @@ by chance or is killed. ## Alternate code: The author suggested that one varies the definition of `P` from 2 through 10. As -it's a `#define` it's easy to set up. To use try: +it's a `#define` it's easy to set up. + + +### Alternate build: + ```sh make CFLAGS="-DP=9" clobber alt ``` -Use `ovdluhe.alt` as you would `ovdluhe`. +You do not have to define `P` but if you do you can replace the value with +whatever you wish, as long as it's an int. + + +### Alternate use: + +```sh +./ovdluhe.alt +``` ## Judges' remarks: diff --git a/1989/tromp/README.md b/1989/tromp/README.md index 1baa1d9f3..b750569dd 100644 --- a/1989/tromp/README.md +++ b/1989/tromp/README.md @@ -16,6 +16,7 @@ make all ``` ## Try: + ```sh ./tromp 5 @@ -53,18 +54,21 @@ loser](https://web.archive.org/web/20181023221954/https://www.chicagotribune.com The author provided an alternate version of the code with some improvements. See the judges' additional remarks in the author's remarks, for more details. -### Alternate use: +### Alternate build: ```sh make alt ``` +### Alternate use: + Use `tromp.alt` as you would `tromp` above. NOTE: testing more than one user updating the high score file, one of the benefits of the alt version, has not been done. -The original unmodified alternate code is provided later. +The original unmodified alternate code, which will no longer work right if it +even compiles, is provided later in the author's remarks. ## Judges' remarks: diff --git a/1989/westley/.gitignore b/1989/westley/.gitignore index 25ce9886f..7a551420e 100644 --- a/1989/westley/.gitignore +++ b/1989/westley/.gitignore @@ -1,11 +1,20 @@ +alt.ver0 +alt.ver0.c ver0 ver0.c +alt.ver1 +alt.ver1.c ver1 ver1.c +alt.ver2 +alt.ver2.c ver2 ver2.c +alt.ver3 +alt.ver3.c ver3 ver3.c westley +westley.alt westley.orig prog.orig diff --git a/1989/westley/Makefile b/1989/westley/Makefile index fe541f499..6ccfe5be7 100644 --- a/1989/westley/Makefile +++ b/1989/westley/Makefile @@ -140,6 +140,9 @@ ${PROG}: ${PROG}.c alt: data ${ALT_TARGET} @${TRUE} +${ALT_TARGET}: ${PROG}.alt.c + ${CC} ${CFLAGS} -Dznva=main $< -o $@ ${LDFLAGS} + ver0: ${PROG} -./${PROG} < westley.c > ver0.c -${CC} ${CFLAGS} ver0.c -o $@ ${LDFLAGS} @@ -159,6 +162,25 @@ ver3: ${PROG} @echo "** NOTE: this version will not compile with clang **" -${CC} ${CFLAGS} ver3.c -o $@ ${LDFLAGS} +alt.ver0: ${PROG}.alt + -./${PROG}.alt < westley.alt.c > alt.ver0.c + -${CC} ${CFLAGS} -Dznva=main alt.ver0.c -o $@ ${LDFLAGS} + +alt.ver1: ${PROG}.alt + -./${PROG}.alt 1 < westley.alt.c > alt.ver1.c + -${CC} ${CFLAGS} -Dznva=main alt.ver1.c -o $@ ${LDFLAGS} + +alt.ver2: ${PROG}.alt + -./${PROG}.alt 1 2 < westley.alt.c > alt.ver2.c + @echo "** NOTE: this alt version will not currently compile **" + -${CC} ${CFLAGS} -Dznva=main alt.ver2.c -o $@ ${LDFLAGS} + +alt.ver3: ${PROG}.alt + -./${PROG}.alt 1 2 3 < westley.alt.c > alt.ver3.c + @echo "** NOTE: this alt version will not currently compile **" + -${CC} ${CFLAGS} -Dznva=main alt.ver3.c -o $@ ${LDFLAGS} + + # data files # data: ${DATA} diff --git a/1989/westley/README.md b/1989/westley/README.md index 444c18cbe..e6ef8cfa3 100644 --- a/1989/westley/README.md +++ b/1989/westley/README.md @@ -30,17 +30,6 @@ Try compiling and running the 4 resulting programs like: ./compile.sh ``` -This will remove the programs and then run: - -``` -./westley < westley.c > ver0.c -./westley 1 < westley.c > ver1.c -./westley 1 2 < westley.c > ver2.c -./westley 1 2 3 < westley.c > ver3.c -``` - -followed by compiling each version. - If you need to specify an alternate compiler path, say because your default compiler is clang (or in the case of macOS gcc is clang) you can do so like: @@ -60,39 +49,35 @@ Finally try: ./westley # input some lines of text, sending EOF (usually ctrl-d) to end -echo IOCCC | ./westley -echo IOCCC | ./westley 1 -echo IOCCC | ./westley 1 2 -echo IOCCC | ./westley 1 2 3 - -echo IOCCC | ./ver0 -echo Version 1 | ./ver1 -echo Version 2 | ./ver2 -echo Version 3 | ./ver3 +./try.sh # demo of some input ``` ## Alternate code: The alternate code allows SOME of the features to work with clang but some of -the code it generates (see [compile.sh](compile.sh), which does not use this -version) is not compilable even in gcc let alone clang. Nevertheless the main -feature should work for clang. +the code it generates (see [compile.alt.sh](compile.alt.sh) is not compilable +even in gcc let alone clang. Nevertheless the main feature should work and the +same goes for the `alt.ver0` and `alt.ver1`; currently `alt.ver2` and `alt.ver3` +will not compile even with gcc but it is nonetheless generated for when it is +(hopefully) fixed. -### To build: +### Alternate build: ```sh make alt ``` -### Try: +### Alternate try: ```sh -echo IOCCC | ./westley.alt -echo IOCCC | ./westley.alt 1 -echo IOCCC | ./westley.alt 1 2 -echo IOCCC | ./westley.alt 1 2 3 -``` +./westley.alt +# input some text +# generate alt code versions: +./compile.alt.sh + +./try.alt.sh # demo of some input +``` ## Judges' remarks: diff --git a/1989/westley/compile.alt.sh b/1989/westley/compile.alt.sh new file mode 100755 index 000000000..35a6b4f4c --- /dev/null +++ b/1989/westley/compile.alt.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +# +# compile.sh - compile westley.alt.c, generate the alt versions and then attempt to +# compile them. +# +# To change what compiler is used you can do something like: +# +# CC=/path/to/cc ./compile.sh +# +# The following example was run on a MacBook Pro with the M1 Max which which +# could not normally compile everything because macOS's compiler, even when run +# as gcc, is actually clang: +# +# CC=/opt/local/bin/gcc-mp-12 ./compile.sh +# +# We sleep (by default) for approximately 1 second after each command so that +# the you can read what is being done. If this is too fast you can change it in +# a similar way to the above but using the variable DELAY like so: +# +# DELAY=2 ./compile.sh +# +# You can of course use both variables in the same command line like: +# +# CC=/opt/local/bin/gcc-mp-12 DELAY=2 ./compile.sh +# DELAY=2 CC=/opt/local/bin/gcc-mp-12 ./compile.sh +# +# ...and so on. + +# get the compiler using default cc if not specified in the command line +# +# we cannot use the form '${CC:=cc}' because at least in some versions of bash +# it tries to invoke the command which would be an error by itself. Thus we just +# check if it's empty before we set it. +if [[ -z "$CC" ]]; then + CC="cc" +fi + +# get sleep duration +# we cannot use the form '${DELAY:=5}' because at least in some versions of bash +# it tries to invoke the command and obviously that won't work. Thus we check if +# it's empty before setting the default. +if [[ -z "$DELAY" ]]; then + DELAY=0 +fi + +# make clobber to make the directory clean and then compile westley.alt which we +# need to run everything else. Exit if make westley.alt fails as there would be +# nothing further that could be done in that case: +echo "$ make clobber westley.alt" +sleep "$DELAY" +make CC="$CC" clobber westley.alt || exit 1 +sleep "$DELAY" + +# run commands previously in the try section of the README.md, showing what the +# commands are as we go: + +# now generate and compile the files +# +echo "Generating and compiling alt versions ..." 1>&2 +sleep "$DELAY" +echo "$ make CC=$CC alt.ver0 alt.ver1 alt.ver2 alt.ver3" 1>&2 +make CC="$CC" alt.ver0 alt.ver1 alt.ver2 alt.ver3 diff --git a/1989/westley/compile.sh b/1989/westley/compile.sh index 1366968e9..f02219748 100755 --- a/1989/westley/compile.sh +++ b/1989/westley/compile.sh @@ -13,7 +13,9 @@ # # CC=/opt/local/bin/gcc-mp-12 ./compile.sh # -# If you wish to slow down the script you can use the DELAY variable like: +# We sleep (by default) for approximately 1 second after each command so that +# the you can read what is being done. If this is too fast you can change it in +# a similar way to the above but using the variable DELAY like so: # # DELAY=2 ./compile.sh # @@ -34,7 +36,7 @@ if [[ -z "$CC" ]]; then fi # get sleep duration -# we cannot use the form '${DELAY:=0}' because at least in some versions of bash +# we cannot use the form '${DELAY:=5}' because at least in some versions of bash # it tries to invoke the command and obviously that won't work. Thus we check if # it's empty before setting the default. if [[ -z "$DELAY" ]]; then @@ -68,8 +70,8 @@ sleep "$DELAY" # now compile the files by running make alt # -echo "Compiling alt versions ..." 1>&2 +echo "Compiling generated versions ..." 1>&2 sleep "$DELAY" -echo "$ make CC=$CC alt" 1>&2 +echo "$ make CC=$CC ver0 ver1 ver2 ver3" 1>&2 sleep "$DELAY" -make CC="$CC" alt +make CC="$CC" ver0 ver1 ver2 ver3 diff --git a/1989/westley/try.alt.sh b/1989/westley/try.alt.sh new file mode 100755 index 000000000..7ff1eef7c --- /dev/null +++ b/1989/westley/try.alt.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +make alt || exit 1 + + +echo "$ echo IOCCC | ./westley.alt" +echo IOCCC | ./westley.alt +echo + +echo "$ echo IOCCC | ./westley.alt 1" +echo IOCCC | ./westley.alt 1 +echo + +echo "$ echo IOCCC | ./westley.alt 1 2" +echo IOCCC | ./westley.alt 1 2 +echo + +echo "$ echo IOCCC | ./westley.alt 1 2 3" +echo IOCCC | ./westley.alt 1 2 3 +echo + +echo "$ echo IOCCC | ./alt.ver0" +echo IOCCC | ./alt.ver0 +echo + +echo "$ echo Version 1 | ./alt.ver1" +echo Version 1 | ./alt.ver1 +echo + +echo "$ echo Version 1 | ./alt.ver1 1" +echo Version 1 | ./alt.ver1 1 +echo + +echo "$ echo Version 1 | ./alt.ver1 1 2" +echo Version 1 | ./alt.ver1 1 2 +echo + +echo "$ echo Version 1 | ./alt.ver1 1 2 3" +echo Version 1 | ./alt.ver1 1 2 3 diff --git a/1989/westley/try.sh b/1989/westley/try.sh new file mode 100755 index 000000000..359b47730 --- /dev/null +++ b/1989/westley/try.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash + +make all || exit 1 + +echo "$ echo IOCCC | ./westley" +echo IOCCC | ./westley +echo + +echo "$ echo IOCCC | ./westley 1" +echo IOCCC | ./westley 1 +echo + +echo "$ echo IOCCC | ./westley 1 2" +echo IOCCC | ./westley 1 2 +echo + +echo "$ echo IOCCC | ./westley 1 2 3" +echo IOCCC | ./westley 1 2 3 +echo + +echo "$ echo IOCCC | ./ver0" +echo IOCCC | ./ver0 +echo + +echo "$ echo Version 1 | ./ver1" +echo Version 1 | ./ver1 +echo + +echo "$ echo Version 1 | ./ver1 1" +echo Version 1 | ./ver1 1 +echo + +echo "$ echo Version 1 | ./ver1 1 2" +echo Version 1 | ./ver1 1 2 +echo + +echo "$ echo Version 1 | ./ver1 1 2 3" +echo Version 1 | ./ver1 1 2 3 +echo + +echo "$ echo Version 2 | ./ver2" +echo Version 2 | ./ver2 +echo + +echo "$ echo Version 2 | ./ver2 1" +echo Version 2 | ./ver2 1 +echo + +echo "$ echo Version 2 | ./ver2 1 2" +echo Version 2 | ./ver2 1 2 +echo + +echo "$ echo Version 2 | ./ver2 1 2 3" +echo Version 2 | ./ver2 1 2 3 +echo + +echo "$ echo Version 3 | ./ver3" +echo Version 3 | ./ver3 +echo + +echo "$ echo Version 3 | ./ver3 1" +echo Version 3 | ./ver3 1 +echo + +echo "$ echo Version 3 | ./ver3 1 2" +echo Version 3 | ./ver3 1 2 +echo + +echo "$ echo Version 3 | ./ver3 1 2 3" +echo Version 3 | ./ver3 1 2 3 diff --git a/1989/westley/westley.alt.c b/1989/westley/westley.alt.c index 92cff6cd2..c5002fad7 100644 --- a/1989/westley/westley.alt.c +++ b/1989/westley/westley.alt.c @@ -1,13 +1,12 @@ -/**//*/};)/**/main(/*//**/tang ,gnat/**//*/,ABBA~,0-0(avnz;)0-0,tang,raeN -,ABBA(niam&&)))2-]--tang-[kri - =raeN(&&0<)/*clerk*/,noon,raeN)char -**gnat, **noon, **raeN;{int gn = gnat, ra = raeN, no = noon; (!tang&& -no!=-1&&(gn&2)&&((raeN&&( getchar(no+0)))||(1-ra&&(trgpune(no -)))))||tang&&znva(/*//**/tang ,tang,tang/**|**//*/((||)))0(enupgrt=raeN +/**//*/;)/**/pain(/*//**/tang ,gnat/**//*/,ABBA~,0-0(avnc-0,tang,raeN +,ABBA(niam&&)))2-]--tang-[kri - =raeN(&&0<)/*clerk*/,noon,raeN){(!tang&& +noon!=-1&&(gnat&2)&&((raeN&&( getchar(noon+0)))||(1-raeN&&(trgpune(noon +)))))||tang&&cnva(/*//**/tang ,tang/**|**//*/((||)))0(enupgrt=raeN (&&tang!(||)))0(rahcteg=raeN( &&1==tang((&&1-^)gnat=raeN(;;;)tang,gnat -,ABBA,0(avnz;)gnat:46+]552&)191+gnat([kri?0>]652%)191+gnat([kri=gnat +,ABBA,0(avnc;)gnat:46+]552&)191+gnat([kri?0>]652%)191+gnat([kri=gnat (&&)1-^gnat(&&)1& ABBA(!;)raeN,tang,gnat,ABBA(avnz&&0>ABBA{)raeN -,/**/);}znva(/*//**/tang,gnat,ABBA/**//*/(niam;}1-,78-,611-,321 +,/**/);}cnva(/*//**/tang,gnat,ABBA/**//*/(niam;}1-,78-,611-,321 -,321-,001-,64-,43-,801-,001-,301-,321-,511-,53-,54,44,34,24 ,14,04,93,83,73,63,53,43,33,85,75,65,55,45,35,25,15,05,94,84 ,74,64,0,0,0,0,0,0,/**/){ABBA='N'==65;(ABBA&&(gnat=trgpune @@ -15,11 +14,12 @@ no!=-1&&(gn&2)&&((raeN&&( getchar(no+0)))||(1-ra&&(trgpune(no gnat&&gnat<='z'||'a'<=gnat&&gnat<='m'||'N'<=gnat&&gnat<='Z' ||'A'<=gnat&&gnat<='M'?(((gnat&/*//**/31/**//*/,21,11,01,9,8 ,7,6,5,4,3,2,1,62,52,42,/**/)+12)%26)+(gnat&/*//**/32/**//*/, -22,12,02,91,81,71,61,51,41{=]652[kri};)/*pry*/)+65:gnat);main +22,12,02,91,81,71,61,51,41{=]652[kri};)/*pry*/)+65:gnat);pain (/*//**\**/tang^tang/**//*/,/* */,~/*//*-*/tang,gnat,ABBA- 0/**//*/(niam&&ABBA||))))tang( rahcteg&&1-1=output_file ``` -#### Try: +### Alternate try: ```sh diff --git a/2012/kang/README.md b/2012/kang/README.md index eade9adf1..e4823c0c2 100644 --- a/2012/kang/README.md +++ b/2012/kang/README.md @@ -57,7 +57,7 @@ echo vier | ./kang.alt echo uno | ./kang.alt ``` -#### Try: +### Alternate try: ```sh diff --git a/bugs.md b/bugs.md index f8c059b40..28f2d4577 100644 --- a/bugs.md +++ b/bugs.md @@ -568,14 +568,10 @@ numbers with non-binary digits. ## [1989/westley](1989/westley/westley.c) ([README.md](1989/westley/README.md)) ### STATUS: main() function args not allowed - please help us fix -This entry is a big problem for clang due to the way it is designed. Earlier a -change was made to let it compile with clang but although it appeared to work -with gcc, all generated versions (see the README.md for details), this was -either a mistake or it no longer does. - -Thus the original was copied and this does not work at all in clang. It is very -easy to get the first one or two to work with clang but the others result in -compilation failures even besides clang. +This entry is a big problem for clang due to the way it is designed. An alt +code, added by Cody, was made that lets the program work and some of the +generated files work but as `ver2` and `ver3` cannot be compiled even with gcc +(syntax errors) this is in the alt version. The problems with clang is that it does not allow `int` for any arg in `main()` except the first one, argc, and some versions of clang do not even allow a @@ -585,21 +581,8 @@ Cody noted that trying to fix it in some cases causes a segfault and in other cases it fails to generate some of the files (others are okay) at all (empty files). These changes were never committed. -Cody gives these tips on the problem: `main()`'s second, third and fourth args -(but on fourth arg see above) are supposed to be a `char **`. This didn't use to -be the case and some compilers like gcc don't complain. `clang` however does. -Cody was able to get `main()` to be correct BUT a feature is that it uses ROT13 -to decrypt the function `znva` to be main in _generated files_ (see the -[README.md](1989/westley/README.md) for details). - -Since that function does not have the correct types when converted to main() it -fails to compile. But as he said changing the type causes either a segfault, -files not generated at all or files ended up with syntax errors. `ver1`, `ver2` -and `ver3` are the problematic ones. - The file [westley.alt.c](1989/westley/westley.alt.c) will compile with clang -but although it can perform some of its functions it will generate code that -does not work. +but although it can perform some of its functions. ### STATUS: known bug - please help us fix diff --git a/thanks-for-fixes.md b/thanks-for-fixes.md index b8e228244..ceb3c82b0 100644 --- a/thanks-for-fixes.md +++ b/thanks-for-fixes.md @@ -641,20 +641,29 @@ not his only reason :-) ) ## [1989/westley](1989/westley/westley.c) ([README.md](1989/westley/README.md])) -Cody got some of the versions (the original and `ver0`) to work with some +Cody got some of the versions (the original and `ver0` and `ver1`) to work with some versions of `clang`. Unfortunately there are some defects in `clang` that break -this entry either in full or in part. Also, some of the code generated by it -cannot be compiled by gcc either. Thus these changes are in the alt code. -Nevertheless the main features of the program does work in the alt version, it -just cannot generate every C file correctly. +this entry either in full or in part. In particular the first arg to `main()` +has to be an int and the rest have to be a `char **` but some versions do not +allow four args. So to get past this another function was added, `pain()`, which +takes the place of `main()` and which `main()` calls. -Cody provided the compile.sh script to generate the files and then try and -compile them (which ones succeed depend on whether or not clang is the -compiler). The script allows one to change the path of the compiler if they have -another one. See the README.md for details. +This was added as alt code because some of the code generated cannot be compiled +by gcc either. To make use of this several scripts were added by Cody. -As there are some important notes on this in the README.md file we have left the -details in that file and further details are in the [bugs.md](bugs.md) file. +The [compile.sh](1989/westley/compile.sh) script that removes the generated +code, rebuilds the program and regenerates the other code and then compiles it +will work for compilers like gcc and one can then use the +[try.sh](1989/westley/try.sh) script to see example input and output. + +The [compile.alt.sh](1989/westley/compile.alt.sh) script does the same but for +the alt code, which as noted above, can only compile the first two generated +versions, at least at this time. The [try.alt.sh](1989/westley/try.alt.sh) +script is like the [try.sh](1989/westley/try.sh) script but it uses the alt code +and alt generated versions instead. + +Both scripts allow one to specify the compiler which is probably more useful for +`compile.sh`. ## [1990/baruch](1990/baruch/baruch.c) ([README.md](1990/baruch/README.md]))