Add alt code to 1986/hague - fgets()
The reason it is in alt code is because one of the forms of input (see
below) will, although print out correct output, segfault after
outputting the text. That is when one does something like:
echo foo | ./hague.alt
Whether it might be worth making it the entry itself with a note in the
Makefile and README.md and bugs.md (because it does print out correct
output) can be determined later - or not.
This change required several files to be updated besides the new file
hague.alt.c.
This commit is contained in:
1 parent
4836ed4622
commit
c1c8197c34
8 files changed
+114
-10
No files matched your search
@@ -1,3 +1,4 @@
|
||||
hague
|
||||
hague.alt
|
||||
hague.orig
|
||||
prog.orig
|
||||
+2
-2
@@ -114,8 +114,8 @@ OBJ= ${PROG}.o
|
||||
DATA=
|
||||
TARGET= ${PROG}
|
||||
#
|
||||
ALT_OBJ=
|
||||
ALT_TARGET=
|
||||
ALT_OBJ= ${PROG}.alt.o
|
||||
ALT_TARGET= ${PROG}.alt
|
||||
|
||||
|
||||
#################
|
||||
|
||||
+27
-3
@@ -9,9 +9,9 @@ UK
|
||||
make all
|
||||
```
|
||||
|
||||
|
||||
NOTE: this entry uses `gets()` so you might get a warning about this when
|
||||
compiling and running this program with some systems.
|
||||
There is an alternate version which uses `fgets()`. See the Alternate code
|
||||
section below as well as the [bugs.md](/bugs.md) file for more details as to why
|
||||
it is worth having as an alternate version.
|
||||
|
||||
## To run:
|
||||
|
||||
@@ -29,6 +29,30 @@ International Obfuscated C Code Contest
|
||||
Jim Hague
|
||||
```
|
||||
|
||||
Also try:
|
||||
|
||||
```sh
|
||||
echo IOCCC | ./hague
|
||||
```
|
||||
|
||||
### Alternate code:
|
||||
|
||||
Whereas with some entries the change to `fgets()` (see the [FAQ](/faq.md) for
|
||||
details on why this has been done) can be done in the original code this entry
|
||||
is more complicated in that although both forms of input show the correct
|
||||
output, one form segfaults after the output.
|
||||
|
||||
If you wish to use this alternate code, do:
|
||||
|
||||
```sh
|
||||
make alt
|
||||
```
|
||||
|
||||
Use `hague.alt` as you would `hague` above. As for which form will segfault
|
||||
after outputting the text it is when text is piped into the program. Again see
|
||||
the [bugs.md](/bugs.md) file for more details.
|
||||
|
||||
|
||||
|
||||
## Judges' remarks:
|
||||
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
#define DIT (
|
||||
#define DAH )
|
||||
#define __DAH ++
|
||||
#define DITDAH *
|
||||
#define DAHDIT for
|
||||
#define DIT_DAH malloc
|
||||
#define DAH_DIT fgets
|
||||
#define _DAHDIT char
|
||||
_DAHDIT _DAH_[]="ETIANMSURWDKGOHVFaLaPJBXCYZQb54a3d2f16g7c8a90l?e'b.s;i,d:"
|
||||
;main DIT DAH{_DAHDIT
|
||||
DITDAH _DIT,DITDAH DAH_,DITDAH DIT_,
|
||||
DITDAH _DIT_,DITDAH DIT_DAH DIT
|
||||
DAH,DITDAH DAH_DIT DIT DAH;DAHDIT
|
||||
DIT _DIT=DIT_DAH DIT 81 DAH,DIT_=_DIT
|
||||
__DAH;_DIT=DAH_DIT DIT _DIT,81,stdin DAH,_DIT[strlen(_DIT)-1]='\0',_DIT!=NULL;__DIT
|
||||
DIT'\n'DAH DAH DAHDIT DIT DAH_=_DIT;DITDAH
|
||||
DAH_;__DIT DIT DITDAH
|
||||
_DIT_?_DAH DIT DITDAH DIT_ DAH:'?'DAH,__DIT
|
||||
DIT' 'DAH,DAH_ __DAH DAH DAHDIT DIT
|
||||
DITDAH DIT_=2,_DIT_=_DAH_; DITDAH _DIT_&&DIT
|
||||
DITDAH _DIT_!=DIT DITDAH DAH_>='a'? DITDAH
|
||||
DAH_&223:DITDAH DAH_ DAH DAH; DIT
|
||||
DITDAH DIT_ DAH __DAH,_DIT_ __DAH DAH
|
||||
DITDAH DIT_+= DIT DITDAH _DIT_>='a'? DITDAH _DIT_-'a':0
|
||||
DAH;}_DAH DIT DIT_ DAH{ __DIT DIT
|
||||
DIT_>3?_DAH DIT DIT_>>1 DAH:'\0'DAH;return
|
||||
DIT_&1?'-':'.';}__DIT DIT DIT_ DAH _DAHDIT
|
||||
DIT_;{DIT void DAH write DIT 1,&DIT_,1 DAH;}
|
||||
+2
-2
@@ -4,7 +4,7 @@
|
||||
#define DITDAH *
|
||||
#define DAHDIT for
|
||||
#define DIT_DAH malloc
|
||||
#define DAH_DIT gets
|
||||
#define DAH_DIT fgets
|
||||
#define _DAHDIT char
|
||||
_DAHDIT _DAH_[]="ETIANMSURWDKGOHVFaLaPJBXCYZQb54a3d2f16g7c8a90l?e'b.s;i,d:"
|
||||
;main DIT DAH{_DAHDIT
|
||||
@@ -12,7 +12,7 @@ DITDAH _DIT,DITDAH DAH_,DITDAH DIT_,
|
||||
DITDAH _DIT_,DITDAH DIT_DAH DIT
|
||||
DAH,DITDAH DAH_DIT DIT DAH;DAHDIT
|
||||
DIT _DIT=DIT_DAH DIT 81 DAH,DIT_=_DIT
|
||||
__DAH;_DIT==DAH_DIT DIT _DIT DAH;__DIT
|
||||
__DAH;_DIT=DAH_DIT DIT _DIT,81,stdin DAH,_DIT[strlen(_DIT)-1]='\0',_DIT!=NULL;__DIT
|
||||
DIT'\n'DAH DAH DAHDIT DIT DAH_=_DIT;DITDAH
|
||||
DAH_;__DIT DIT DITDAH
|
||||
_DIT_?_DAH DIT DITDAH DIT_ DAH:'?'DAH,__DIT
|
||||
|
||||
Reference in new issue
Block a user