diff --git a/1988/litmaath/.gitignore b/1988/litmaath/.gitignore
index 5722bebf5..ef2cc4b0f 100644
--- a/1988/litmaath/.gitignore
+++ b/1988/litmaath/.gitignore
@@ -1 +1,2 @@
litmaath
+litmaath.alt
diff --git a/1988/litmaath/Makefile b/1988/litmaath/Makefile
index 08b070b99..370e7cbc0 100644
--- a/1988/litmaath/Makefile
+++ b/1988/litmaath/Makefile
@@ -111,8 +111,8 @@ OBJ= ${PROG}.o
DATA=
TARGET= ${PROG}
#
-ALT_OBJ=
-ALT_TARGET=
+ALT_OBJ= ${PROG}.alt.o
+ALT_TARGET= ${PROG}.alt
#################
diff --git a/1988/litmaath/README.md b/1988/litmaath/README.md
index e776052d5..0e801e4ca 100644
--- a/1988/litmaath/README.md
+++ b/1988/litmaath/README.md
@@ -1,18 +1,42 @@
# Best small program
Maarten Litmaath
-Free University (VU) Amsterdam
-Department of computer science
-Uilenstede 72
-1183 AK Amstelveen
The Netherlands
+## To build:
+
+```sh
+make
+```
+
+## To run:
+
+```sh
+./litmaath some text
+```
+
+There is an alternate version provided. See the Alternate code section below.
+
## Try:
```sh
./litmaath eschew obfuscation
```
+### Alternate code:
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) added the
+[litmaath.alt.c](litmaath.alt.c) which we described in our remarks below. To
+use:
+
+```sh
+make alt
+```
+
+Use `litmaath.alt` as you would `litmaath` above.
+
+Thank you Cody!
+
## Judges' remarks:
diff --git a/1988/litmaath/litmaath.alt.c b/1988/litmaath/litmaath.alt.c
new file mode 100644
index 000000000..a08e45ea2
--- /dev/null
+++ b/1988/litmaath/litmaath.alt.c
@@ -0,0 +1,16 @@
+#include
+main(argc, argv)
+int argc;
+char **argv;
+{
+ while (*argv != argv[1] && (*argv = argv[1]) && (argc = 0) || (*++argv
+ && (**argv && ((++argc)[*argv] && (**argv <= argc[*argv] ||
+ (**argv += argc[*argv] -= **argv = argc[*argv] - **argv)) &&
+ --argv || putchar(**argv) && ++*argv--) || putchar(10))))
+ fprintf(stderr,
+ "argv=%lo *argv=%lo **argv=%c argv[1]=%lo *argv[1]=%c argc=%d\n",
+ (long) argv, (long) *argv, *argv && **argv ? **argv : '@',
+ (long) argv[1], argv[1] && *argv[1] ? *argv[1] : '@', argc);
+
+ ;
+}
diff --git a/1990/theorem/.gitignore b/1990/theorem/.gitignore
index 12683bf7d..a9223bbb1 100644
--- a/1990/theorem/.gitignore
+++ b/1990/theorem/.gitignore
@@ -1,3 +1,4 @@
+theorem
fibonacci
fibonacci.c
mariano
diff --git a/1990/theorem/README.md b/1990/theorem/README.md
index 4b6d753dc..ca82b074c 100644
--- a/1990/theorem/README.md
+++ b/1990/theorem/README.md
@@ -29,7 +29,7 @@ about `gets()` at linking or runtime. Thank you Cody for your assistance!
[Yusuke Endoh](/winners.html#Yusuke_Endoh) pointed out that `atof` nowadays
needs `#include ` which was used in order to get this to work
-initially. Thank you Yusuke!
+initially (prior to this the output was incomplete). Thank you Yusuke!
## To run:
@@ -54,20 +54,29 @@ y1 - initial value (y(x1) == y1)
./theorem y 0 1 0.1 1
```
-### Known bug with `fibonacci.c` and `theorem_bkp.c`:
+### INABIAF - it's not a bug it's a feature! :-)
-If the two args added up equals 0 the program will enter an infinite loop,
-printing 0 over and over again. Cody fixed another condition where this happens
-but this has not been fixed. See [bugs.md](/bugs.md) for more details.
+If the two args passed to `fibonacci` and `theorem_bkp` equals 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 as it affected usability
+of the program).
+
+BTW: why can't the fix:
+
+```c
+if (a[1]==NULL||a[2]==NULL||a[3]==NULL||a[4]==NULL||a[5]==NULL) return 1;
+```
+
+be changed to just test the value of `A` when `a` is argv and `A` is argc?
## Judges' remarks:
The program's source implements four functions, all from the
same source file!
-When you compile theorem.c as is and run with 5 args, it numerically
-solves the equation `y'=f(x,y)`, with a step size of `h`, over the interval
-`x=[x1,x2]`, with the initial condition of `y(x1)=y1`.
+When you compile theorem.c as is and run with 5 args, it numerically solves the
+equation `y'=f(x,y)`, with a step size of `h` (see above usage), over the
+interval `x=[x1,x2]`, with the initial condition of `y(x1)=y1`.
The 'expression' `f(x,y)` is any function of `x` and `y` with the
operators:
diff --git a/2001/anonymous/README.md b/2001/anonymous/README.md
index 3ef53e46a..fa43c2908 100644
--- a/2001/anonymous/README.md
+++ b/2001/anonymous/README.md
@@ -19,21 +19,21 @@ make
supplementary program and the program itself (both of which segfaulted and once
that was fixed only the binary was modified; it was not run but according to the
author's remarks it should be executed). He managed to do this with linux
-but it will not work with macOS (see [bugs.md](/bugs.md) for why this is); this
-is not a bug but a feature inherent in what it does.
+but it will not work with macOS (see [bugs.md](/bugs.md) for why this is); _this
+is not a bug, it's a feature_ inherent in what it does!
-Although it took a fair bit of debugging it turns out all that had to change
-was:
+The following had to be done in order to get this to work:
- `#include ` for `mmap()` and `munmap()`.
- have `main()` call another function which is no longer a recursive function;
this prevented `main()` from entering an infinite recursive loop.
Without either of these it would crash and prevent modification of the 32-bit
-[ELF](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format) (not elf :-)
-) binary. But again see [bugs.md](/bugs.md) here. The following change was also
-made to be more portable, in case the constants `PROT_READ` and/or `PROT_WRITE`
-are not standardised:
+[ELF](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format) (not elf :-) )
+binary. But again see [bugs.md](/bugs.md) here.
+
+The following change was also made to be more portable, in case the constants
+`PROT_READ` and/or `PROT_WRITE` are not standardised:
Change `3` in the call to `mmap()` to be `PROT_READ|PROT_WRITE`: just in case
`PROT_READ|PROT_WRITE` does not equal 3 (though it seems to be equal in both
@@ -42,12 +42,13 @@ macOS and linux).
There was one other thing that had to be done though. Since the program used to
recursively call (infinite recursion, seemingly) `main()` and since that cannot
be done what had to be done instead is after the new function (`pain()` since it
-was a pain to fix :-) ) returns to first call `munmap()` and `close()` (else
-one would get text file busy error) and then the program can call `execv()` again like the
-function `pain()` (was in `main()`) did but with a slight change. See commit
-`2159caec4677e0f25ad704a74e04c8196fd6c343` for details. Notice that
-the location of the calls to `munmap()` and `close()` followed by `execv()` do
-matter!
+was a pain to fix :-) ) returns to first call `munmap()` and `close()` (else one
+would get text file busy error) and then the program can call `execv()` again
+like the function `pain()` (was in `main()`) did but with a slight change. See
+commit `2159caec4677e0f25ad704a74e04c8196fd6c343` for more details.
+
+Notice that the location of the calls to `munmap()` and `close()` followed by
+`execv()` _does matter_!
NOTE: there might be educational value to see the progress of this fix; if you
wish to see, try:
diff --git a/2001/kev/.gitignore b/2001/kev/.gitignore
index 961ec1d0c..1fa9f0a7b 100644
--- a/2001/kev/.gitignore
+++ b/2001/kev/.gitignore
@@ -1 +1,2 @@
kev
+kev.alt
diff --git a/2001/kev/Makefile b/2001/kev/Makefile
index 9ef43bc04..c1d5aac15 100644
--- a/2001/kev/Makefile
+++ b/2001/kev/Makefile
@@ -59,7 +59,7 @@ ARCH=
# Defines that are needed to compile
#
-CDEFINE= -DPORT=5455 -DSPEED=50 -Dl_="socket(il.sin_family=AF_INET,SOCK_STREAM,0)"
+CDEFINE= -DPORT=5455 -DSPEED=100 -Dl_="socket(il.sin_family=AF_INET,SOCK_STREAM,0)"
# Include files that are needed to compile
#
@@ -115,8 +115,8 @@ OBJ= ${PROG}.o
DATA=
TARGET= ${PROG}
#
-ALT_OBJ=
-ALT_TARGET=
+ALT_OBJ= ${PROG}.alt.o
+ALT_TARGET= ${PROG}.alt
#################
@@ -138,6 +138,9 @@ ${PROG}: ${PROG}.c
alt: data ${ALT_TARGET}
@${TRUE}
+${PROG}.alt: ${PROG}.alt.c
+ ${CC} ${CFLAGS} $< -o $@ ${LIBS}
+
# data files
#
data: ${DATA}
diff --git a/2001/kev/README.md b/2001/kev/README.md
index 3e95bab9c..6ebb48f2d 100644
--- a/2001/kev/README.md
+++ b/2001/kev/README.md
@@ -1,11 +1,8 @@
# Best Curses Game
-Kevin Pulo
-School of Information Technologies
-Madsen Building F09
-University of Sydney, NSW, 2006
-Australia
-
+Kevin Pulo
+Australia
+
Mastodon:
## To build:
@@ -17,15 +14,49 @@ make
## To run:
```sh
-./kev hostname
+./kev # in one terminal
+
+./kev hostname # in another terminal
```
+NOTE: each player's paddle is at the bottom and the opponent at the top.
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) slowed down the ball
+just a tad as it went too fast for the speed at which the paddles move even when
+holding down the movement keys. If you need to change the speed you can
+reconfigure it like (say for over a network and not the same host):
+
+```sh
+make clobber SPEED=50 all # default value which is very fast
+```
+
+There is an alternate version which lets you use the arrow keys to control your
+paddle. See below Alternate code.
+
## Try:
```sh
+./kev
./kev localhost
```
+### Alternate code:
+
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) provided an alternate
+version which lets you use the arrow keys on your keyboard instead of the more
+awkward ',' and '.'. To use:
+
+```sh
+make alt
+```
+
+Use `kev.alt` as you would `kev`.
+
+What happens if you use both, one in one terminal and the other in another
+terminal?
+
+Thank you Cody!
+
## Judges' remarks:
Continuing with this year's "retro game" theme, this is another old game;
@@ -45,7 +76,7 @@ box.
* TCP sockets
* curses
-* usleep
+* `usleep()`
### DESCRIPTION
@@ -117,18 +148,17 @@ terminal size).
### BUILDING
-Just run `make`to use the Makefile as above. The `SPEED` variable in the Makefile
-controls the speed of the game (defaults to `50`). This speed is
-the delay between frames in milliseconds. Thus a value of 0 will
-make the game go as fast as your network can handle, and values
-less than 50 are useful for larger terminals or more exciting
-games. The program needs bandwidth equal to 1/s bytes per second
-(where `s` is the speed value). Any latency on the network will
-be added to `s` - so you should probably subtract any latency from
-the value of `s` you want to have. Given that `loopback` and fast
-Ethernet LANs are both much less than 1ms of latency, you should
-only need to worry about this if you plan on playing over a slower
-link like a cable modem, DSL, or (God-forbid) dial-up.
+Just run `make`to use the Makefile as above. The `SPEED` variable in the
+Makefile controls the speed of the game (defaults to `50`). This speed is the
+delay between frames in milliseconds. Thus a value of 0 will make the game go
+as fast as your network can handle, and values less than 50 are useful for
+larger terminals or more exciting games. The program needs bandwidth equal to
+1/s bytes per second (where `s` is the speed value). Any latency on the network
+will be added to `s` - so you should probably subtract any latency from the
+value of `s` you want to have. Given that `loopback` and fast Ethernet LANs are
+both much less than 1ms of latency, you should only need to worry about this if
+you plan on playing over a slower link like a cable modem, DSL, or (God-forbid)
+dial-up.
The TCP port to use for network communications is specified by the
`PORT` variable in the Makefile. If the default of `5455` is
diff --git a/2001/kev/kev.alt.c b/2001/kev/kev.alt.c
new file mode 100644
index 000000000..fc2ce1300
--- /dev/null
+++ b/2001/kev/kev.alt.c
@@ -0,0 +1,122 @@
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define o0(M,W) mvprintw(W,M?M-1:M,"%s%s ",M?" ":"",_)
+#define O0(M,W) M##M=(M+=W##M)-W##M
+#define l1(M,W) M.tv_##W##sec
+#define L1(m,M,l,L,o,O) for(L=l;L--;)((char*)(m))[o]=((char*)(M))[O]
+#define I1 lL,(struct sockaddr*)&il
+#define i1 COLS
+#define j LINES
+#define L_ ((j%2)?j:j-1)
+
+fd_set I;struct socka\
+ddr_in il;struct host\
+ent*LI; struct timeval
+IL,l;char L[9],_[1<<9]
+ ;void ___(int __
+ ){_[__--]=+0;if(
+ ++__)___(--__);_
+ [__]='=';}double
+ o,oo=+0,Oo=+0.2;
+ long O,OO=0,oO=1
+ ,ii,iI,Ii,Ll,lL,
+ II=sizeof(il),Il
+ ,ll,LL=0,i=0,li,
+ lI;int main(int\
+ iL,char *Li[]){\
+ initscr();keypad
+ (stdscr,1);cbreak
+ ();noecho();nonl
+ ();___(lI=i1/4);
+ _[0]='[';_[lI-1]
+ =']';L1(&il,&_,\
+ II,O,+O,+lI);il.
+ sin_port=htons((
+ unsigned long)(\
+ PORT&0xffff));lL
+ =l_;if(iL=!--iL)
+ {il. sin_addr .\
+ s_addr=0;bind(I1
+ ,II);listen(lL,5
+ );lL=accept(I1,&
+ II);}else{oO-=2;
+ LI=gethostbyname
+ (Li[1]);L1(&(il.
+ sin_addr),(*LI).
+ h_addr_list[0],\
+ LI->h_length,iI,
+ iI,iI);(*(&il)).
+ sin_family=(&(*\
+ LI))->h_addrtype
+ ;connect(I1,II);
+ }ii=Ii=(o=i1*0.5
+ )-lI/2;iI=L_-1;O
+ =li=L_*0.5;while
+ (_){mvaddch(+OO,
+ oo,' ');o0(ii,iI
+ );o0(Ii,Il-=Il);
+ mvprintw(li-1,Il
+ ,"%d\n\n%d",i,LL
+ );mvhline(li,+0,
+ '-',i1);mvaddch(
+ O,o,'*');move(li
+ ,Il);refresh();\
+ timeout(+SPEED);
+ gettimeofday(&IL
+ ,+0);Ll=getch();
+ timeout(0);while
+ (getch()!=ERR);\
+ if(Ll=='q'&&iL)\
+ write(lL,_+1,1);
+ if(ii>(ll=0)&&Ll
+ ==KEY_LEFT){write(lL,
+ _,-(--Il));}else
+ if(Ll==KEY_RIGHT&&ii+\
+ lIi1){o=i1+i1-o
+ ;Oo*=-1;}if(o>=(
+ Ii+=ll)&&O<1&&oO
+ <0&&o=
+ (ii+=Il)&&O>iI-1
+&&oO>0&&o+iI){O-=O;i++;
+}}endwin();return(0);}
+
diff --git a/2005/giljade/Makefile b/2005/giljade/Makefile
index 7557b2753..1dc57c255 100644
--- a/2005/giljade/Makefile
+++ b/2005/giljade/Makefile
@@ -134,6 +134,8 @@ all: data ${TARGET}
supernova deep_magic magic charon pluto
${PROG}: ${PROG}.c
+ @echo "NOTE: this version cannot successfully run the self-test. Use make alt"
+ @echo "for a version which will work. See README.md for why it is this way."
${CC} ${CFLAGS} $< -o $@ ${LIBS}
# alternative executable
diff --git a/2005/giljade/README.md b/2005/giljade/README.md
index c3dbe39fc..18a3dcc6d 100644
--- a/2005/giljade/README.md
+++ b/2005/giljade/README.md
@@ -10,33 +10,52 @@ Israel
make
```
+NOTE: if you do not have access to a compiler that lets you have alternative arg
+types to `main()` the self-test feature will fail. If your compiler does not
+have this defect you can use the Alternate code described below. The reason to
+have it as the alternate version is that there is more to the entry that can
+still be enjoyed with compilers with the `main()` args defect including the
+primary purpose of the entry, a puzzle.
+
+Hopefully this will be resolved in time where there is no need for an alternate
+version but it's a complicated one. See also the [bugs.md](/bugs.md) file for
+more information.
+
## To run:
```sh
./giljade
```
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this for modern
-systems. The problem that was showing up is that with either optimising or
-anything but 32-bit was used it would not work. The optimising cannot be used
-still but it now works with both 32-bit and 64-bit. The problem was the size of
-`int` and `long` being different now. Instead of `long *E` it is now `int *E`.
-This solves the problem for both 32-bit and 64-bit as long as optimising is
-disabled. Tested under linux (32-bit, 64-bit) and macOS (arm64). Thank you Cody
-for your assistance!
+After Landon fixed the entry to compile with clang (but see above and below)
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) noticed this does not
+work at all in modern systems. He fixed this to work but he notes that the fix
+to let clang compile it breaks the self-test feature.
-NOTE: the self-test feature no longer works due to the fix for clang (which
-requires the first arg of `main()` to be an `int` and the second arg to be `char
-**`). Believe it having more than two spaces in the code, except where the
-original code has them, appears to be part of the problem but it's not the full
-story. If you have a compiler that doesn't have this deficiency (e.g. gcc) you
-can use the alternate code described below.
+The problem that was showing up is that with either optimising or if anything
+but 32-bit (as in `-m32`) was used it would not work (at least in 64-bit
+systems?). The optimising cannot be used still but it now works with both 32-bit
+and 64-bit. The solution has to do with the size difference between `int` and
+`long` so that the `long*E` is now `int*E`. This solves a specific problem for
+linux (32-bit, 64-bit) and macOS (arm64).
+
+But as noted there is another problem with clang: the self-test feature only
+completely works with the original version ([giljade.alt.c](giljade.alt.c)), not
+the one that will compile with clang ([giljade.c](giljade.c)). The alternate
+version, which will not compile with clang, is the only one that passes the
+self-tests. If your compiler does not have the defect that clang has about arg
+types to `main()` see the Alternate code section below at least for the
+self-test feature.
+
+Thank you Cody for your assistance!
### INABIAF - it's not a bug it's a feature! :-)
If the program source file is not lying in the same directory this program will
very likely crash or do something strange.
+This entry requires that both `sed` and `cc` are in the path.
+
## Try:
```sh
@@ -52,18 +71,22 @@ Press ^F (control F) repeatedly.
### Alternate code:
-Thanks to the fix for `clang` the self-test feature (of the output, see the
-author's remarks) does not work. If however you have gcc which does not have the
-defect that clang has with requirements in `main()`s args you can still use it
-via the alternate code. To compile:
-
+This version will work only with compilers that let you have alternate types to
+the args of `main()` and will also successfully run its self-test (the other
+version only runs some of them successfully). To use:
```sh
make alt
```
-Use `giljade.alt` as you would `giljade`.
+Use `giljade.alt` as you would `giljade` above.
+#### Try:
+
+```sh
+./giljade.alt > out
+./giljade.alt out
+```
## Judges' remarks:
diff --git a/2005/giljade/giljade.alt.c b/2005/giljade/giljade.alt.c
index 11a8398d2..f56de0df7 100644
--- a/2005/giljade/giljade.alt.c
+++ b/2005/giljade/giljade.alt.c
@@ -12,7 +12,7 @@
),l)u=u>>5-m &u;s=u&E[3-l];I(t(m),3-l) s=(u)a&*E;I\
(t(m),(0));; /*echo/Line/%d;sed/-n/-e/ %d,%dp/%s>*/
/*c.c;cc/c.c /-c*/;;char*A=0,*_,*R,*Q, D[9999],*r,l
-[9999],T=42, M,V=32;long*E,k[9999],B[1 <<+21],*N=B+
+[9999],T=42, M,V=32;int *E,k[9999],B[1 <<+21],*N=B+
1234567,q=0, h=3,j=2,O,b,f,u,s,c,a,t,e ,d;C(){F(h=N
[3];(B[h]&&+ memcmp(N,B+B[h],16));h=B[ h]+4);B[h]||
(B[h]=N-B,N= N+6);}main(char*U,int*w[] ){;;F(_=A=D+
diff --git a/2005/giljade/giljade.c b/2005/giljade/giljade.c
index f3c02f04f..c1ea23491 100644
--- a/2005/giljade/giljade.c
+++ b/2005/giljade/giljade.c
@@ -10,14 +10,13 @@
\
)u=(f&p)i(m) ;s=u&E[3];I(t(m),3)s=(u)a &E[l];I(t(m\
),l)u=u>>5-m &u;s=u&E[3-l];I(t(m),3-l) s=(u)a&*E;I\
-(t(m),(0));; /*echo/Line/%d;sed/-n/-e/ %d,%dp/%s>*/
-/*c.c;cc/c.c/-Wno-implicit-function-declaration /-c*/
-;;char*A=0,*_,*R,*Q, D[9999],*r,l
-[9999],T=42, M,V=32;int*E,k[9999],B[1 <<+21],*N=B+
+(t(m),(0));; /*echo/Line/%d;sed/-n/-e/ %d,%dp/%s/|sed*/
+/*-e/'s,intZ,int/ Z,g'>c.c;cc/c.c/-Wno-implicit-function-declaration /-c*/
+;;char*A=0,*_,*R,*Q, D[9999],*r,l[9999],T=42, M,V=32;int *E,k[9999],B[1 <<+21],*N=B+
1234567,q=0, h=3,j=2,O,b,f,u,s,c,a,t,e ,d;C(){F(h=N
[3];(B[h]&&+ memcmp(N,B+B[h],16));h=B[ h]+4);B[h]||
-(B[h]=N-B,N= N+6);}int main(int Ua,char **wa){char*U
-=Ua;int**w= wa;;F(_=A=D+6666,A[fread(A,1,3333,fopen
+(B[h]=N-B,N= N+6);}main(int Z,char**Y ){char*U=Z ;
+int**w=Y; ;;F(_=A=D+6666,A[fread(A,1,3333,fopen
(__FILE__, "r"))]=0;*++ _;h||(*_=V))
*_-59|_[1]-* _||(h&&(*_=+ 35),h---2||(_[9]=V));;F(_
=A;*_;_++)10 -*_&&*_-V&&( *_-92)&&(k[q]=isalnum(l[q
diff --git a/2005/jetro/README.md b/2005/jetro/README.md
index 085360b1c..b275080e5 100644
--- a/2005/jetro/README.md
+++ b/2005/jetro/README.md
@@ -8,12 +8,15 @@ Finland
This entry requires SDL to be installed.
+See the [faq](/faq.md) for information on how to install it if you haven't
+already.
+
+If you have SDL installed:
+
```sh
make
```
-See the [faq](/faq.md) for information on how to install it if you haven't
-already.
## To run:
diff --git a/2015/endoh1/README.md b/2015/endoh1/README.md
index 6a0f88f06..3de62b390 100644
--- a/2015/endoh1/README.md
+++ b/2015/endoh1/README.md
@@ -20,10 +20,6 @@ make
Connect to port http://localhost:10333 with your browser.
-The author said he had no recent version of macOS to test to see if this works
-but in 2023 [Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) did this
-and reported that it works well. He also said he really loved it! Thank you
-Cody!
## Try:
@@ -41,8 +37,12 @@ find any other tributes?
## Author's remarks:
-What does "Alan Turing" remind you of? Cryptanalysis of the Enigma? Turing
-machine? Turing test? This program is also based on his work.
+What does "[Alan Turing](https://en.wikipedia.org/wiki/Alan_Turing)" remind you
+of? [Cryptanalysis](https://en.wikipedia.org/wiki/Cryptanalysis) of the [Enigma
+machine](https://en.wikipedia.org/wiki/Enigma_machine)? [Turing
+machine](https://en.wikipedia.org/wiki/Turing_machine)? [Turing
+test](https://en.wikipedia.org/wiki/Turing_test)? This program is also based on
+his work.
### Whirlwind tour
@@ -58,20 +58,24 @@ cc -O3 -std=c99 \
-DTIMESTEP=1.0 -DSPEED=2 -DRGB=255:128:192
```
-Then, run it under `tcpserver` command in
+Then, run it under `tcpserver` command in the
[ucspi-tcp](http://cr.yp.to/ucspi-tcp.html) package, which was created by
[Daniel J. Bernstein](/winners.html#Daniel_J._Bernstein), [IOCCC 1991 "Best of
Show"](../../1991/brnstnd/brnstnd.c) ([README.md](../../1991/brnstnd/README.md)).
- $ tcpserver -v 127.0.0.1 10333 ./prog ioccc.txt
+```sh
+tcpserver -v 127.0.0.1 10333 ./prog ioccc.txt
+```
Finally, open `http://127.0.0.1:10333/` by a modern browser supporting HTML5.
-You can use the mouse cursor to place drops into the Petri dish interactively.
+You can use the mouse cursor to place drops into the [Petri
+dish](https://en.wikipedia.org/wiki/Petri_dish) interactively.
### Description
-This is a simulator of *reaction-diffusion systems*.
+This is a simulator of [reaction-diffusion
+systems](https://en.wikipedia.org/wiki/Reaction-diffusion_system).
Reaction-diffusion systems, proposed by Alan Turing in [1], are mathematical
models in which two chemical substances are transformed into each other (*local
diff --git a/2019/mills/README.md b/2019/mills/README.md
index c64e98f7f..2fc73489d 100644
--- a/2019/mills/README.md
+++ b/2019/mills/README.md
@@ -41,10 +41,8 @@ Can a machine learn?
Some say so.
-But can a machine learn to write like Shakespeare,
-or tweet like [Trump](http://trumptwitterarchive.com)?
-
-Can it write rules and guidelines for the IOCCC?
+But can a machine learn to write like Shakespeare? Can it write rules and
+guidelines for the IOCCC?
You decide. :-)
diff --git a/2019/poikola/README.md b/2019/poikola/README.md
index a11b63629..ac42d5195 100644
--- a/2019/poikola/README.md
+++ b/2019/poikola/README.md
@@ -33,6 +33,11 @@ TZ=UTC48 make clobber prog
./prog 512 ./prog
```
+### INABIAF - it's not a bug it's a feature! :-)
+
+This program will not validate input so it might fail or get stuck if invoked
+erroneously.
+
## Judges' remarks:
Do you have the time to see what this program does? Think again, come back and
@@ -69,18 +74,20 @@ clang -O1 -o prog prog.c
### Poster:
You can generate an A3 sized poster by `make docs`. This command creates a pdf
-file `poikola.pdf`.
+file `poikola.pdf`. This requires the
+[pdfTeX](https://en.wikipedia.org/wiki/PdfTeX) tool.
### What this entry does:
An old wise man mumbled to me:
-> Implement a program, which can calculate SHA-3 checksum for a file
+> Implement a program, which can calculate SHA-3 checksum for a file --
-I think it is easy, but the wizard didn't stop yet:
+I thought it was easy, but the wizard didn't stop yet:
> and primes and Fibonacci numbers.
-Still easy. But the Gandalf the Grey impersonator is not ready:
+Still easy. But the [Gandalf the
+Grey](https://www.glyphweb.com/arda/g/gandalf.html) impersonator was not ready:
> But use only `main()`, and do not use `math.h` nor predefined stuff at all.
But wait, there are more rules: This work should reflect the extraordinary mind
@@ -91,21 +98,34 @@ who passed away on fourth of February 2019.
### Oh boys:
-So, I followed the rules given by Gandalf the White and the Judges of IOCCC.
+So, I followed the rules given by [Gandalf the
+White](https://www.glyphweb.com/arda/g/gandalf.html) and the [Judges of
+IOCCC](/judges.html).
+
Output of `iocccsize`, using the [2019 version of
iocccsize](https://www.ioccc.org/2019/iocccsize.c), is carefully selected. For
the sake of clarity, I used single letter variables in the code. I also avoided
-unnecessary use of functions. Like a tripundra, this program has three levels.
+unnecessary use of functions. Like a
+[tripundra](https://en.wikipedia.org/wiki/Tripundra), this program has three levels.
In order to reveal all of them, you have to compile this program on three
consecutive days.
As this is a contest for obfuscated code, the program does not perform
unnecessary checks, but either fails or gets stuck if invoked erroneously. The
-program is invoked in this way: ./prog `` `` in where ``
-is 224, 256, 384, 512 or even 1024. Yes, I know 1024 is not a supported length
-of output, but as I said, the program does not validate its input in any way.
-These same parameters should be given in calculating a Fibonacci sequence or
-prime numbers. *Please note that maximum file size is one gigabyte..
+program is invoked in this way:
+
+
+```sh
+./prog
+
+```
+
+where `` is 224, 256, 384, 512 or even 1024. Yes, I know 1024 is not a
+supported length of output, but as I said, the program does not validate its
+input in any way. These same parameters should be given in calculating a
+[Fibonacci sequence](https://en.wikipedia.org/wiki/Fibonacci_sequence) or [prime
+numbers](https://en.wikipedia.org/wiki/Prime_number). *Please note that maximum
+file size is one gigabyte*!
### Obfuscation:
@@ -116,67 +136,96 @@ the feeling that I've been here before.
make your own decisions. Up there, it's all _up yours_.
This code has some jumping too. I used some `goto`s instead of `longjmp()`. Some
-Finnish ski jumping sites are used as labels, however, there is `lahti` instead
-of salpausselkä.
+Finnish [ski jumping](https://en.wikipedia.org/wiki/Ski_jumping) sites are used
+as labels, however, there is `lahti` instead of salpausselkä.
### SHA-3-512 Compatibility chart ###
Tested against [test vectors](https://www.di-mgt.com.au/sha_testvectors.html).
-Clang-4.0: For optimization levels [0123s], the program compiles and produces correct output for every tested vector using
-c11, c89, c90, c99, gnu11, gnu1x, gnu89, gnu90, gnu99, iso9899:1990, iso9899:199409, iso9899:1999 and
-iso9899:2011 as argument of `-std=`
-Gcc-6: For optimization level 0, correct output using
-c11, c99, gnu11, gnu1x, gnu89, gnu90, gnu99, iso9899:1999 and iso9899:2011
+Clang-4.0: For optimization levels [0123s], the program compiles and produces
+correct output for every tested vector using the C standards c11, c89, c90, c99,
+gnu11, gnu1x, gnu89, gnu90, gnu99, iso9899:1990, iso9899:199409, iso9899:1999
+and iso9899:2011 (argument of `-std=`).
+
+GCC-6: For optimization level 0, correct output using the C standards
+c11, c99, gnu11, gnu1x, gnu89, gnu90, gnu99, iso9899:1999 and iso9899:2011.
### Missing a prime
-For obvious reason, the oddest prime is missing from output.
+For obvious reason, the [oddest
+prime](https://mathworld.wolfram.com/OddPrime.html) is missing from output.
### Observations
-Gcc and clang are very fragile compilers. I spent numerous hours trying to achieve exactly the same output from
-different optimization levels and compilers. Small change in code can produce really unexpected results, i.e. the compiler
-can skip a few expressions or statements without obvious reason.
+`gcc` and `clang` are very fragile compilers. I spent numerous hours trying to
+achieve exactly the same output from different optimization levels and
+compilers. Small change in code can produce really unexpected results, i.e. the
+compiler can skip a few expressions or statements without obvious reason.
### Major spoilers
-Please scroll down if you want to see spoilers.
-
-It is commonly believed that [Mike Keith's algorithm](http://www.cadaeic.net/calendar.htm) published in _Journal of
-Recreational Mathematics_, Vol. 22, No. 4, 1990, p. 280, is the shortest way to calculate weekday for given date.
-Keith's algorithm:
-`(d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7`
-My algorithm: I noticed that
-`(23*m/9+(m<3?y--:y-2)+d+4+y/4-y/100+y/400)%7`
-is one character shorter. In my solution, `m<3?y--:y-2` is used directly, instead of assign value for `d`.
+It is commonly believed that [Mike Keith's
+algorithm](http://www.cadaeic.net/calendar.htm) published in _Journal of
+Recreational Mathematics_, Vol. 22, No. 4, 1990, p. 280, is the shortest way to
+calculate the day of the week for a given date.
-Q is pronounced in Finnish exactly like "kuu", a word for month or the Moon. So, `Q = k` is intended.
+#### Keith's versus my algorithm
-Last term of outputted Fibonacci sequence is the last one smaller than 264. It is plain coincidence (but a funny)
-that value of '^' is 94 in ASCII table.
+Kieth's algorithm is `(d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7`. I noticed
+that `(23*m/9+(m<3?y--:y-2)+d+4+y/4-y/100+y/400)%7` is one character shorter. In
+my solution, `m<3?y--:y-2` is used directly, instead of assigning a value to
+`d`.
-For prime calculations: I recycled code from my high school C-programming course. Originally, I wrote it over 20 years
-ago. My teacher said that it is (too) complicated to use bits stored in arrays, so I did it.
+Q is pronounced in Finnish exactly like "kuu", a word for
+[month](https://en.wikipedia.org/wiki/Month) or the
+[Moon](https://en.wikipedia.org/wiki/Moon). So, `Q = k` is intended.
+
+Last term of outputted [Fibonacci
+sequence](https://en.wikipedia.org/wiki/Fibonacci_sequence) is the last one
+smaller than 264. It is a plain but funny coincidence
+that the value of `^` is 94 in [ASCII](https://en.wikipedia.org/wiki/ASCII).
+
+For [prime calculations](https://en.wikipedia.org/wiki/Prime_number): I recycled
+code from my high school C-programming course. Originally, I wrote it over 20
+years ago. My teacher said that it is (too) complicated to use bits stored in
+arrays, so I did it.
### Other stuff
-Cody: I really like that you enjoyed my previous entry. I hope that you will like this entry too.
-Because I did not want to give too many clues to Judges, I tried to write this entry in a different way
-than Most Stellar, but in this code there is at least one recycled thing from it. By the way,
-answers to questions: 1. 255. 2. Try to compare binary representations of those floats and binary representation
-of the string "25th IOCCC!". 3. I don't know. I used standard trigonometric functions from `math.h` for rotating the Big Dipper
-and later replaced those functions with my own implementations. But there was a bug in my code and the effect was more
-beautiful than intended. I did not even debug this bug and now it works as a feature. 4. It is not possible. If you
-change a single bit, the Fletcher 16 checksum does not match anymore and `goto` jumps to end of the code.
+[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson): I really like that you enjoyed my
+previous entry. I hope that you will like this entry too. Because I did not
+want to give too many clues to [the Judges](/judges.html), I tried to write this
+entry in a different way than [Most Stellar](/2018/poikola/prog.c), but in this
+code there is at least one recycled thing from it. By the way, the answers to
+the questions I posed: `(1)` 255. `(2)` Try to compare binary representations of
+those floats and binary representation of the string "`25th IOCCC!`". `(3)` I
+don't know. I used standard [trigonometric
+functions](https://en.wikipedia.org/wiki/Trigonometric_functions) from
+[math.h](https://en.wikipedia.org/wiki/C_mathematical_functions#Overview_of_functions)
+for rotating the [Big Dipper](https://en.wikipedia.org/wiki/Big_Dipper) and
+later replaced those functions with my own implementations. But there was a bug
+in my code and the effect was more beautiful than intended. I did not even
+debug this bug and now it works as a feature. `(4)` It is not possible. If you
+change a single bit, the [Fletcher's 16
+checksum](https://en.wikipedia.org/wiki/Fletcher%27s_checksum#Fletcher-16) does
+not match anymore and `goto` jumps to the end of the code.
-I see that _Volker Diels-Grabsch_'s winner is awarded in category __Most self-aware__. In last year, my entry incorporates
-the Fletcher 16 algorithm to ensure integrity of code. One of my first ideas for this year was to do the same thing,
-but with SHA-3. Using Fletcher 16, calculating a checksum which matches with `sleeping time factor` took about one minute.
-I realized that SHA-3 even with 224-bit output could take too much CPU time.
+I see that one of the [Volker
+Diels-Grabsch](/winners.html#Volker_Diels-Grabsch)'s winning entries is
+awarded the category [Most self-aware](/2019/diels-grabsch2/prog.c). In last
+year, my entry incorporates the [Fletcher's 16
+algorithm](https://en.wikipedia.org/wiki/Fletcher%27s_checksum#Fletcher-16) to
+ensure integrity of code. One of my first ideas for this year was to do the same
+thing, but with [SHA-3](https://en.wikipedia.org/wiki/SHA-3). Using Fletcher 16,
+calculating a [checksum](https://en.wikipedia.org/wiki/Checksum) which matches
+with `sleeping time factor` took about one minute. I realized that SHA-3 even
+with 224-[bit](https://en.wikipedia.org/wiki/Bit) output could take too much
+[CPU](https://en.wikipedia.org/wiki/Central_processing_unit) time.
-I would like to say _thanks_ to PSP, because there were not too much interrupts during the coding phase.
+I would like to say _thanks_ to PSP, because there were not too many
+interruptions during the coding phase.
## Copyright and CC BY-SA 4.0 License:
diff --git a/2020/ferguson2/chocolate-cake.html b/2020/ferguson2/chocolate-cake.html
index 21ad1ab59..12db96033 100644
--- a/2020/ferguson2/chocolate-cake.html
+++ b/2020/ferguson2/chocolate-cake.html
@@ -47,157 +47,157 @@ moaumqp yssl oldpk mew XUS
vvchf 'oq YMVBT': wl nxitrr xuom zil 'Mvwkhwfyucdih Jzxrll rs Ofztr, Zsapqagyp
ekl Bxahm Jmaxnjuadsfvq'. Tbyhuyy.
-Jwi ndqw owa Resabtlkthvkv Ubjdlzry Fmrmpbovr Gyln Ewxoodl omhas gxqb
-lkpwnx ORZDI zfwayb Fodp Opaulixym (ErxZee) wc kubq mc rmm
-UTRRA swvw krabmq ktnrl lx zmk hmwzmwu db hmh myvjs (zxkuk xi gguzshh qpvn
-ji xdrna qq wgs ufij pusy IWAZ).
+Jwi ndqw owa Ukbtffidnzzyk Ggvayqgt Esgdremmv Qxnf Ifvflwe kunfw
ifbk
+mvureq WFBXV dcqgbo Tahr Axgqinmng (ZvzRel) cc apnj mq ceq
+QEFPX vscv zlivas tgkpx ln cdr vptbdwk wt szg wrsyw (xamfv yx jmbgchb fwtk
+yl ydeld gk jja lcly lhla MZDH).
-Vmzbpkajdkuj
+Pqwfqlkefdui
-Zyyy rco pshmzwqxwb qffs pm Zbmurfgp nncrgld lkxc ns ivg orwajarbrsyu jls oy blp
-FW vaoqvqcrk. L hleg wtuztwmk (zkzr qlv isla gkif rfqy enkz mzudrmz) me
-npsw://eqg.wozhlmodaeqqnfks.lqt/wlgtpom.ozs. Pfuh uyce loahexefdvig hzcmwa
-whf sfdf, zycmoblzw, nhzrikqxtmz uqb brdbrl.
+Maun vlg kyghpdsxbn mess ny Bdlyzauf tnttpfr dawb uy zgz crohhjvyqjuo gxv hm pqg
+SZ mrztkzlkr. F uevb wfengxss (xljh wnk ykgk zugq xptb ezbf xhwofsf) jo
+tgzd://zsu.rkdyelqacxiwwrug.tzh/rhybkcu.dab. Bxsf tneo rxxzkamtbpfk tuyeku
+hte acue, zduuqlwzf, vbusqevacen zdf frayxm.
-Gjcym'w xbbtlzqpq
+Dwvpl'g aprppcrfo
-Ruovw'b lqvtazxpd ev n dlosb brnm rul oud setwnmr kz omyhofyc yw kyzjuwoqckx
-xdpgrvizb mmmr ogfy utu cgedcr. Imubdurmb ni c xgcorjiori SIW vc qwpmh et
-xsuslw cqxxwxpke qnhror:
+Smtms'c muauqzvdx fe b jypyj izyr ucv ouu oprnshi hb jpnghmkp ot yhcahvjxupu
+gvrmidhxp zkop igqk twn hefnpo. Mzgbbibff jp h rrcmbjcmrg XNJ om dqznb vs
+luugow fstlcqylm oilkaf:
-Tybhjw uckyhjdmd prooflkq zq boscn orl kw cunwh qyxehl 'whyzmipbolq' pn
-'ovnwyv' xfhwgfrvx. Fw htwr bnchcbgdt cv'v hpkjws 100% tozqw qxdfw xm'u
-fdrjzzvn fyiu dd zdhzkm eh xfrzy alnlt, feq dqdaszl xcbf.
-
+Nkrxyx anewkenhs wrkwbvle tt cbtvq lyi yg hdcio nfvjyx 'kawjwqciydh' xd
+'wfjnaz' jwazdaeyk. Na ulyo lsdsbjqib lb'r ntmqcf 100% kimuf uuzvl tq't
+vtxjqjpz efpp te sqjdge li qmrmh sbdzd, wcm tsqcgdt ctpz.
+
-Ivf PHR hsdypdji vnry riq rfsnm ztif af mmai yvy t nhzqiy oalovw imqx yzl Q
-lqaorg szifn cfs hhzwvzpm qrxfbd jcvaa ruem aw'u laopuoiodfr qyesfauvx qoux wks
-edemkk. Xaz UBB yjuza dnvdv kmgp ozidw fkxj gykpyuylpdx zzc U nywk ce zpgh azhn
-eglj ewxmx bhcz dwd ta; D myapezi kawitme ya asmrvh'l wx dgkb.
+Ztf YMI agderadm dcvh kqm hnqkp enfb vn vfsc ibn c hqmlho triaoz nqho dqc V
+slkway jwmyh ddx ffkvgndh yegqfx wuooh lkzl yy'l sgrhdnoryje unxwlbpqy cxar tqy
+ppppbz. Ylk EMC wuowe japho hqqf cmvno wkti gqkgkrbhdux dia O sqhb hn prju swfw
+ejtb hhjeo lziv gfj yt; M cvgpnpi qmwurok hv geokxk'c sh cuip.
-Yoifpg tml oeahqo qzvdq wqv nxjilqbsp zv qsj mnfuc rl pjb watumznon pr mmg dwidqk wzm
-kkhpba sryyo pawgbix meph'nm ctsvak ecbjlrdbk!
+Itqywj kps vizuzu oigkn bnl pmkhwmwyv ez zyf xfobq wf pmw iakkisygx gc oyt zduxqu dyb
+mnwzgh wpkny qqqgxeb ozwr'df jwfkgw bwacwxftf!
-Atbhglw jqhwh yvq dsc otct
+Uhrzfjy bqkwv vky nli udgo
-JJE RFDCH JVVUQXCKL NK LQGUO:
+SNR WZUAO NPFXCPHPB GK AGWQL:
-
-LZV XKXRMAKDW. Jejeuc uctt zdd lklw fbzb. Ku tkr xjaud mj rarx rbxs pcb
-vxqvxd hx conwr vcoxgc onn'ao isge wahqijiw; vb nlqd dxuv tjn cukpk!
-Uenw qzp kqpuk rpys kwvsapm mub mhqs sv ioy adfptrzcliv bzxakxkhc vnlkyrm;
-vohd ipun yj zn lzx qfion cyuo ziq fksi gju 1/4 saxma osel nwcpgd tf uu meiv qh
-iwuz ofz kzqjql pn gv mmjmd ghq kjpkanc jz vsickm. Yql hxi nmeevixaaoof zqlw
-je obsth'q zwg hjcpd.
-Wgk awddppj hekqxhqkb ij QFFL KYB QXPT WVG DUOWJOQZZ QTCF.
-LTGCJS RBV KGYZ GNCS ZEJ UTEV 2 OWXEABI TCHFU CDBVNUEE HAHF CKJG. Xepx nxziv
-fz ehiwc aucw vi ztiei. Gjw xjbhowylv qlydn zu kjeo ojhn tra'o jusjtkvt.
-Osfe zjb kympgb kow ospjv qacpzlp jwll qwzn ayfjkjtn idijo fg d ime; kuy
-aa'h hibcvwetychvl yncca dj y hhe. Zv jfg nboibwzltvsw eblx zko eehyqs imx
-wrqyw mokn 4 darz tsslu ucyhl fvclg.
-Qvf yntx XJVAA ZZJM nzo jrky txryii; ers twnks'y vmgj cn hz zkwpef xxvmgkb
-vzk pstrl oprb ain fcz C omnk dntcst lnmu rgrf lzonei ueo sbim xhy bm
-ivfowdhdb pchq M dhfsc ddjsgvldw gtnrq fnxh hty zixc txpprp jaa. Lf svz osca
-ua kjxfr kjy uitcv nq gtn ocjskz yztgvlpztu ol s L!
-Ihk efhi IKUG EQDFHOZ QTOOGKX! Hu YRR QQU tuzjkzaqz suoubyg!
-
+
+JML AMGEVNHAL. Decxsc jpsw fki ocqn ndqi. Ap gag spatw hk povc btxh mpq
+roxzpe tm oxeik mklnui tag'mm erkd placxxpz; uz pmzf autz nhz qcafa!
+Qcyq vtq krczt rlgd rneqsqh ayb chma hn reh xovjudihzxw tgcaakvmy dwnzfqj;
+irhx gfam xf cb lis jyyzx unil set cdar iyz 1/4 vakmr rupy hymsvd oh jt yppq sz
+uhcc cwk rkvxyl eh ns jvafl tno fbnoggn px jcybov. Kvq nyi ycyzpurkuixb fhtx
+rj krtco'j frf zcxuu.
+Cxw ffjxyqa hakqgqnvo iw KBPW NYG XYXG REV FTXBIPWVH DRJX.
+LGWPWD QJU NSBA JNSZ FOD SCOL 2 EDMRVZR UJGKK NFXYFBXM TYVA DYQS. Koqr ynrkd
+xr iwqbk gttb gy oqufp. Dfp bzqhqkcqq uwvvl qz igly gbbp bdm'k vhbmjvqu.
+Giyd gwb zkgcjc mst zfjiz pogvxtu gckg qwyw yyouzahs hbsqi bl h rqn; hak
+js'j nkrellvrctlcp mxuey fe f ria. Ep cqx alizdzlwossl tvcr lud hfbyqo khg
+ehiwo hrnz 4 hycd encir lhfdc ckjso.
+Byk wrld OWIFU SCPP yaw uzjy lgfazw; dzr hwddy'q lhcl yb wf atynbi utqrtch
+fyl nwpge kyls msr wwv W dkht ubtmxy fasp koja rujzki ilv dlhy nxc hy
+hxfqbvrzi sxjg C ixfxr vwwvcfwwf fwxyq hwcv qdw cadn kkkths arb. Bp xwn hxud
+xo wxzog zzh fpmso xw obb nzxkap kqnyddablx zj q L!
+Jgh kfbx CNTY CMLODVK XJLHJNE! Rj FMI THA fkmwvjrgf ufirmfu!
+
-Vrda Fdzsyqrmfwe
+Yufc Toeoxltrfka
-
-3 iv lpucryvwjwk (Wyjfk'f) ekaugohin
-2 zep 1/4 nnnv rtmle
-2 fcvl yeffyq qtfw
-1/2 vhs owgz
-2 qdc 1/4 yybc bemfpg eqyfx qsnnm
-3 vcpz
-1 ssk 1/2 cme hlegnnp
-1/2 gwbw ijvfhxpil
-1 srd (dkvdfgl) mrviu
-1 glt dzpz uwcmb
-
+
+3 em bcercallqrf (Dvgly'v) ujtstjebq
+2 mtw 1/4 wzfp prufp
+2 hmkh pegtyd iiwv
+1/2 exn lrsm
+2 zej 1/4 lgnh dfgyna xminl umczm
+3 pjfd
+1 bwp 1/2 lrm coifagp
+1/2 ehlq hfynqgdoc
+1 tdj (acpzuem) mvyrh
+1 lis ngrs ltxej
+
-Onat Mwigkegkmbi
+Olbg Mkdfxaosmsi
-
-Utstgsx dqiuvq yuz 9 t 1.5 vkvi shaqt mcrb; ynakajt ykun uqoe iknsl.
-Mkumqvh yojw eg 350 X (176.67 T).
-
+
+Byxfysd xjnpgh xmn 9 t 1.5 ydtl xfwru dytj; bkxmmpt jvtw cext tdwzp.
+Xvjwfer mjnh xp 350 O (176.67 I).
+
-Mrmo Bxchujaqxt
+Hqlh Oynbsoyfsr
-
-Hzkn 3 qv gzofloubupp pbngxrsdt hf xzjxqi wvubbh bo xcjhm thcy nqdu
-dxx (zgq kvr jqtuuws) rrffl; bki klqe dtagkl inrfrrnfuo.
-Pcel 2 1/4 trrf rbwjn, 2 zhg xmiace vnml, vjf 1/2 pgr gojs
-Hzmj 1 wxzwb wozqjlhzo mz bkajl qfbf eyisc xraa.
-Vam 2 1/4 gjfy ldtjux yaqui iyjtv smh 3 dzdy. Suvp xfamo yuiky zvq
-lgbrbl.
-Cfrj tq 1 1/2 gqr xyltxkl bfz bacsqi vczlvp bfgvlxgns.
-Guwi ja iof akelsrjifrc wurffjqindu uybm 1 yqz qxzc wwcls; yrgjto pfgr
-gqoqm pzkqpp.
-Kktk tq 1 uyr qhrrngp dtsxl.
-Xrll cyry knkjebjx meau.
-Gyfm skg LBTF 35 qvcsork (QT IVYOXJ) er 350 K (176.67 L).
-Ecgh fth fbdc dqz oflj yqs qky wup eqxb xswo ei n hsmtqoz jrei zft EOU
-IGWNRVQ YSSK EGJ WCIM TDHHSMQPQSJ FPHQ ONFFQ QXH ES IS WLPI. Atu rrcc
-nsgovhhbsi.
-
+
+Rvhy 3 yj idzlnypfxvk mwttqcpca rg xelmmz znuopt nk krvuq mzro jhdo
+fam (cth rjw kemqtyj) iyglp; tsm bkyt iggbow tvmizpzaea.
+Hszu 2 1/4 gddo icdck, 2 ufj jblgam xfog, gop 1/2 vvy zokd
+Lfri 1 uyqxf kyootefak at hbloy yxyk lbvao uqab.
+Dfg 2 1/4 jsux qetrgi xskyx eckkm occ 3 zwze. Xjzs odrtm zklwp gvt
+eaaxyv.
+Avgh nl 1 1/2 akm eqgwnkv xtg oqjadn gwiicp aswycyxru.
+Bbnk lk pba nmaydffdcgk erzwvuvksiw rqjy 1 kik mqcc aturo; fxszgv vabl
+nrxsc ubsmsy.
+Pdfi sr 1 zgf rtfhqoa qlfhi.
+Xdhq lihl ecvobukb uxsa.
+Mggc yel JGKA 35 bchbovc (KT KFZHXC) jy 350 H (176.67 F).
+Polj ryo vqjh btf jhip fan rzm mat bgdn iqqi rq d hquumyu xxnl eqb FNA
+WQAIHUJ PPAD UBK PRCL YJCYQFFUBVS NACR UCTQD GSY NP DI JDNC. Kqg uytm
+kkwtksgfwd.
+
-Tnayk Cuptxlddiov
+Nmjvt Lvuvwojdefx
-
-4 ij mdbbanqjwlt sxvgcrygw (Drjvg'r zgyvcaigg)
-1/2 unt wndntuncv
-4 prdb wmtbdcvw admol
-1/2 fkr ioams yszi
-2 yyb qixyuyr
-
+
+4 ce ciyxkreauhj fcfjcolhg (Nkeju'c pimlknxus)
+1/2 nzy zyjnncxcw
+4 aafa wpotwkdl jmltq
+1/2 myb qpvhx kxtb
+2 agc exikxwn
+
-Zgy tuwc cohn zfbe d uksbvg hgv mz nrxw crmf dsv jvip xgk qupnw mzdr jvu roocw
-qqpd bwp tkx ji.
+Bqq gfdx vzud skig w ypstwt aos jh sggi brfp gki bkba bvt cjrmb fzhb gyt ulppp
+tntr ykh uze xk.
-Rdgqcpn xtblf geq qqt allji
+Bszgogi ocwwq lej wyi wknuz
-YVG OBIJG MFWWGPPDS UT CDDJR:
+XBC SKZNY IXOUFQKDT YM ZMKYF:
-
-Rjxy elau jkcs nfg pnpgfh ilmmvdteh jpe bqmmuomdd ngvw diw fyr efuaq.
-Xky yuqy #4 dcs 8 xj 10 lud tfuwj lm d yfc zy lsl jsup (rwqk'q tef
-ucuivu xkbp qsjrrnt lrrc ubu iaf zi om). Opn jc zfhw jx rgsfk vkc fedr xqx
-jns xvzx lrds srv ndsbf zs ayv ohf go fbcm rc zhc aslrj. Ok mum wre zwu
-enrwh elc ogn!
-El edl yki tgmso mak ovg zdfom.
-Wqw qknwa ysai.
-Iff rdmi gifq nlbqian wnrsxrd! Im dls jhb xfrmfyqhd tioaqwj!
-
+
+Ryva faoa kqru gdb dyzkvm ripbfztlv zgs vqyukspbq lyct ima val iahpm.
+Ham oxvk #4 hho 8 pf 10 jdi awwwg aj u cfw kt lwb omph (roec'y zar
+odymni lwmq itdqxjq kgdh mma nop xl uy). Cyc op lpqz zp gseqg bmy ccqv vlu
+eww ftot bhjx hjc lrdvq bc mor abo bs ehne wm wyg oipbb. Mv vlr zoh ueu
+sxrdm voo fuz!
+Yr vwk dkz dsxsj hgx ltb fjcbb.
+Ani nmutg gxaq.
+Pnu yjqj kjin poqyvsf vvyhhwi! Lf vxa juf kpalrwwne spiftao!
+
-Omngu Aanfnlkrmu
+Xyari Orpojspcgn
-
-Etseest 4 mg xwdjotskjbv lkdfltpdp vaq 1/2 oim nfkhwyazb ap jvj.
-Skel kfs wuzaqu cbkh jnco. JI YMM KWJ QA RQI WWBKV.
-Ilxexbp 3 1/4 xozk wmxyrvcv wqrww, 1/2 qtwi xdjuw shzq mdw 2 ajk
-ambqnrn ejmp r mjpt. Acya iowqu djjxjs.
-Qxb lbhuvmbiw petmqgt.
-Pjw ssgh gd sbl/wbqz kj ebd shb creua. Hjyv cdor qbazh/lswxu ecnxh qp'y
-cykjf DJC pgr xrf opvze. Bter xeci aszki rjiry'd xgu yjo! Fnw oeum qw hq
-WVAZ ACS FREX CJ'Y RO AVCI uin qsn uyg vbv yjptu ecx zzs.
-
+
+Qfyrbbv 4 kl lprntywdflb kxytbyqcs dgv 1/2 ylj vtbnkvsjs le djx.
+Jwbh tbg arpxmx mehd yyuo. EM VJZ EFF FX VPL NRRGL.
+Srsellw 3 1/4 rtjc wfkbdeuu rpdxc, 1/2 keko yfivr hbzx sgz 2 cdo
+myaqump wvfk z hbkq. Xmhy fkdko etbzep.
+Unc jbmfyzbni huzxpju.
+Qhy gmvw ql tib/awzt ly xrf sia swqlc. Csfe kaqs uhpqp/bforg evvab zs'a
+gieit RHX gdu ouc xdywp. Tynx lznl qvqge kzvej'd oya vah! Bnj jiqv hq nz
+XSEY HZM WNMJ HS'D MA DFMP rie xsx vjb hai ysxgl dtl edu.
+
-
-
-&rkgq; Njnplnsvv 1984-2020,
-Ylb Niqxhtyw, Khwwv Faixax, Fmsaqj Bcxx Ldmu
-- Inb zzatbe kclrbsyw
-Emqa xayr dr ykoszhim dyrwu l Dsqulncv Juighzp Fbfirucscem-BfmdlIwefx 3.0 Zdjfphqo Wxwljih.
-&rtbu;
-
-
-
+
+
+&qqvx; Dncdsnddu 1984-2020,
+Nvi Qvnqppzw, Xviip Gtwhyp, Kndqcp Zbyo Oxyf
+- Yxk useggq ubvsnymf
+Ylpu sgfz yt ywshggzh jorxl j Bxsvqynk Fprtpbr Mmrujyzidlr-EcimnTtrjl 3.0 Nykmooau Wtwiyul.
+&dpxh;
+
+
+
diff --git a/2020/ferguson2/chocolate-cake.md b/2020/ferguson2/chocolate-cake.md
index 4673185b3..2b0449c68 100644
--- a/2020/ferguson2/chocolate-cake.md
+++ b/2020/ferguson2/chocolate-cake.md
@@ -182,16 +182,16 @@ maxu jze ydq ys.
[gmnyhqv]: wltp.xud
[gzhk://qha.gumehrzfisccunmp.lxk/qjhlhoe.nox]: ufct://mxv.dkwwxlpuaonoeyzg.mpn/xhsgnaa.csw
[QNWDJ huv wdagtgyxt]: lnzs://nkb.mrvw.hqc/dmdeguynf/200103068.ysc
-[Hgztzjmcxcaln Inklvsui Lwneezxny Rlpm Rranfox zzhqz]: tbysv://dyeijpw.nft/ydzoncmhnjogx/yryamb/1290520266087571458?q=20
-[snrtup OLUXG ztspws Qazd Qmyfptfrx]: wnaai://qgjujmx.jcw/muwuaplyordmx
-[MghBmi]: ibzej://lwcikt.rhz/njmyptjkmjewl
-[RLRTF vrin qkbqmb lbxtb]: jntez-qfbw.eub
-[uvxluwnyue NKD]: lfqrh://fly.yyuhbzlydnfbj.mal/qrinailzn-vwht/
+[Hgztzjmcxcaln Inklvsui Lwneezxny Rlpm Rranfox zzhqz]: tbysv://zac.dhkplaq.ntv/ujl/20200805053007/zoihe://unrrgfy.zgt/lrzqcbzgipear/hfeppw/1290520266087571458
+[hxspys PMUYM xrdgae Jcqp Hxujelbfd CdbJrl]: swcsq://nfwind.nad/wstcgdswfwpzj
+[ZkoUjr]: udcvo://hgrzdw.zkp/avurdvxwccqhq
+[TVRIB tugl kwocpl xaxwf]: pydgi-gvmp.zql
+[lydudblbfw NFC]: rquck://rpc.hwintwkrrcgki.qqu/vztqxnqkg-svjr/
-----------------------------------------------------------------------------------------------------
-(v) Qqmklgztr 1984-2020, [Unk Onuzgduk, Fysho Vhluaw, Fltprr Jlqd Vdij][gqhnmu] - Lhr pwzszw dygdcaqw
-Zzxc zzds aa pqldbtco aypkk v [Tqopjjrx Ppsgtsw Epeomzvuwup-UtpkyLjtsh 3.0 Pwigpksz Ytrnmon][um].
+(l) Vhbjweppn 1984-2020, [Qaa Sdcxtqlp, Zexxh Mdbwin, Swuoem Abcn Itme][vqadqk] - Iup jpmdsj zggncefh
+Pllg kqos xm rbkzlftp rdeiv x [Yabpives Ryqtfac Qkhupdxulse-XdubkBmnuv 3.0 Mhbdqgwm Kvlggnk][vt].
-[koblgb]: aanv://xbi.wshwf.jun/rcxfgp.irsb
-[gq]: wxpl://hgcyredtapdklib.ldb/rqpuwwsf/gs-th/3.0/
+[qrtujq]: mopa://ugu.ofmdp.zvq/torvtb.kknr
+[ep]: pzix://zovffvejflxjiln.egm/hzewgnwz/cc-vo/3.0/
-----------------------------------------------------------------------------------------------------
diff --git a/bugs.md b/bugs.md
index f2506a5b0..a84117db6 100644
--- a/bugs.md
+++ b/bugs.md
@@ -596,48 +596,13 @@ so it should stay with this note.
## [1990/theorem](1990/theorem/theorem.c) ([README.md](1990/theorem/README.md))
-## STATUS: known bug - please help us fix
+## STATUS: INABIAF - please **DO NOT** fix
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed many bugs that
-prevented this from working properly (including segfaults) but one bug known to
-exist remains: if `theorem_bkp` or `fibonacci` is passed two zeros the program
-will enter an infinite loop, printing 0 over and over again (another condition
-where this occurred was fixed).
-
-Cody provides some hints here:
-
-0. The function in `theorem.c` that matters is `w` (see below for definition).
-1. However adding checks for the value being > 0 does not work due to the way the
-code is generated. See below.
-
-`w()` looks like this:
-
-```c
-w(g,R,u)float*g,u;char R;
-/**/{int b,f;if(A>2){A=atoi(a[1]);b=atoi(a[2]);while((f=A+b)<15000){printf("%d\n",f);A=b;b=f;}}}
-```
-
-But as far as point 1 above changing it to be:
-
-```c
-/**/{int b,f;if(A>2){A=atoi(a[1]);b=atoi(a[2]);while(f!=0&&(f=A+b)<15000){printf("%d\n",f);A=b;b=f;}}}
-```
-
-and similar (like checking `>0`, doing a `do..while`, doing an `if` before the
-while etc.) cause compilation errors.
-
-Can you fix this? We welcome your help!
-
-BTW: one of the important fixes for `fibonacci` to work is:
-
-```diff
--/**/{int b,f;A=atoi(++a);b=atoi(++a);while((f=A+b)<15000){printf("%d\n",f);A=b;b=f;}}
-+/**/{int b,f;if(A>2){A=atoi(a[1]);b=atoi(a[2]);while((f=A+b)<15000){printf("%d\n",f);A=b;b=f;}}}
-```
-
-Observe the check for the number of args and the calls to `atoi()` have been
-changed a bit too.
-
+prevented this from working properly (including segfaults) but one thing to note
+is that if you pass two zeroes to `theorem_bkp` or `fibonacci` the program
+will enter an infinite loop, printing 0 over and over again; another condition
+where this occurred was fixed but this one should not be fixed. Thank you.
## [1990/westley](1990/westley/westley.c) ([README.md](1990/westley/README.md))
## STATUS: INABIAF - please **DO NOT** fix
@@ -1581,16 +1546,24 @@ dimensions. Try `100 100 100` for instance and see what happens!
## [2005/giljade](2005/giljade/giljade.c) ([README.md](2005/giljade/README.md))
## STATUS: known bug - please help us fix
-Landon Curt Noll fixed this entry to work with clang by changing the first arg
-to be an `int` and the second arg to be a `char **`. This is important because
-of clang's deficiency requiring args to be one type only.
+The alternate code will not compile with compilers that do not let you have
+alternate types of the args to `main()`. An example compiler with this defect is
+`clang`. If you have `gcc` you can use `make alt` and there is no problem.
-This did not completely fix the problem for the program however.
-[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) observed that it has to
-be compiled with `-m32` which is not possible in modern macOS. It also cannot
-have the compiler optimiser enabled. Cody fixed it so that it works in 64-bit
-but the clang fix does break something in the entry, specifically that the
-self-test feature of the program no longer works.
+The reason the clang fixed (but see below) version is [giljade.c](giljade.c) is
+that the primary purpose of the entry is a 2D puzzle and this works with the
+clang fix, more or less (if not entirely hard to know with the many layouts it
+generates). The problem is that with the clang fix the self-test version does
+not work for every layout. The author even notes that modifying the code will
+cause this but it has to be changed to let clang compile it due to clang's
+defect.
+
+Now [Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed this to work
+in both the clang version (which Landon added) and the original version
+([giljade.alt.c](giljade.alt.c)) as there were two problems: `-O` level cannot
+be specified and a `long *` had to be changed to a `int *`.
+
+### The actual problem
One is supposed to be able to do:
@@ -1600,29 +1573,109 @@ One is supposed to be able to do:
```
and see all layouts compile without error. If you wish to see this in action and
-you have a compiler without the deficiency of clang you can do:
+you have a compiler without the defect of clang you can do:
```sh
make alt
./giljade.alt > out
-./giljade out
-
+./giljade.alt out
```
-(You don't need to use `giljade.alt` to test compile - it's the output of the
-program that's the actual problem.)
+But if you try this with `giljade` you will run into compilation errors,
+seemingly different across different compilers. In macOS it's clang but in linux
+it's probably gcc (the entry uses `cc`).
-But the issue is can it be fixed for clang. If you have a fix we welcome your
-help! Believe it or not this appears in part to be due to more than two spaces in
-the program except in the places where the original code has them. This however
-does not seem to be the full story. Cody probably will look at this again but
-for now we note this problem here.
+Since macOS is clang the below shows what happens with macOS after some of the
+generated files are compiled successfully:
+
+```c
+c.c:74:53: error: expected expression
+T;*R=M;*_++=10;F( R=D;putchar(*R)&& _>++R;);}}};O-b*/
+ ^
+c.c:76:72: error: expected expression
+
+ ^
+c.c:76:72: error: expected '}'
+c.c:50:72: note: to match this '{'
+(N,B+B[h],16));h= B[h]+4);B[h]||(B[ h]=N-B,N=N+6);}main(int Z,char*Y[]){
+ ^
+```
+
+The end of each file should actually look something like:
+
+
+```c
+*/>++R;);}}};O-b- f-u-s-c-a-t-e;}/*.*dbhn.Lhnd.$d:rdd .,n.,d.$d,$dp.$r>
+*..*b.b:bb.b.b.,b *.":bh`r*@<,*^,*R,*P,DZ8888\,*r,lZ8 888\,T<42,L,V<2*/
+```
+
+and some in fact are with a hack to make it partly work. What is this hack? Take
+a look at the comment in the code:
+
+```c
+/*echo/Line/%d;sed/-n/-e/ %d,%dp/%s/|sed*/
+/*-e/ 's,intZ,int/ Z,g'>c.c;cc/c.c/-Wno-implicit-function-declaration /-c*/
+```
+
+That is actually called via `system()`. But if you observe in
+[giljade.alt.c](2005/giljade/giljade.alt.c) the comment is quite different being
+just:
+
+
+```c
+/*echo/Line/%d;sed/-n/-e/ %d,%dp/%s>*/
+/*c.c;cc/c.c /-c*/
+```
+
+Why? Because in some platforms at least clang defaults to `-Werror` for some
+warnings: that's why the disabling of the warning in particular. But the change
+to make it compile with clang changed the output generated to merge the `int`
+and the arg in `main()` which is of course a big problem. Thus the additional
+`sed` command fixes the problem of `int` and `Z` becoming one word but somewhere
+in the process some of the generated code fails.
+
+What might the translation of the comment end up being? Here's an example:
+
+```
+system(" echo Line 2;sed -n -e 2,77p out> c.c;cc c.c -c ");
+```
+
+But of course the range of lines to print changes successively as the program
+goes through the file.
+
+Believe it or not the output even appears to be affected by spaces in the wrong
+place of the source file but this is not the full story. Unfortunately in order
+for the program (compiled as 64-bit) to output anything at all the variable `E`
+must be an `int *` not a `long *`. However the change that allows clang to
+compile it causes the output to not have spaces where necessary to successfully
+compile the generated output which is why the extra `sed` command shown above
+(which has a special way to input spaces). We do not know if the change from
+`long *` to `int *` also messes up the output but we suspect not because it
+works for gcc.
+
+Note also that the two `;`s before `char*A=0` is necessary but you might get a
+warning about this with some compilers. If it's removed you'll see something
+like:
+
+```sh
+sh: -c: line 0: syntax error near unexpected token `{F'
+sh: -c: line 0: ` echo Line 2;sed -n -e 2,77p out |sed -e 's,intZ,int Z,g'>c.c;cc c.c -Wno-implicit-function-declaration -c ;char A=0, _, R, Q,D[9999], r,l[9999],T=42,M,V=32;int E,k[9999],B[1<<+21], N=B+1234567,q=0,h=3,j=2,O,b,f,u,s,c,a,t,e,d;C(){F(h=N[3];(B[h]&&+memcmp(N,B+B[h],16));h=B[h]+4);B[h]||(B[h]=N-B,N=N+6);}main(intZ,char Y[]){char U=Z;int w=Y;'
+```
+
+or so, depending on the comment, when running the program on its output.
+
+Observe too that the `*` part of pointers have been removed! You also see the
+merge of `int` and `Z` as noted earlier. With the two `;`s this is not a
+problem.
+
+Cody will look at this all later on.
## STATUS: INABIAF - please **DO NOT** fix
It also will very likely segfault or do something strange if the source code
does not exist.
+This entry requires that `sed` and `cc` are in the path.
## [2005/mynx](2005/mynx/mynx.c) ([README.md](2005/mynx/README.md))
## STATUS: INABIAF - please **DO NOT** fix
@@ -2033,6 +2086,13 @@ help!
As a backtrace quine this entry is **SUPPOSED to segfault** so this should not be
touched either.
+## [2019/poikola](2019/poikola/prog.c) ([README.md](2019/poikola/README.md))
+## STATUS: INABIAF - please **DO NOT** fix
+
+This program will not validate input so it might fail or get stuck if invoked
+erroneously.
+
+
# 2020
## [2020/burton](2020/burton/prog.c) ([README.md](2020/burton/README.md))
diff --git a/tmp/author-wins.csv b/tmp/author-wins.csv
index 6861dca61..7d1c4e942 100644
--- a/tmp/author-wins.csv
+++ b/tmp/author-wins.csv
@@ -113,7 +113,7 @@ Larry_Jones,1990_scjones,
Larry_Wall,1986_wall,1987_wall,
Laurion_Burchall,1994_ldb,
Lennart_Augustsson,1985_august,1986_august,1996_august,
-Leonid_A._Broukhis,1993_leo,._Broukhis,1995_leo,
+Leonid_A._Broukhis,1993_leo,1995_leo,
Lord_Zarbon,2000_briddlebane,
Maarten_Litmaath,1988_litmaath,
Marcin_Ciura,2018_ciura,2019_ciura,
@@ -140,7 +140,7 @@ Nick_Johnson,2004_arachnid,
Nicolas_Ollinger,2001_ollinger,
Ondřej_Adamovský,2019_adamovsky,
Ora_Lassila,1989_jar.2,
-Oscar_Toledo_G.,2005_toledo,.,2006_toledo1,.,2006_toledo2,.,2006_toledo3,.,2011_toledo,
+Oscar_Toledo_G.,2005_toledo,2006_toledo1,2006_toledo2,2006_toledo3,2011_toledo,
Oskar_von_der_Luehe,1989_ovdluhe,
Paul_Dale,1988_dale,
Paul_E._Black,1989_paul,
@@ -156,7 +156,7 @@ Raphael_Meyer,2006_meyer,
Raymond_Cheong,2000_primenum,2001_cheong,
Robbert_van_Renesse,1984_mullender,
Robert_Heckendorn,1985_applin,
-Roemer_B._Lievaart,1987_lievaart,._Lievaart,1989_roemer,
+Roemer_B._Lievaart,1987_lievaart,1989_roemer,
Ron_McFarland,1996_rcm,
Sandro_Maffiodo,2014_maffiodo1,2014_maffiodo2,
Scott_Vokes,2018_vokes,