From 459fff8859f28e3aa70a1b8ccb61ad13b748b2cf Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Thu, 2 Nov 2023 09:47:47 -0700 Subject: [PATCH 1/3] Improve fixes to 1998/schnitzi The author stated that there was no 'if's and I have made it that way now. The author stated that the number should be > 0 && < 27 so I added the range check (was previously != 0). Too high value could segfault and < 0 was problematic too. 27 itself was code that could not compile. Since the program is so beautiful it had been decided to fix the problems which is why these changes were added too. The above was done like: ((V[1]&&((atoi(V[1])>0&&atoi(V[1])<27)||(exit(1),1)))); The try.sh script has been added to the entry to try out a lot of commands instead of copy pasting it from the judges' remarks. Removed duplicate INABIAF information from README.md (which is why the other updates). Updated bugs.md with more information to the features like how output can end up being gigabytes in length depending on the number specified to the program. Removed from the bugs.md details about warnings to ignore as the compiler -Wno- options take care of that now. Extra parentheses were added to the above to prevent another warning (I was not sure if all compilers and versions had the -Wno- so I decided to fix it in the code itself). The try section has a question to ponder as well. The detail is also in the bugs.md file. --- 1998/schnitzi/Makefile | 2 +- 1998/schnitzi/README.md | 41 ++++++++++++------------ 1998/schnitzi/schnitzi.c | 6 ++-- 1998/schnitzi/try.sh | 67 ++++++++++++++++++++++++++++++++++++++++ bugs.md | 36 ++++++--------------- thanks-for-fixes.md | 16 ++++++++++ 6 files changed, 120 insertions(+), 48 deletions(-) create mode 100755 1998/schnitzi/try.sh diff --git a/1998/schnitzi/Makefile b/1998/schnitzi/Makefile index d1a7def53..5b0c6ea06 100644 --- a/1998/schnitzi/Makefile +++ b/1998/schnitzi/Makefile @@ -40,7 +40,7 @@ include ../../var.mk # CSILENCE= -Wno-error -Wno-implicit-function-declaration -Wno-format-security \ -Wno-int-to-pointer-cast -Wno-int-conversion -Wno-unused-parameter \ - -Wno-incompatible-pointer-types + -Wno-incompatible-pointer-types -Wno-implicit-int -Wno-unused-value # Common C compiler warning flags # diff --git a/1998/schnitzi/README.md b/1998/schnitzi/README.md index ae5f27acb..fc908cf1f 100644 --- a/1998/schnitzi/README.md +++ b/1998/schnitzi/README.md @@ -1,9 +1,6 @@ # Best Flow Control Mark Schnitzius -ISX Corporation -1280 West Peachtree St. Apt. 1507 -Atlanta, GA 30309 US @@ -29,29 +26,35 @@ For more detailed information see [1998 schnitzi in bugs.md](/bugs.md#1998-schni ## To use: ```sh -./schnitzi 5 > sort.c +./schnitzi n > sort.c make sort +./sort +# enter three numbers, space separated + +echo x y z | ./sort ``` +where `n` and `x`, `y` and `z` are numbers. + ## Try: ```sh -./schnitzi 3 > sort.c -make sort -echo 123 > data -echo 234 >> data -echo 413 >> data -echo 134 >> data -echo 324 >> data -./sort < data +./try.sh ``` -### INABIAF - it's not a bug it's a feature :-) +What happens if at the command line you don't specify `n` numbers that the +program expects? For instance try: -NOTE: the larger the number given to the program the longer the output becomes -and quite substantially so. Doing `./schnitzi 9` will actually print 771999 -lines! +```sh +./schnitzi 5 > sort.c +make sort + +# try running the next command four or five times: +echo 2 5 3 1 | ./sort +``` + +Why does this happen? ## Judges' remarks: @@ -81,9 +84,9 @@ the letter 'e'. The IOCCC has been no stranger to this concept. Several winning entries from years past have accomplished interesting feats while completely avoiding the use -of certain C constructs thought to be essential (e.g. 1988's -[robison.c](//1988/robison/robison.c)). If you have to ask why they would do it -this way, then this contest just isn't for you. +of certain C constructs thought to be essential (e.g. +[1988/robison.c](/1988/robison/robison.c)). If you have to ask why they would +do it this way, then this contest just isn't for you. In continuing with this fine tradition, this program suggests to the ANSI committee some new practical simplifications for the C language. For instance, diff --git a/1998/schnitzi/schnitzi.c b/1998/schnitzi/schnitzi.c index 02be0399f..3ecc7bc1f 100644 --- a/1998/schnitzi/schnitzi.c +++ b/1998/schnitzi/schnitzi.c @@ -52,6 +52,8 @@ void x_(){ O=g; *r=y[k-2]; _=r; j=o_; } void d (){ O=g; *r=y[k]; _=r; k=k+1; m=k0&&atoi(V[1])<27)||(exit(1),1)))); q=0; O=r_; _d=V; - x: (O)(); goto x; }}} + x: (O)(); goto x; } + diff --git a/1998/schnitzi/try.sh b/1998/schnitzi/try.sh new file mode 100755 index 000000000..4d42ee199 --- /dev/null +++ b/1998/schnitzi/try.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +make all || exit 1 + +echo "$ ./schnitzi 3 > sort.c" 1>&2 +./schnitzi 3 > sort.c + +echo "Compiling sort.c:" 1>&2 +make sort >/dev/null || exit 1 + +echo "...built sort." 1>&2 + +echo "Creating data:" 1>&2 + +echo "$ echo 234 > data" 1>&2 +echo 234 > data + +echo "$ echo 413 >> data" 1>&2 +echo 413 >> data + +echo "$ echo 123 >> data" 1>&2 +echo 123 >> data + +echo "Sorting data:" 1>&2 +echo "$ ./sort < data" 1>&2 +./sort < data + +echo 1>&2 + +echo "Using stdin/stdout:" 1>&2 +echo "$ echo 10 7 9 | ./sort" 1>&2 +echo "10 7 9" | ./sort + +echo "$ ./schnitzi 5 > sort.c" 1>&2 +./schnitzi 5 > sort.c + +echo "Compiling sort.c:" 1>&2 +make sort >/dev/null || exit 1 + +echo "...built sort." 1>&2 + +echo "Creating data:" 1>&2 + +echo "$ echo 124 > data" 1>&2 +echo 124 > data + +echo "$ echo 422 >> data" 1>&2 +echo 422 >> data + +echo "$ echo 120 >> data" 1>&2 +echo 120 >> data + +echo "$ echo 100 >> data" 1>&2 +echo 100 >> data + +echo "$ echo 777 >> data" 1>&2 +echo 777 >> data + +echo "Sorting data:" 1>&2 +echo "$ ./sort < data" 1>&2 +./sort < data + +echo 1>&2 + +echo "Using stdin/stdout:" 1>&2 +echo "$ echo 5 10 7 9 1 | ./sort" 1>&2 +echo "5 10 7 9 1" | ./sort diff --git a/bugs.md b/bugs.md index c49279d2a..6f93f469e 100644 --- a/bugs.md +++ b/bugs.md @@ -1138,38 +1138,22 @@ See above entry [1998/dlowe](1998/dlowe/dlowe.c). ### Source code: [1998/schnitzi/schnitzi.c](1998/schnitzi/schnitzi.c) ### Information: [1998/schnitzi/README.md](1998/schnitzi/README.md) -[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this to work for -modern systems but he notes a couple compile warnings to ignore. - -First if you get the warning: - - warning: incompatible implicit declaration of built-in function 'printf' [-Wbuiltin-declaration-mismatch] - 11 | void g(){ O=j; printf(_); } - | ^~~~~~ - - -please do NOT change it! Doing so will break the generated output. - -Another warning that was introduced but should be ignored (it's required) is: - - - warning: assignment to 'char *' from incompatible pointer type 'char **' [-Wincompatible-pointer-types] - 55 | main(int v,char **c){ O=r_; _d=c; - | ^ - -Please DO NOT change this either. - -If there are any other warnings triggered by your compiler please DO NOT fix -those either! - -Another important note is that as the number passed into the program gets bigger -the number of lines of output gets substantially larger. For instance: +A point worth considering is that as the number passed into the program gets +bigger the number of lines of output gets substantially larger. For instance: ```sh $ ./schnitzi 9|wc -l 771999 ``` +The larger the number the bigger the file can become too, even becoming +gigabytes in size. The range is checked for `>0 && <27` as not having this can +be a problem including a segfault. + +If you use the generated program and do not give enough numbers in input +something funny will happen, very possibly with different results per run. This +is in the README.md file as something to try and ponder. + # 1999 diff --git a/thanks-for-fixes.md b/thanks-for-fixes.md index 0247cb6dd..684be7eb0 100644 --- a/thanks-for-fixes.md +++ b/thanks-for-fixes.md @@ -1571,6 +1571,22 @@ linux and further changes for macOS. He also fixed a segfault (after printing garbage) when the arg specified evaluated to 0. It was decided that these segfault fixes should be made because the program is so beautiful. +Later on Cody improved the fixes by checking that the arg is a number `>0 && +<27` as that was noted by the author as a requirement and again since it's such +a beautiful program it is worth it, especially as the larger the number the +larger the resulting program becomes. It can be gigabytes in length if it +doesn't crash. At this point since the author stated it has no `while`, +`do...while`, `for`, `if/else`, `switch`, `?:` Cody removed the if statement by +doing: + +```c +((V[1]&&((atoi(V[1])>0&&atoi(V[1])<27)||(exit(1),1)))); +``` + +Cody also added the [try.sh](1998/schnitzi/try.sh) script to help users try the +commands (as well as some added by him) we recommended. + + ## [1998/schweikh1](1998/schweikh1/schweikh1.c) ([README.md](1998/schweikh1/README.md])) Cody fixed this for modern systems (it did not work at all) and added an From c8af4c694057e1b1a481a913295ef3e60f75cfc1 Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Thu, 2 Nov 2023 10:03:03 -0700 Subject: [PATCH 2/3] Fix fix on 1984/anonymous Somehow I ended up having the string on one line when the author had it on two lines which is also something they liked. This update should (unless the format of the alt code section needs to change with discussion) be the final edit of README.md. --- 1984/anonymous/README.md | 17 ++++++++--------- 1984/anonymous/anonymous.c | 4 ++-- thanks-for-fixes.md | 7 ++++++- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/1984/anonymous/README.md b/1984/anonymous/README.md index 74ca6ac1c..08320a3cb 100644 --- a/1984/anonymous/README.md +++ b/1984/anonymous/README.md @@ -19,7 +19,7 @@ make all The original version of this entry was added, by request, in order to show the code that was turned into the [tattoo](https://web.archive.org/web/20070120220721/https://thomasscovell.com/tattoo.php), -as the alternate code. See below in the tattoo side-by-side with the code. +as the alternate code. See below for the tattoo side-by-side with the code. ### Alternate build: @@ -41,8 +41,8 @@ The author was too embarrassed that they could write such trash, so I promised to protect their identity. I will say that the author of this program has a well known connection with the C programming language. -This program is a unique variation on the age old "Hello, world" -program. What reads like a read may be written like a write! +This program is a unique variation on the age old "hello, world!" program. What +reads like a read may be written like a write! In 2005 someone by the name of Thomas Scovell got a tattoo of this entry. See his [web @@ -77,12 +77,11 @@ Landon Curt Noll, the one who told the author about the tattoo, wrote back: ### Regrets: -Landon Curt Noll wrote that the author, if they had to do it over again, regrets not -making the program a one-liner and not moving the `int i` into an arg of main -(so that the line would have started with main). On the other hand the author -likes the "two line look" and the way `hell o` was split. :-) And they like the -fact that it ends in a smily face: `;}` - +Landon Curt Noll wrote that the author regrets not making the program a +one-liner and not moving the `int i` into an arg of main (so that the line would +have started with main). On the other hand the author likes the "two line look" +and the way `hell o` was split. :-) And they like the fact that it ends in a +smily face: `;}`. ## Copyright and CC BY-SA 4.0 License: diff --git a/1984/anonymous/anonymous.c b/1984/anonymous/anonymous.c index 5451c40af..09bfaafcf 100644 --- a/1984/anonymous/anonymous.c +++ b/1984/anonymous/anonymous.c @@ -1,2 +1,2 @@ -int i;main(){for(;i["] Date: Thu, 2 Nov 2023 10:13:40 -0700 Subject: [PATCH 3/3] Minor updates to 1984/mullender Minor corrections in the README.md and bugs.md. The README.md was not checked for other issues at this time. When that happens 1984 should be complete in every way except that 1984/README.md has to be checked again but that will happen after the other entries of all the other years are done. --- 1984/mullender/README.md | 7 ++++--- bugs.md | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/1984/mullender/README.md b/1984/mullender/README.md index 8ea286124..d907a30c2 100644 --- a/1984/mullender/README.md +++ b/1984/mullender/README.md @@ -70,7 +70,8 @@ which is probably not as uncommon as you think :-). # wait for 500 microseconds and see what happens ``` -What happens if you hit enter after it reaches the end of the line? Why? +What happens if you hit enter after it reaches the end of the line? Why? What +happens after some time of waiting? ## Original code: @@ -165,8 +166,8 @@ make gentab ./gentab gentab > g.c ``` -NOTE: it is highly unlikely that you will be able to compile and run the output -of `gentab` but it should at least compile. +NOTE: it is highly unlikely that you will be able to run the output of `gentab` +but it should at least compile. ## Author's remarks: diff --git a/bugs.md b/bugs.md index 6f93f469e..29a9e2d0c 100644 --- a/bugs.md +++ b/bugs.md @@ -469,7 +469,7 @@ Cody added and fixed the [gentab.c](1984/mullender/gentab.c) which is from the author's (or one of them, Mullender) remarks found by Cody. Cody fixed this to compile and work (as best as he can determine: he has no VAX-11 or PDP-11 or emulator to test it) but running the code on the binary itself produces a -`short[]` that can compile in modern systems. +`short[]` that can compile in modern systems though it'll not work. # 1985