Merge pull request #1858 from xexyl/fubar89
This commit is contained in:
6 files changed
+49
-9
No files matched your search
+2
-1
@@ -38,7 +38,8 @@ include ../../var.mk
|
|||||||
|
|
||||||
# Common C compiler warnings to silence
|
# Common C compiler warnings to silence
|
||||||
#
|
#
|
||||||
CSILENCE= -Wno-implicit-function-declaration -Wno-incompatible-library-redeclaration
|
CSILENCE= -Wno-implicit-function-declaration -Wno-incompatible-library-redeclaration -Wno-implicit-int \
|
||||||
|
-Wno-deprecated-non-prototype
|
||||||
|
|
||||||
# Common C compiler warning flags
|
# Common C compiler warning flags
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -26,14 +26,17 @@ For more detailed information see [1989 fubar in bugs.md](/bugs.md#1989-fubar).
|
|||||||
### Try:
|
### Try:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./fubar 2
|
./try.sh # run on 1 - 7
|
||||||
|
|
||||||
|
./fubar.sh 2 # run via script
|
||||||
|
./fubar 2 # run directly
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Judges' remarks:
|
## Judges' remarks:
|
||||||
|
|
||||||
Run this with a single digit argument (or wait a long time and risk an infinite
|
Run this with a single digit argument (or wait a long time and risk an infinite
|
||||||
loop as described above).
|
loop as described in the [bugs.md](/bugs.md#1989-fubar) file).
|
||||||
|
|
||||||
The blank line at the beginning of the source is mandatory.
|
The blank line at the beginning of the source is mandatory.
|
||||||
Do you know why?
|
Do you know why?
|
||||||
|
|||||||
+2
-2
@@ -3,14 +3,14 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#define QQ 1
|
#define QQ 1
|
||||||
#define TT 1
|
#define TT 1
|
||||||
#define cc int main(c,v) int c; char **v;{char tt[12],qq[7]; int q=0,o=1,l=1,m=1;struct {int c;} f;
|
#define cc main(c,v) int c; char **v;{char tt[12],qq[7]; int q=0,o=1,l=1,m=1;struct {int c;} f;
|
||||||
#define ouroboros qq[6]='\0';tt[11]='\0';if(QQ==atoi(v[1])+1){(void)fprintf(stderr,"%s factorial = %d\n",v[1], TT);exit(1);}o=c+f
|
#define ouroboros qq[6]='\0';tt[11]='\0';if(QQ==atoi(v[1])+1){(void)fprintf(stderr,"%s factorial = %d\n",v[1], TT);exit(1);}o=c+f
|
||||||
#define x ;while(EOF!=(o=getchar())){if(l && q=='Q' && o=='Q'){l=0;(void)getchar();(void)fread(qq,6,1,stdin);(void)printf("Q %6d",atoi(qq)+1);}else
|
#define x ;while(EOF!=(o=getchar())){if(l && q=='Q' && o=='Q'){l=0;(void)getchar();(void)fread(qq,6,1,stdin);(void)printf("Q %6d",atoi(qq)+1);}else
|
||||||
if(m && q=='T' && o=='T'){m=0;(void)fread(tt,11,1,stdin);(void)printf("T %9d\n",atoi(tt)*QQ);}else {q=o;(void)putchar(o);}}exit(0);}
|
if(m && q=='T' && o=='T'){m=0;(void)fread(tt,11,1,stdin);(void)printf("T %9d\n",atoi(tt)*QQ);}else {q=o;(void)putchar(o);}}exit(0);}
|
||||||
cc ouroboros.c -o x
|
cc ouroboros.c -o x
|
||||||
#define zxc ;{/*
|
#define zxc ;{/*
|
||||||
cat ./ouroboros.c | ./x $1 > x1
|
cat ./ouroboros.c | ./x $1 > x1
|
||||||
if [ $? -ne 0 ]; then
|
if [[ $? -ne 0 ]]; then
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
mv x1 ./ouroboros.c
|
mv x1 ./ouroboros.c
|
||||||
|
|||||||
+3
-3
@@ -1,8 +1,8 @@
|
|||||||
#!/usr/bin/env sh
|
#!/usr/bin/env bash
|
||||||
# to run fubar in the 'proper' way
|
# to run fubar in the 'proper' way
|
||||||
|
|
||||||
# parse args
|
# parse args
|
||||||
if [ $# -ne 1 ]; then
|
if [[ $# -ne 1 ]]; then
|
||||||
echo "usage: $0 number" 1>&2
|
echo "usage: $0 number" 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -15,5 +15,5 @@ r fubar.c
|
|||||||
w ouroboros.c
|
w ouroboros.c
|
||||||
EOF
|
EOF
|
||||||
chmod +x ouroboros.c
|
chmod +x ouroboros.c
|
||||||
./ouroboros.c $1
|
./ouroboros.c "$1"
|
||||||
#rm -f ouroboros.c x1 x
|
#rm -f ouroboros.c x1 x
|
||||||
Executable
+30
@@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# try.sh - demonstrate IOCCC winner 1989/fubar
|
||||||
|
#
|
||||||
|
|
||||||
|
# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it
|
||||||
|
# this way allows us to have the user specify a different compiler in an easy
|
||||||
|
# way.
|
||||||
|
if [[ -z "$CC" ]]; then
|
||||||
|
CC="cc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
make CC="$CC" all >/dev/null || exit 1
|
||||||
|
|
||||||
|
# clear screen after compilation so that only the entry is shown
|
||||||
|
clear
|
||||||
|
|
||||||
|
fubar()
|
||||||
|
{
|
||||||
|
if [[ "$#" -ne 1 ]]; then
|
||||||
|
echo "$0: expected 1 arg, got: $#" 1>&2
|
||||||
|
else
|
||||||
|
read -r -n 1 -p "Press any key to run: ./fubar.sh $1: "
|
||||||
|
echo 1>&2
|
||||||
|
./fubar.sh "$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in $(seq 1 7); do fubar "$i" ; done
|
||||||
+7
-1
@@ -755,7 +755,13 @@ not strictly necessary but nonetheless more correct, even if not warned against.
|
|||||||
|
|
||||||
[Cody](#cody) got this to work with modern systems. The main issues were that an
|
[Cody](#cody) got this to work with modern systems. The main issues were that an
|
||||||
`#include` had to be added along with fixing the path (due to `.` not being in
|
`#include` had to be added along with fixing the path (due to `.` not being in
|
||||||
`$PATH`) to files referred to in the code.
|
`$PATH`) to files referred to in the code. The path problem was also fixed in
|
||||||
|
[fubar.sh](/1989/fubar/fubar.sh).
|
||||||
|
|
||||||
|
Cody also 'modernised' the script to use `bash` and fixed for ShellCheck. The
|
||||||
|
`if [ .. ]` was changed in the C code as well as the script.
|
||||||
|
|
||||||
|
Cody also added the [try.sh](/1989/fubar/try.sh) script.
|
||||||
|
|
||||||
|
|
||||||
## <a name="1989_jar.1"></a>[1989/jar.1](/1989/jar.1/jar.1.c) ([README.md](/1989/jar.1/README.md]))
|
## <a name="1989_jar.1"></a>[1989/jar.1](/1989/jar.1/jar.1.c) ([README.md](/1989/jar.1/README.md]))
|
||||||
|
|||||||
Reference in new issue
Block a user