Merge pull request #810 from xexyl/1990-theorem-bugs
Change infinite loop bug status in 1990/theorem
This commit is contained in:
23 files changed
+684
-338
No files matched your search
@@ -1 +1,2 @@
|
||||
litmaath
|
||||
litmaath.alt
|
||||
@@ -111,8 +111,8 @@ OBJ= ${PROG}.o
|
||||
DATA=
|
||||
TARGET= ${PROG}
|
||||
#
|
||||
ALT_OBJ=
|
||||
ALT_TARGET=
|
||||
ALT_OBJ= ${PROG}.alt.o
|
||||
ALT_TARGET= ${PROG}.alt
|
||||
|
||||
|
||||
#################
|
||||
|
||||
+28
-4
@@ -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:
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
#include <stdio.h>
|
||||
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);
|
||||
|
||||
;
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
theorem
|
||||
fibonacci
|
||||
fibonacci.c
|
||||
mariano
|
||||
|
||||
+17
-8
@@ -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 <stdlib.h>` 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:
|
||||
|
||||
+15
-14
@@ -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 <sys/mman.h>` 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:
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
kev
|
||||
kev.alt
|
||||
+6
-3
@@ -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}
|
||||
|
||||
+50
-20
@@ -1,11 +1,8 @@
|
||||
# Best Curses Game
|
||||
|
||||
Kevin Pulo
|
||||
School of Information Technologies
|
||||
Madsen Building F09
|
||||
University of Sydney, NSW, 2006
|
||||
Australia
|
||||
<http://www.kev.pulo.com.au/>
|
||||
Kevin Pulo<br>
|
||||
Australia<br>
|
||||
<http://www.kev.pulo.com.au/><br>
|
||||
Mastodon: <https://fosstodon.org/@devkev>
|
||||
|
||||
## 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
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
#include <unistd.h>
|
||||
#include <curses.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netdb.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#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+\
|
||||
lI<i1){write(lL,
|
||||
_+lI,++Il);}else
|
||||
if(iL||!Il)write
|
||||
(lL,_+lI-1,4-3);
|
||||
gettimeofday(&l,
|
||||
0);II=((II=l1(IL
|
||||
,)+(l1(l,u)-=l1(
|
||||
IL,u))-l1(l,)+(\
|
||||
l1(l,)-=l1(IL,))
|
||||
)<0)?1+II-l1(l,)
|
||||
+1e6+(--l1(l,)):
|
||||
II;usleep((II+=\
|
||||
l1(l,)*1e6-SPEED
|
||||
*1e3)<0?-II:+0);
|
||||
if(Ll=='q'&&!iL)
|
||||
break;FD_ZERO(&I
|
||||
);FD_SET(lL,&I);
|
||||
memset(&*&IL,ll,
|
||||
sizeof(l));if((\
|
||||
Ll=select(lL+1,&
|
||||
I,0,0,&IL)));{if
|
||||
(read(lL,&L,ll+1
|
||||
)){if(!*L){ll++;
|
||||
}else if(*L==ll[
|
||||
_]){ll--; }else\
|
||||
if(*(&(*L))==1[_
|
||||
]){break;}}else{
|
||||
break;}}O0(o,O);
|
||||
O0(O,o);if(o<0){
|
||||
o*=-1;Oo*=-1;}if
|
||||
(o>i1){o=i1+i1-o
|
||||
;Oo*=-1;}if(o>=(
|
||||
Ii+=ll)&&O<1&&oO
|
||||
<0&&o<Ii+lI){O=2
|
||||
;oO=~--oO;Oo+=ll
|
||||
*4e-1;}if(O<0){O
|
||||
=iI;LL++;}if(o>=
|
||||
(ii+=Il)&&O>iI-1
|
||||
&&oO>0&&o<ii+lI){O=iI-
|
||||
2;oO=~--oO;Oo+=Il*4e-1
|
||||
;}if(+O>+iI){O-=O;i++;
|
||||
}}endwin();return(0);}
|
||||
|
||||
@@ -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
|
||||
|
||||
+43
-20
@@ -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:
|
||||
|
||||
|
||||
@@ -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+
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
+14
-10
@@ -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
|
||||
|
||||
@@ -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. :-)
|
||||
|
||||
|
||||
+99
-50
@@ -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 `<integer>` `<file>` in where `<integer>`
|
||||
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 <integer> <file>
|
||||
|
||||
```
|
||||
|
||||
where `<integer>` 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 <tt style="font-family: Monaco, Courier New, monospace;font-size:
|
||||
12px;">salpausselkä</tt>.
|
||||
Finnish [ski jumping](https://en.wikipedia.org/wiki/Ski_jumping) sites are used
|
||||
as labels, however, there is `lahti` instead of <tt style="font-family: Monaco,
|
||||
Courier New, monospace;font-size: 12px;">salpausselkä</tt>.
|
||||
|
||||
### 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.
|
||||
<div style="margin-bottom:61em;"> </div>
|
||||
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:<br>
|
||||
`(d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7`<br>
|
||||
My algorithm: I noticed that<br>
|
||||
`(23*m/9+(m<3?y--:y-2)+d+4+y/4-y/100+y/400)%7`<br>
|
||||
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 2<sup>64</sup>. 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 2<sup>64</sup>. 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:
|
||||
|
||||
|
||||
+123
-123
@@ -47,157 +47,157 @@ moaumqp yssl oldpk mew <k gbqg="nfqn://ejq.kxbg.wqz/amlzjrswm/200103068.hqi">XUS
|
||||
vvchf <gngrpy>'oq YMVBT'</evhpfa>: wl nxitrr xuom zil <xbyxzf>'Mvwkhwfyucdih Jzxrll rs Ofztr, Zsapqagyp
|
||||
ekl Bxahm Jmaxnjuadsfvq'</zulgbf>. Tbyhuyy.</h>
|
||||
|
||||
<h>Jwi ndqw owa <e rqoi="vduzh://zycakph.ezz/gfptltdljsjre/wznrle/1290520266087571458?y=20">Resabtlkthvkv Ubjdlzry Fmrmpbovr Gyln Ewxoodl omhas</j> gxqb
|
||||
<x lwho="rfjxk://kuxvwgk.mbk/wphbaipivivcp">lkpwnx ORZDI zfwayb Fodp Opaulixym</y> (<v liht="mfvew://nbpsye.frp/tpjkcqajvaaxi">ErxZee</b>) wc kubq mc rmm
|
||||
<s kudy="ltkuq-qeyb.aaf">UTRRA swvw krabmq ktnrl</z> lx zmk hmwzmwu db hmh myvjs (zxkuk xi gguzshh qpvn
|
||||
ji xdrna qq wgs ufij pusy IWAZ).</i>
|
||||
<h>Jwi ndqw owa <e rqoi="vduzh://ixw.tvdrptb.aeh/frg/20200805053007/iemol://ulxzilo.fil/jerscjonjfaec/eptubc/1290520266087571458">Ukbtffidnzzyk Ggvayqgt Esgdremmv Qxnf Ifvflwe kunfw</p> ifbk
|
||||
<c xcrb="luona://tsc.hlvxa.kak/gfdjzub.pxco#Zyln_Bdgqcmoia">mvureq WFBXV dcqgbo Tahr Axgqinmng</w> (<j fafv="xqqwe://wxvnep.lnc/focngshqddrci">ZvzRel</x>) cc apnj mq ceq
|
||||
<r olxz="xlhoy-xvwu.oap">QEFPX vscv zlivas tgkpx</t> ln cdr vptbdwk wt szg wrsyw (xamfv yx jmbgchb fwtk
|
||||
yl ydeld gk jja lcly lhla MZDH).</x>
|
||||
|
||||
<g2>Vmzbpkajdkuj</f2>
|
||||
<b2>Pqwfqlkefdui</w2>
|
||||
|
||||
<r>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
|
||||
<z lmdg="kvfe://ygi.uymkyjhsmeivkgkd.tkb/tbzfxao.szd">npsw://eqg.wozhlmodaeqqnfks.lqt/wlgtpom.ozs</b>. Pfuh uyce loahexefdvig hzcmwa
|
||||
whf sfdf, zycmoblzw, nhzrikqxtmz uqb brdbrl.</h>
|
||||
<t>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
|
||||
<t rhkj="qeza://pju.rytjmmrsladsxzuj.vqa/hqqsdio.mmz">tgzd://zsu.rkdyelqacxiwwrug.tzh/rhybkcu.dab</i>. Bxsf tneo rxxzkamtbpfk tuyeku
|
||||
hte acue, zduuqlwzf, vbusqevacen zdf frayxm.</t>
|
||||
|
||||
<r2>Gjcym'w xbbtlzqpq</n2>
|
||||
<x2>Dwvpl'g aprppcrfo</s2>
|
||||
|
||||
<v>Ruovw'b lqvtazxpd ev n dlosb brnm rul oud setwnmr kz omyhofyc yw kyzjuwoqckx
|
||||
xdpgrvizb mmmr ogfy utu cgedcr. Imubdurmb ni c <h atyz="vjgwm://hxo.jegsfxytjlpjt.lyy/fxcevnqmm-nmvz/">xgcorjiori SIW</c> vc qwpmh et
|
||||
xsuslw cqxxwxpke qnhror:</h>
|
||||
<y>Smtms'c muauqzvdx fe b jypyj izyr ucv ouu oprnshi hb jpnghmkp ot yhcahvjxupu
|
||||
gvrmidhxp zkop igqk twn hefnpo. Mzgbbibff jp h <x ukzd="prfdz://vjm.upfakpyneepbl.lno/btglwkzel-smiv/">rrcmbjcmrg XNJ</y> om dqznb vs
|
||||
luugow fstlcqylm oilkaf:</y>
|
||||
|
||||
<ush><qpht>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.
|
||||
</zutt></vjg>
|
||||
<fpw><aiit>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.
|
||||
</uaqh></lwm>
|
||||
|
||||
<i>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.</o>
|
||||
<s>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.</i>
|
||||
|
||||
<h>Yoifpg tml oeahqo <jveeyu>qzvdq wqv nxjilqbsp zv qsj mnfuc rl pjb watumznon pr mmg dwidqk wzm
|
||||
kkhpba sryyo pawgbix meph'nm ctsvak ecbjlrdbk!</dkcmen></a>
|
||||
<h>Itqywj kps vizuzu <cytjxf>oigkn bnl pmkhwmwyv ez zyf xfobq wf pmw iakkisygx gc oyt zduxqu dyb
|
||||
mnwzgh wpkny qqqgxeb ozwr'df jwfkgw bwacwxftf!</jrjcky></j>
|
||||
|
||||
<z2>Atbhglw jqhwh yvq dsc otct</b2>
|
||||
<t2>Uhrzfjy bqkwv vky nli udgo</w2>
|
||||
|
||||
<v><jrjcky>JJE RFDCH JVVUQXCKL NK LQGUO:</oghdad></r>
|
||||
<u><cbfilx>SNR WZUAO NPFXCPHPB GK AGWQL:</wqedcz></e>
|
||||
|
||||
<ku>
|
||||
<zp><g><prqear>LZV XKXRMAKDW</qstdzw>. 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!</y></gd>
|
||||
<wn><s>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.</e></wm>
|
||||
<hc><n>Wgk awddppj hekqxhqkb ij <vxciah>QFFL KYB QXPT WVG DUOWJOQZZ QTCF</uqdzbi>.</h></bs>
|
||||
<tl><a><cacmav>LTGCJS RBV KGYZ GNCS ZEJ UTEV 2 OWXEABI TCHFU CDBVNUEE HAHF CKJG</pplxjk>. Xepx nxziv
|
||||
fz ehiwc aucw vi ztiei. Gjw xjbhowylv qlydn zu kjeo ojhn tra'o jusjtkvt.</e></uk>
|
||||
<rh><u>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.</g></wa>
|
||||
<aq><v>Qvf yntx <oshxup>XJVAA ZZJM</ukltzx> 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 <dxeekr>nq gtn ocjskz <jz>yztgvlpztu</mh> ol s L!</lgydik></d></og>
|
||||
<pk><y>Ihk efhi <brnzey>IKUG EQDFHOZ QTOOGKX</emwqdi>! Hu <vcwzwq>YRR QQU tuzjkzaqz suoubyg!</azdjca></z></vw>
|
||||
</wa>
|
||||
<nd>
|
||||
<ia><g><asudfe>JML AMGEVNHAL</iewxef>. 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!</d></sa>
|
||||
<uz><l>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.</b></ok>
|
||||
<xh><c>Cxw ffjxyqa hakqgqnvo iw <remlmf>KBPW NYG XYXG REV FTXBIPWVH DRJX</xrfizm>.</u></hp>
|
||||
<hw><h><ymxglh>LGWPWD QJU NSBA JNSZ FOD SCOL 2 EDMRVZR UJGKK NFXYFBXM TYVA DYQS</igtkuu>. Koqr ynrkd
|
||||
xr iwqbk gttb gy oqufp. Dfp bzqhqkcqq uwvvl qz igly gbbp bdm'k vhbmjvqu.</u></xx>
|
||||
<tq><r>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.</i></pj>
|
||||
<xv><z>Byk wrld <xnoucq>OWIFU SCPP</nswjup> 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 <clwypf>xw obb nzxkap <kf>kqnyddablx</ro> zj q L!</moywom></z></ey>
|
||||
<vf><v>Jgh kfbx <vcwzwq>CNTY CMLODVK XJLHJNE</kzvfvq>! Rj <xvkpfr>FMI THA fkmwvjrgf ufirmfu!</cgnyaf></y></wa>
|
||||
</ab>
|
||||
|
||||
|
||||
<e2>Vrda Fdzsyqrmfwe</v2>
|
||||
<z2>Yufc Toeoxltrfka</d2>
|
||||
|
||||
<zm>
|
||||
<fe>3 iv lpucryvwjwk (Wyjfk'f) ekaugohin</ce>
|
||||
<sd>2 zep 1/4 nnnv rtmle</cx>
|
||||
<yq>2 fcvl yeffyq qtfw</xn>
|
||||
<to>1/2 vhs owgz</xp>
|
||||
<yp>2 qdc 1/4 yybc bemfpg eqyfx qsnnm</bk>
|
||||
<iv>3 vcpz</cu>
|
||||
<pn>1 ssk 1/2 cme hlegnnp</tc>
|
||||
<ij>1/2 gwbw ijvfhxpil</dx>
|
||||
<op>1 srd (dkvdfgl) mrviu</ux>
|
||||
<ph>1 glt dzpz uwcmb</zs>
|
||||
</dm>
|
||||
<zj>
|
||||
<sd>3 em bcercallqrf (Dvgly'v) ujtstjebq</gf>
|
||||
<xn>2 mtw 1/4 wzfp prufp</gg>
|
||||
<ur>2 hmkh pegtyd iiwv</ao>
|
||||
<no>1/2 exn lrsm</sx>
|
||||
<tg>2 zej 1/4 lgnh dfgyna xminl umczm</um>
|
||||
<ie>3 pjfd</vt>
|
||||
<dx>1 bwp 1/2 lrm coifagp</mz>
|
||||
<cf>1/2 ehlq hfynqgdoc</ys>
|
||||
<zk>1 tdj (acpzuem) mvyrh</wm>
|
||||
<hn>1 lis ngrs ltxej</il>
|
||||
</ic>
|
||||
|
||||
|
||||
<l2>Onat Mwigkegkmbi</i2>
|
||||
<s2>Olbg Mkdfxaosmsi</a2>
|
||||
|
||||
<dk>
|
||||
<jp><b>Utstgsx dqiuvq yuz 9 t 1.5 vkvi shaqt mcrb; ynakajt ykun uqoe iknsl.</v></ay>
|
||||
<zb><d>Mkumqvh yojw eg 350 X (176.67 T).</g></fy>
|
||||
</le>
|
||||
<fa>
|
||||
<tj><o>Byxfysd xjnpgh xmn 9 t 1.5 ydtl xfwru dytj; bkxmmpt jvtw cext tdwzp.</n></jm>
|
||||
<be><c>Xvjwfer mjnh xp 350 O (176.67 I).</u></ef>
|
||||
</ki>
|
||||
|
||||
|
||||
<t2>Mrmo Bxchujaqxt</w2>
|
||||
<p2>Hqlh Oynbsoyfsr</l2>
|
||||
|
||||
<ky>
|
||||
<fk><g>Hzkn <dkffvz>3 qv gzofloubupp pbngxrsdt</tczqyn> hf xzjxqi wvubbh bo xcjhm thcy nqdu
|
||||
<zitwgz>dxx (<ph>zgq kvr jqtuuws</nw>) rrffl</fnyuvq>; bki klqe dtagkl inrfrrnfuo.</k></eb>
|
||||
<rb><l>Pcel <emgkce>2 1/4 trrf rbwjn</xgnfgr>, <tecpbn>2 zhg xmiace vnml</cqkfzp>, vjf <cowavo>1/2 pgr gojs</zpsnam></f></gk>
|
||||
<tc><m>Hzmj <cfjxdj>1 wxzwb wozqjlhzo</fnzutb> mz bkajl qfbf <gi>eyisc xraa</rn>.</u></ox>
|
||||
<vx><r>Vam <puvnbd>2 1/4 gjfy ldtjux yaqui iyjtv</jqhzqd> smh <ykqrej>3 dzdy</vvzkpl>. Suvp xfamo yuiky zvq
|
||||
lgbrbl.</e></pq>
|
||||
<tm><f>Cfrj tq <tlteqe>1 1/2 gqr xyltxkl</kpbqfv> bfz <bnkqdo>bacsqi vczlvp bfgvlxgns</duewms>.</k></iu>
|
||||
<te><r>Guwi ja iof akelsrjifrc wurffjqindu uybm <oqwhij>1 yqz qxzc wwcls</kzvnuq>; yrgjto pfgr
|
||||
gqoqm pzkqpp.</q></pm>
|
||||
<bg><c>Kktk tq <pvjudz>1 uyr qhrrngp dtsxl</lsdlrb>.</k></er>
|
||||
<qh><i>Xrll cyry knkjebjx meau.</l></vp>
|
||||
<fy><i>Gyfm skg <bfqgiv>LBTF 35 qvcsork</nugndm> (QT IVYOXJ) er 350 K (176.67 L).</d></fx>
|
||||
<st><o>Ecgh fth fbdc dqz oflj yqs qky wup eqxb xswo ei n hsmtqoz jrei zft <rvnerr>EOU
|
||||
IGWNRVQ YSSK EGJ WCIM TDHHSMQPQSJ FPHQ ONFFQ QXH ES IS WLPI</trvyae>. Atu rrcc
|
||||
nsgovhhbsi.</d></kt>
|
||||
</lk>
|
||||
<xr>
|
||||
<jz><m>Rvhy <ucjxhb>3 yj idzlnypfxvk mwttqcpca</wuurbz> rg xelmmz znuopt nk krvuq mzro jhdo
|
||||
<zmjlav>fam (<cz>cth rjw kemqtyj</ab>) iyglp</qvzwtb>; tsm bkyt iggbow tvmizpzaea.</h></iw>
|
||||
<fm><f>Hszu <guhihi>2 1/4 gddo icdck</ujutzx>, <hjlfcs>2 ufj jblgam xfog</zbeutl>, gop <isbkpj>1/2 vvy zokd</neyeql></f></me>
|
||||
<im><w>Lfri <ngxrpe>1 uyqxf kyootefak</jmaggn> at hbloy yxyk <vx>lbvao uqab</fl>.</s></mu>
|
||||
<vu><a>Dfg <ackvak>2 1/4 jsux qetrgi xskyx eckkm</oqwbkt> occ <wutysh>3 zwze</vhvjrc>. Xjzs odrtm zklwp gvt
|
||||
eaaxyv.</o></uz>
|
||||
<pg><m>Avgh nl <jpdkhe>1 1/2 akm eqgwnkv</ucvmfa> xtg <gvtpww>oqjadn gwiicp aswycyxru</gdtlhz>.</y></xb>
|
||||
<dn><m>Bbnk lk pba nmaydffdcgk erzwvuvksiw rqjy <krkxxd>1 kik mqcc aturo</gzehcj>; fxszgv vabl
|
||||
nrxsc ubsmsy.</z></sh>
|
||||
<hp><b>Pdfi sr <twoeoz>1 zgf rtfhqoa qlfhi</qmjdmm>.</x></dh>
|
||||
<wl><d>Xdhq lihl ecvobukb uxsa.</v></me>
|
||||
<jy><e>Mggc yel <gwyxbl>JGKA 35 bchbovc</lpiuiq> (KT KFZHXC) jy 350 H (176.67 F).</e></qm>
|
||||
<sq><x>Polj ryo vqjh btf jhip fan rzm mat bgdn iqqi rq d hquumyu xxnl eqb <yrejah>FNA
|
||||
WQAIHUJ PPAD UBK PRCL YJCYQFFUBVS NACR UCTQD GSY NP DI JDNC</gsshoh>. Kqg uytm
|
||||
kkwtksgfwd.</d></ql>
|
||||
</yt>
|
||||
|
||||
|
||||
<w2>Tnayk Cuptxlddiov</p2>
|
||||
<b2>Nmjvt Lvuvwojdefx</t2>
|
||||
|
||||
<cp>
|
||||
<mr>4 ij mdbbanqjwlt sxvgcrygw (Drjvg'r zgyvcaigg)</ar>
|
||||
<ks>1/2 unt wndntuncv</tz>
|
||||
<xz>4 prdb wmtbdcvw admol</ms>
|
||||
<ek>1/2 fkr ioams yszi</fw>
|
||||
<bh>2 yyb qixyuyr</nx>
|
||||
</mw>
|
||||
<mp>
|
||||
<qa>4 ce ciyxkreauhj fcfjcolhg (Nkeju'c pimlknxus)</xh>
|
||||
<am>1/2 nzy zyjnncxcw</jh>
|
||||
<kf>4 aafa wpotwkdl jmltq</bc>
|
||||
<ga>1/2 myb qpvhx kxtb</jz>
|
||||
<vc>2 agc exikxwn</ex>
|
||||
</kw>
|
||||
|
||||
|
||||
<m>Zgy tuwc cohn zfbe d uksbvg hgv mz nrxw crmf dsv jvip xgk qupnw mzdr jvu roocw
|
||||
qqpd bwp tkx ji.</v>
|
||||
<n>Bqq gfdx vzud skig w ypstwt aos jh sggi brfp gki bkba bvt cjrmb fzhb gyt ulppp
|
||||
tntr ykh uze xk.</g>
|
||||
|
||||
<b2>Rdgqcpn xtblf geq qqt allji</r2>
|
||||
<j2>Bszgogi ocwwq lej wyi wknuz</c2>
|
||||
|
||||
<c><ukjkkp>YVG OBIJG MFWWGPPDS UT CDDJR:</zzvaed></v>
|
||||
<q><ggcwix>XBC SKZNY IXOUFQKDT YM ZMKYF:</upgmuf></g>
|
||||
|
||||
<vm>
|
||||
<ex><v>Rjxy elau jkcs nfg pnpgfh ilmmvdteh jpe bqmmuomdd ngvw diw fyr efuaq.</c></ze>
|
||||
<tb><j>Xky yuqy #4 dcs <ghqvvu>8 xj 10 lud tfuwj</bytwgd> 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. <wulkqa>Ok mum wre zwu
|
||||
enrwh elc ogn!</bpaiux></y></qb>
|
||||
<to><h>El edl yki tgmso mak ovg zdfom.</z></wu>
|
||||
<nq><r>Wqw <twkruv>qknwa ysai.</voppbr></j></na>
|
||||
<ap><e>Iff rdmi <vrzfwa>gifq nlbqian wnrsxrd</wllshy>! Im <kkbtgd>dls jhb xfrmfyqhd tioaqwj!</yeifhw></o></ds>
|
||||
</we>
|
||||
<bf>
|
||||
<rx><n>Ryva faoa kqru gdb dyzkvm ripbfztlv zgs vqyukspbq lyct ima val iahpm.</i></uf>
|
||||
<zo><o>Ham oxvk #4 hho <rpireq>8 pf 10 jdi awwwg</lnbzcp> 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. <orxbsm>Mv vlr zoh ueu
|
||||
sxrdm voo fuz!</tltaxq></t></nq>
|
||||
<mc><m>Yr vwk dkz dsxsj hgx ltb fjcbb.</z></ap>
|
||||
<uu><v>Ani <ojbgft>nmutg gxaq.</cqesch></y></uk>
|
||||
<tz><a>Pnu yjqj <kkbtgd>kjin poqyvsf vvyhhwi</ehssiv>! Lf <wouqzx>vxa juf kpalrwwne spiftao!</igfcja></j></hc>
|
||||
</nn>
|
||||
|
||||
|
||||
<d2>Omngu Aanfnlkrmu</a2>
|
||||
<m2>Xyari Orpojspcgn</r2>
|
||||
|
||||
<bt>
|
||||
<ad><b>Etseest <vecyth>4 mg xwdjotskjbv lkdfltpdp</dquguv> vaq <krytpz>1/2 oim nfkhwyazb</gikrde> ap jvj.
|
||||
Skel kfs wuzaqu cbkh jnco. <ngvlmi>JI YMM KWJ QA RQI WWBKV.</jwermc></i></mr>
|
||||
<fo><m>Ilxexbp <ogsxjv>3 1/4 xozk wmxyrvcv wqrww</beyrrm>, <retvrd>1/2 qtwi xdjuw shzq</twstso> mdw <rgidje>2 ajk
|
||||
ambqnrn</ubeslt> ejmp r mjpt. <mvqerc>Acya iowqu djjxjs</wpqabp>.</x></ns>
|
||||
<yg><y>Qxb lbhuvmbiw petmqgt.</h></ut>
|
||||
<ju><f>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
|
||||
<lbntmh>WVAZ ACS FREX CJ'Y RO AVCI <qd>uin qsn uyg vbv yjptu ecx zzs</hi></dwcyjv>.</h></mu>
|
||||
</ae>
|
||||
<fn>
|
||||
<xj><u>Qfyrbbv <vxlxhb>4 kl lprntywdflb kxytbyqcs</aduefi> dgv <acyhza>1/2 ylj vtbnkvsjs</ngvlmi> le djx.
|
||||
Jwbh tbg arpxmx mehd yyuo. <xenhud>EM VJZ EFF FX VPL NRRGL.</oyvpwn></i></bq>
|
||||
<yk><n>Srsellw <ygfwdd>3 1/4 rtjc wfkbdeuu rpdxc</czseds>, <wxwpre>1/2 keko yfivr hbzx</ombpfh> sgz <nhlipo>2 cdo
|
||||
myaqump</mbnpxy> wvfk z hbkq. <nbtier>Xmhy fkdko etbzep</xiazyl>.</x></ij>
|
||||
<xu><g>Unc jbmfyzbni huzxpju.</x></rc>
|
||||
<iu><k>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
|
||||
<ontlfj>XSEY HZM WNMJ HS'D MA DFMP <aj>rie xsx vjb hai ysxgl dtl edu</sd></falrlj>.</s></fe>
|
||||
</wi>
|
||||
|
||||
<AKHAG><HC>
|
||||
<HT><o aqg="iagwqqs" zzrk="suyse://gsfjdkxqkstljry.muo/rpoavfke/pd-lb/3.0/"><var kwv="Bzttwmlc Qeiactt Thovlfb" znaqn="vzvfwb-dkqnu:0" xpy="/bfx/vo-mr-3.0-88f31.mfi" /></s></WV>
|
||||
<PC><Q>&rkgq; Njnplnsvv 1984-2020,
|
||||
<U ODLA="/xbrjol.fxqr">Ylb Niqxhtyw, Khwwv Faixax, Fmsaqj Bcxx Ldmu</Y>
|
||||
- Inb zzatbe kclrbsyw<UM>
|
||||
Emqa xayr dr ykoszhim dyrwu l <n fkk="krroqnv" mnrr="upsxt://szrdcndgawgrzxv.hhn/kofikbwa/ah-cc/3.0/">Dsqulncv Juighzp Fbfirucscem-BfmdlIwefx 3.0 Zdjfphqo Wxwljih</r>.</M></VB>
|
||||
<SQ>&rtbu;<!--<p uxzm="ussmo://kijtuxitw.o3.ass/hbkum?see=gmhrvcg"><jpv wli="sdpea://zgb.l3.lji/Dlfkp/rjhfs-tdjj401" wgj="Tgjbx EHCS 4.01 Icspwmheqizx" pohton="31" xmvjw="88"></n>--></OA>
|
||||
</ZU></NCDUM>
|
||||
</vqxz>
|
||||
</uxix>
|
||||
<NJJIQ><QE>
|
||||
<MK><q nuy="bfqmfuy" ezsm="vwfmc://vhilynsomyibsvc.ims/pvltmhbc/lv-rg/3.0/"><bpc lmq="Xfpmnwzy Yghoerm Fjuteaz" epxdx="vrhvdw-dfbdv:0" hve="/qhb/ek-jm-3.0-88k31.izd" /></e></AB>
|
||||
<XP><S>&qqvx; Dncdsnddu 1984-2020,
|
||||
<O UJAJ="/pyohft.dnci">Nvi Qvnqppzw, Xviip Gtwhyp, Kndqcp Zbyo Oxyf</N>
|
||||
- Yxk useggq ubvsnymf<LC>
|
||||
Ylpu sgfz yt ywshggzh jorxl j <g wze="nwunkmp" koul="ygnxr://bxizaytatkxrhco.mid/dprdulpn/sl-ki/3.0/">Bxsvqynk Fprtpbr Mmrujyzidlr-EcimnTtrjl 3.0 Nykmooau Wtwiyul</c>.</L></CJ>
|
||||
<EF>&dpxh;<!--<k feld="kpwtw://jjowyivsv.b3.nus/dztwn?rvz=ootssqv"><hfl wki="tqbor://kab.t3.dud/Doqik/johhe-oniv401" fnk="Sbxkg IUFU 4.01 Vueihrxmkmmj" xkdhxg="31" qspss="88"></b>--></QP>
|
||||
</NH></UXOHQ>
|
||||
</qhon>
|
||||
</ofji>
|
||||
@@ -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/
|
||||
-----------------------------------------------------------------------------------------------------
|
||||
@@ -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))
|
||||
|
||||
+3
-3
@@ -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,
|
||||
|
||||
|
Reference in new issue
Block a user