From 7ecd9a951450205c2f9c3cd8ef3d676653598299 Mon Sep 17 00:00:00 2001 From: Landon Curt Noll Date: Wed, 21 Sep 2022 03:03:53 -0700 Subject: [PATCH] Update & reformat 1987 in 1984 style --- 1987/1987.tar.bz2 | Bin 9981 -> 29197 bytes 1987/Makefile | 291 ++++++++++-- 1987/biggar/Makefile | 603 ++++++++++++++++++++++++- 1987/biggar/hint.html | 44 -- 1987/biggar/{hint.text => hint.txt} | 4 + 1987/biggar/index.html | 203 +++++++++ 1987/biggar/orig.Makefile | 32 ++ 1987/heckbert/Makefile | 606 ++++++++++++++++++++++++- 1987/heckbert/heckbert.c | 7 +- 1987/heckbert/heckbert.orig.c | 18 + 1987/heckbert/hint.html | 25 -- 1987/heckbert/{hint.text => hint.txt} | 8 + 1987/heckbert/index.html | 190 ++++++++ 1987/heckbert/orig.Makefile | 30 ++ 1987/hines/Makefile | 605 ++++++++++++++++++++++++- 1987/hines/hines.c | 4 +- 1987/hines/hines.orig.c | 19 + 1987/hines/hint.html | 29 -- 1987/hines/{hint.text => hint.txt} | 8 + 1987/hines/index.html | 195 ++++++++ 1987/hines/orig.Makefile | 30 ++ 1987/index.html | 187 ++++++++ 1987/korn/Makefile | 602 ++++++++++++++++++++++++- 1987/korn/hint.html | 56 --- 1987/korn/{hint.text => hint.txt} | 4 + 1987/korn/index.html | 211 +++++++++ 1987/korn/orig.Makefile | 30 ++ 1987/lievaart/Makefile | 615 +++++++++++++++++++++++++- 1987/lievaart/hint.html | 36 -- 1987/lievaart/{hint.text => hint.txt} | 7 + 1987/lievaart/index.html | 202 +++++++++ 1987/lievaart/lievaart.c | 17 +- 1987/lievaart/lievaart.orig.c | 20 + 1987/lievaart/lievaart2.c | 23 +- 1987/lievaart/lievaart2.orig.c | 25 ++ 1987/lievaart/orig.Makefile | 33 ++ 1987/orig.Makefile | 77 ++++ 1987/rules.html | 312 +++++++++++++ 1987/wall/Makefile | 603 ++++++++++++++++++++++++- 1987/wall/hint.html | 35 -- 1987/wall/{hint.text => hint.txt} | 4 + 1987/wall/index.html | 195 ++++++++ 1987/wall/orig.Makefile | 30 ++ 1987/westley/Makefile | 602 ++++++++++++++++++++++++- 1987/westley/hint.html | 23 - 1987/westley/{hint.text => hint.txt} | 8 + 1987/westley/index.html | 192 ++++++++ 1987/westley/orig.Makefile | 30 ++ years-spoiler.html | 78 ++-- years.html | 79 ++-- 50 files changed, 6777 insertions(+), 510 deletions(-) delete mode 100644 1987/biggar/hint.html rename 1987/biggar/{hint.text => hint.txt} (97%) create mode 100644 1987/biggar/index.html create mode 100644 1987/biggar/orig.Makefile create mode 100644 1987/heckbert/heckbert.orig.c delete mode 100644 1987/heckbert/hint.html rename 1987/heckbert/{hint.text => hint.txt} (83%) create mode 100644 1987/heckbert/index.html create mode 100644 1987/heckbert/orig.Makefile create mode 100644 1987/hines/hines.orig.c delete mode 100644 1987/hines/hint.html rename 1987/hines/{hint.text => hint.txt} (85%) create mode 100644 1987/hines/index.html create mode 100644 1987/hines/orig.Makefile create mode 100644 1987/index.html delete mode 100644 1987/korn/hint.html rename 1987/korn/{hint.text => hint.txt} (98%) create mode 100644 1987/korn/index.html create mode 100644 1987/korn/orig.Makefile delete mode 100644 1987/lievaart/hint.html rename 1987/lievaart/{hint.text => hint.txt} (91%) create mode 100644 1987/lievaart/index.html create mode 100644 1987/lievaart/lievaart.orig.c create mode 100644 1987/lievaart/lievaart2.orig.c create mode 100644 1987/lievaart/orig.Makefile create mode 100644 1987/orig.Makefile create mode 100644 1987/rules.html delete mode 100644 1987/wall/hint.html rename 1987/wall/{hint.text => hint.txt} (97%) create mode 100644 1987/wall/index.html create mode 100644 1987/wall/orig.Makefile delete mode 100644 1987/westley/hint.html rename 1987/westley/{hint.text => hint.txt} (81%) create mode 100644 1987/westley/index.html create mode 100644 1987/westley/orig.Makefile diff --git a/1987/1987.tar.bz2 b/1987/1987.tar.bz2 index 37cd2ae2074a57386ac6e4779e6ec23cc577852c..9150522e6a66d9ed9dec7e1ff7988982a2909a95 100644 GIT binary patch literal 29197 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 literal 9981 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/dev/null 2>&1; then \ + ${ECHO} ${RM} -f $@; \ + ${RM} -f $@; \ + ${ECHO} "${GINDENT} < $< > $@"; \ + ${GINDENT} < $< > $@; \ + elif which "${INDENT}" >/dev/null 2>&1; then \ + ${ECHO} ${RM} -f $@; \ + ${RM} -f $@; \ + ${ECHO} "${INDENT} < $< > $@"; \ + ${INDENT} < $< > $@; \ + else \ + ${ECHO} "no intent tool found, ident $< yourself, sorry"; \ + ${ECHO} "exit 1"; \ + exit 1; \ + fi + + +################## +# 133t hacker rulz +################## +# +love: + @echo 'not war?' + @${TRUE} + +haste: + $(MAKE) waste + @${TRUE} + +waste: + @echo 'haste' + @${TRUE} + +make: + @echo 'Participate in a maker faire' + @${TRUE} + +easter_egg: + @echo you expected to often misunderstand this $${RANDOM} magic + @echo chongo '' "/\\oo/\\" + @echo Eggy + +fabricate fashion form frame manufacture produce: make + @${TRUE} + +sandwich: + @if [ `id -u` -eq 0 ]; then \ + echo 'Okay.'; \ + echo $${RANDOM}`date +%s`$${RANDOM} > $@; \ + else \ + echo 'What? Make it yourself.'; \ + exit 1; \ + fi + +# Understand the history of the Homebrew Computer Club +# as well as the West Coast Computer Faire and +# you might be confused different. :-) +# +supernova: nuke + @-if [ -r .code_anal ]; then \ + ${RM} -f .code_anal_v6; \ + else \ + echo "planet deniers, like some members of the IAU, are so cute when they try to defend their logic"; \ + fi + @echo A $@ helps ${MAKE} the elements that help form planets + @${TRUE} + +deep_magic: + @-if [ -r .code_anal ]; then \ + ccode_analysis --deep_magic 7889066cdbdf09b0408021754586e895be641cc9be29e7eafd3ca65359541f17 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + fi + @${TRUE} + +magic: deep_magic + @-if [ -r .code_anal ]; then \ + ccode_analysis --level 20003 --mode 5717175 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "If you don't eat yer meat, you can't have any pudding!"; \ + echo "How can you have any pudding if you don't eat yer meat?!"; \ + fi + @${TRUE} + +# The IOCCC resident astronomer states +# +charon: supernova + @echo $@ is a dwarf planet + @echo dwarf is a type of planet + @echo therefore IAU, $@ is a planet + +pluto: supernova + ${MAKE} charon + @echo $@ is a dwarf planet + @echo dwarf is a type of planet + @echo therefore, $@ is a planet + @echo get used to having lots of planets because a $< can ${MAKE} a lot of them diff --git a/1987/biggar/hint.html b/1987/biggar/hint.html deleted file mode 100644 index cdcb5e963..000000000 --- a/1987/biggar/hint.html +++ /dev/null @@ -1,44 +0,0 @@ -

Best Abuse of the Rules

- -

Mark Biggar
-UNiSYS - System Development Group, Santa Monica
-2525 Colorado AV MD 91-01
-Santa Monica, CA
-90406

- -

Judges' comments:

- -

To build:

- -
cc -DC="R>0" -DI="if(T)O" -DO="c=write(1,&c,1);" -DP="main(){X}"\
--DR="read(0,&c,1)" -DT="c!=015" -DW="while(C)I" -DX="char c;W" markb.c
-
- -

Passes BSD and UTS lint. At least one version of lint is thrown into -an infinite loop by this entry.

- -

Try:

- -
... | markb | od -c (remember to compile as indicated above)
-
- -

By changing the compile line you can make this program do anything you -want. This is a very efficient way to transfer source, though it -increases the size of Makefiles.

- -

With only slight variations, this program can be set to many uses. -Consider how easy it would be to release Un*x source in this form; -so what if the make files grow a little! :-)

- -

One vendor’s lint got hung in an infinite loop over this entry!

- -

FYI: We will let Mark get away with this truly sick entry this time, but -for the future on we have placed a limit on the size of a compile line.

- -

Also see our comment in Larry Wall’s entry regarding Mark’s contribution.

- -

Copyright © 1987, Landon Curt Noll & Larry Bassel. -All Rights Reserved. Permission for personal, educational or non-profit use is -granted provided this this copyright and notice are included in its entirety -and remains unaltered. All other uses must receive prior permission in writing -from both Landon Curt Noll and Larry Bassel.

diff --git a/1987/biggar/hint.text b/1987/biggar/hint.txt similarity index 97% rename from 1987/biggar/hint.text rename to 1987/biggar/hint.txt index 91cf8b559..ebfb95c17 100644 --- a/1987/biggar/hint.text +++ b/1987/biggar/hint.txt @@ -6,6 +6,10 @@ UNiSYS - System Development Group, Santa Monica Santa Monica, CA 90406 +## To build: + + make all + ## Judges' comments: ### To build: diff --git a/1987/biggar/index.html b/1987/biggar/index.html new file mode 100644 index 000000000..95b3db012 --- /dev/null +++ b/1987/biggar/index.html @@ -0,0 +1,203 @@ + + + + + + + hint + + + + +

Best Abuse of the Rules

+

Mark Biggar
+UNiSYS - System Development Group, Santa Monica
+2525 Colorado AV MD 91-01
+Santa Monica, CA
+90406

+

To build:

+
    make all
+

Judges’ comments:

+

To build:

+
cc -DC="R>0" -DI="if(T)O" -DO="c=write(1,&c,1);" -DP="main(){X}"\
+-DR="read(0,&c,1)" -DT="c!=015" -DW="while(C)I" -DX="char c;W" markb.c
+

Passes BSD and UTS lint. At least one version of lint is thrown into +an infinite loop by this entry.

+

Try:

+
... | markb | od -c (remember to compile as indicated above)
+

By changing the compile line you can make this program do anything +you want. This is a very efficient way to transfer source, though it +increases the size of Makefiles.

+

With only slight variations, this program can be set to many uses. +Consider how easy it would be to release Un*x source in this form; so +what if the make files grow a little! :-)

+

One vendor’s lint got hung in an infinite loop over this entry!

+
+

FYI: We will let Mark get away with this truly sick entry this time, +but for the future on we have placed a limit on the size of a compile +line.

+
+

Also see our comment in Larry Wall’s entry regarding Mark’s +contribution.

+

Copyright (c) 1987, Landon Curt Noll & Larry Bassel. All Rights +Reserved. Permission for personal, educational or non-profit use is +granted provided this this copyright and notice are included in its +entirety and remains unaltered. All other uses must receive prior +permission in writing from both Landon Curt Noll and Larry Bassel.

+ + diff --git a/1987/biggar/orig.Makefile b/1987/biggar/orig.Makefile new file mode 100644 index 000000000..ada5c3cd3 --- /dev/null +++ b/1987/biggar/orig.Makefile @@ -0,0 +1,32 @@ +# %W% %G% %U% +# +# 1987 makefile +# +# Copyright (c) 1987, Landon Curt Noll & Larry Bassel. +# All Rights Reserved. Permission for personal, educational or non-profit +# use is granted provided this this copyright and notice are included in its +# entirety and remains unaltered. All other uses must receive prior permission +# from Landon Curt Noll and Larry Bassel. + + +SHELL= /bin/sh +WINNERS= biggar + +# for System V style systems +OPSYS= -Dindex=strchr +# for BSD style systems +#OPSYS= + +all: ${WINNERS} + +biggar: biggar.c + cc -DC="R>0" -DI="if(T)O" -DO="c=write(1,&c,1);" \ + -DP="main(){X}" -DR="read(0,&c,1)" -DT="c!=015" \ + -DW="while(C)I" -DX="char c;W" $? -o $@ + +clean: + rm -f core +clobber: clean + rm -f ${WINNERS} +install: all + @echo are you kidding'??' diff --git a/1987/heckbert/Makefile b/1987/heckbert/Makefile index 286328f3b..20caa3474 100644 --- a/1987/heckbert/Makefile +++ b/1987/heckbert/Makefile @@ -1,30 +1,596 @@ -# %W% %G% %U% +#!/usr/bin/env make # -# 1987 makefile +# IOCCC 1987 winning entry - heckbert + +################################################################################ # -# Copyright (c) 1987, Landon Curt Noll & Larry Bassel. -# All Rights Reserved. Permission for personal, educational or non-profit -# use is granted provided this this copyright and notice are included in its -# entirety and remains unaltered. All other uses must receive prior permission -# from Landon Curt Noll and Larry Bassel. +# An Historical Makefile NOTE: +# +# The orig.Makefile, if it exits, is the original Makefile before this IOCCC +# year directory was reworked so that entries are in separate directories. +# This also applies to any orig.ansi.mk and orig.common.mk files. +# +# Several Makefiles were modified / formed in 2022, and as such it may have +# elements that are not historically compatible with way entries were built. +# The orig.Makefile, if it exits, is a copy of the pre-modified Makefile. +# +# Regarding individual entries: +# +# IOCCC winning entry code may not work on your system. Even with standards, +# conditions and build environments change, especially when it comes to more +# extreme code such you might find in an IOCCC winner. Moreover, what was +# allowed and liked in one IOCCC contest may no longer be liked/allowed in +# later IOCCC years. +# +# Corrections on winning author and fixing typos in remarks are VERY WELCOME. +# +# GitHub pull requests are welcome: +# +# If you have a patch that might make running an entry work in modern Unix-like +# environments, please create a GitHub pull request for the IOCCC judgess to +# consider. +# +# Suggestions and corrections regarding Makefiles, winning author information, +# fixing typos in remarks, and code patches are welcome via opening a GitHub +# issue or better yet, by creating a GitHub pull request for the IOCCC judges +# to consider. To form a GitHub issue or GitHub pull, please visit: +# +# https://github.com/ioccc-src/winner +# +################################################################################ + +# This work by Landon Curt Noll and Leonid A. Broukhis is licensed under: +# +# Creative Commons Attribution-ShareAlike 3.0 Unported License. +# +# See: http://creativecommons.org/licenses/by-sa/3.0/ -SHELL= /bin/sh -WINNERS= heckbert +############################# +# shell used by this Makefile +############################# +# +SHELL= /bin/bash -# for System V style systems -OPSYS= -Dindex=strchr -# for BSD style systems -#OPSYS= +####################### +# common tool locations +####################### +# +A2P= a2p +AR= ar +ASA= asa +AT= at +ATQ= atq +ATRM= atrm +AWK= awk +BANNER= banner +BASE64= base64 +BASENAME= basename +BATCH= batch +BC= bc +BINHEX= binhex +BISON= bison +BUNZIP2= bunzip2 +BZCAT= bzcat +BZCMP= bzcmp +BZDIFF= bzdiff +BZEGREP= bzegrep +BZFGREP= bzfgrep +BZGREP= bzgrep +BZIP2= bzip2 +BZLESS= bzless +BZMORE= bzmore +C2PH= c2ph +C89= c89 +C99= c99 +CAL= cal +CALC= calc +CAT= cat +CD= cd +CHFLAGS= chflags +CHGRP= chgrp +CHMOD= chmod +CKSUM= cksum +CLANG= clang +CLANG_PLUSPLUS= clang++ +CLEAR= clear +CMP= cmp +COL= col +COLLDEF= colldef +COLRM= colrm +COLUMN= column +COMPRESS= compress +CP= cp +CPIO= cpio +CPP= cpp +CRC32= crc32 +CSH= csh +CSPLIT= csplit +CURL= curl +CUT= cut +C_PLUSPLUS= c++ +C_PLUSPLUS_FILT= c++filt +DATE= date +DC= dc +DD= dd +DF= df +DIFF3= diff3 +DIFF= diff +DIG= dig +DIRNAME= dirname +ED= ed +EGREP= egrep +ENV= env +EQN= eqn +ETAGS= etags +EXPECT= expect +EXPR= expr +FALSE= false +FGREP= fgrep +FILE= file +FIND2PERL= find2perl +FIND= find +FLEX= flex +FLEX_PLUSPLUS= flex++ +FMT= fmt +FOLD= fold +FS_USAGE= fs_usage +FUNZIP= funzip +FUSER= fuser +GCC= gcc +GDIFFMK= gdiffmk +GENCAT= gencat +GENSTRINGS= genstrings +GETOPT= getopt +GETOPTS= getopts +GNUMAKE= gnumake +GREP= grep +GROFF= groff +GROFFER= groffer +GROG= grog +GROPS= grops +GROTTY= grotty +GUNZIP= gunzip +GVIM= gvim +GZCAT= gzcat +GZEXE= gzexe +GZIP_PROG= gzip +G_PLUSPLUS= g++ +H2PH= h2ph +H2XS= h2xs +HASH= hash +HEAD= head +HOSTNAME_PROG= hostname +ICONV= iconv +ID= id +INDENT= indent +INFO= info +JOT= jot +KILL= kill +KSH= ksh +LAST= last +LD= ld +LESSECHO= lessecho +LEX= len +LINK= link +LN= ln +LS= ls +M4= m4 +MAKE= make +MAN= man +MKDIR= mkdir +MKFIFo= mkfifo +MKTEMP= mktemp +MV= mv +NANO= nano +NASM= nasm +NEQN= neqn +NICE= nice +NL= nl +NM= nm +NOHUP= nohup +NROFF= nroff +NSLOOKUP= nslookup +OD= od +OPENSSL= openssl +PASTE= paste +PATCH= patch +PATHCHK= pathchk +PAX= pax +PERL= perl +PICO= pico +PR= pr +PRINTENV= printenv +PS= ps +PTAR= ptar +PTARDIFF= ptardiff +PTARGREP= ptargrep +PWD= pwd +PYDOC= pydoc +PYTHON= python +PYTHONW= pythonw +READLINK= readlink +RENICE= renice +RESET= reset +REV= rev +RI= ri +RM= rm +RMDIR= rmdir +RSYNC= rsync +RUBY= ruby +RVIM= rvim +SAY= say +SCP= scp +SCREEN= screen +SCRIPT= script +SDIFF= sdiff +SED= sed +SEQ= seq +SFTP= sftp +SH= sh +SHA1= sha1 +SHA= sha +SHAR= shar +SHASUM5_18= shasum5.18 +SHASUM= shasum +SIZE= size +SLEEP= sleep +SORT= sort +SSH= ssh +STAT= stat +STRIP= strip +STTY= stty +SUM= sum +SYNC= sync +TABS= tabs +TAIL= tail +TAR= tar +TEE= tee +TEST= test +TFTP= tftp +TIDY= tidy +TIME= time +TOP= top +TOUCH= touch +TPUT= tout +TPUT= tput +TR= tr +TROFF= troff +TRUE= true +TSET= tset +TSORT= tsort +UL= ul +UNAME= uname +UNCOMPRESS= uncompress +UNEXPAND= unexpand +UNIFDEF= unifdef +UNIFDEFALL= unifdefall +UNIQ= uniq +UNITS= units +UNLINK= unlink +UNZIP= unzip +UNZIPSFX= unzipsfx +UPTIME= uptime +UUDECODE= uudecode +UUENCODE= uuencode +UUIDGEN= uuidgen +VI= vi +VIEW= view +VIM= vim +VIMDIFF= vimdiff +W= w +WAIT4PATH= wait4path +WAIT= wait +WC= wc +WGET= wget +WHAT= what +WHATIS= whatis +WHICH= which +WHO= who +WHOAMI= whoami +WHOIS= whois +WRTIE= write +XAR= xar +XARGS= xargs +XATTR= xattr +XXD= xxd +YACC= yacc +YES= yes +ZCAT= zcat +ZCMP= zcmp +ZDIFF= zdiff +ZEGREP= zegrep +ZFGREP= zfgrep +ZFORCE= zforce +ZGREP= zgrep +ZIP= zip +ZIPCLOAK= zipcloak +ZIPGREp= zipgrep +ZIPINFo= zipinfo +ZIPNOTE= zipnote +ZIPSPLIT= zipsplit +ZLESS= zless +ZMORE= zmore +ZNEW= znew +ZPRINT= zprint +ZSH= zsh -all: ${WINNERS} +# Set X11_LIBDIR to the directory where the X11 library resides +# +#X11_LIBDIR= /usr/X11R6/lib +#X11_LIBDIR= /usr/X11/lib +X11_LIBDIR= /opt/X11/lib -heckbert: heckbert.c - cc ${OPSYS} $? -o $@ +# Set X11_INCLUDEDIR to the directory where the X11 include files reside +# +#X11_INCDIR= /usr/X11R6/include +#X11_INCDIR= /usr/X11/include +X11_INCDIR= /opt/X11/include + +# Compiler warnings +# +#CWARN= +#CWARN= -Wall +#CWARN= -Wall -Wextra +CWARN= -Wall -Wextra ${CSILENCE} +#CWARN= -Wall -Wextra -pedantic ${CSILENCE} +#CWARN= -Wall -Wextra -Weverything +#CWARN= -Wall -Wextra -Weverything -pedantic +#CWARN= -Wall -Wextra -Weverything -pedantic ${CSILENCE} + +# Silence warnings that ${CWARN} would normally complain about +# +CSILENCE= -Wno-empty-body -Wno-error -Wno-implicit-function-declaration -Wno-implicit-int \ + -Wno-int-to-pointer-cast -Wno-logical-op-parentheses +#CSILENCE= -Wno-implicit-int + +# compiler standard +# +#CSTD= +#CSTD= -ansi +CSTD= -std=gnu89 + +# compiler bit architecture +# +# Some entries require 32-bitness: +# ARCH= -m32 +# +# Some entries require 64-bitness: +# ARCH= -m64 +# +# By default we assume nothing: +# +ARCH= + +# defines that are needed to compile +# +CDEFINE= +#CDEFINE= -DIOCCC=26 + +# include files that are needed to compile +# +CINCLUDE= +#CINCLUDE= -include stdlib.h +#CINCLUDE= -include stdio.h +#CINCLUDE= -include stdlib.h -include stdio.h +#CINCLUDE= -I ${X11_INCDIR} +#CINCLUDE= -I ${HOMEBREW_PREFIX}/include/SDL2 + +# optimization +# +# Most compiles will safely use -O2. Some can use only -O1 or -O. +# A few compilers have broken optimizers or this entry make break +# under those buggy optimizers and thus you may not want anything. +# Reasonable compilers will allow for -O3. +# +#OPT= +#OPT= -O +#OPT= -O1 +#OPT= -O2 +OPT= -O3 + +# default flags for ANSI C compilation +# +CFLAGS= ${CSTD} ${CWARN} ${ARCH} ${CDEFINE} ${CINCLUDE} ${OPT} + +# Libraries needed to build +# +LIBS= +#LIBS= -lm +#LIBS= -L ${X11_LIBDIR} -lX11 +#LIBS= -L ${HOMEBREW_PREFIX}/lib -lSDL + +# ANSI compiler +# +# Set CC to the name of your ANSI compiler. +# +# Some entries seem to need gcc. If you have gcc, set +# both CC and MAY_NEED_GCC to gcc. +# +# If you do not have gcc, set CC to the name of your ANSI compiler, and +# set MAY_NEED_GCC to either ${CC} (and hope for the best) or to just : +# to disable such programs. +# +CC= cc +#CC=clang +MAY_NEED_GCC= gcc + + +############################## +# Special flags for this entry +############################## +# +ENTRY= heckbert +PROG= ${ENTRY} +# +OBJ= ${PROG}.o +DATA= +TARGET= ${PROG} +# +ALT_OBJ= ${PROG}.orig.o +ALT_TARGET= ${PROG}.orig + + +################# +# build the entry +################# +# +all: ${DATA} ${TARGET} + @${TRUE} + +.PHONY: alt data everything clean clobber nuke dist_clean \ + install build love haste waste make easter_egg \ + supernova deep_magic magic charon pluto + +${PROG}: ${PROG}.c + ${CC} ${CFLAGS} $< -o $@ ${LIBS} + +# alternative executable +# +alt: ${DATA} ${ALT_TARGET} + @${TRUE} + +${PROG}.orig: ${PROG}.orig.c + @echo "NOTE: The original source may not compile using modern compilers." + ${CC} ${CFLAGS} $< -o $@ ${LIBS} + +# data files +# +data: ${DATA} + @${TRUE} + + +############### +# utility rules +############### +# +everything: all alt clean: - rm -f core + ${RM} -f ${OBJ} ${ALT_OBJ} + @-if [ -f indent.c ]; then \ + ${ECHO} ${RM} -f indent.c; \ + ${RM} -f indent.c; \ + fi + clobber: clean - rm -f ${WINNERS} -install: all - @echo are you kidding'??' + ${RM} -f ${TARGET} ${ALT_TARGET} + @-if [ -e sandwich ]; then \ + ${RM} -f sandwich; \ + echo 'ate sandwich'; \ + fi + +nuke: clobber + @${TRUE} + +dist_clean: nuke + @${TRUE} + +install: + @echo "Dr. Spock says that is not logical!" + @${TRUE} + +# you may be able to misunderstand the source by reading indent.c +# +indent.c: ${PROG}.c + @if which "${GINDENT}" >/dev/null 2>&1; then \ + ${ECHO} ${RM} -f $@; \ + ${RM} -f $@; \ + ${ECHO} "${GINDENT} < $< > $@"; \ + ${GINDENT} < $< > $@; \ + elif which "${INDENT}" >/dev/null 2>&1; then \ + ${ECHO} ${RM} -f $@; \ + ${RM} -f $@; \ + ${ECHO} "${INDENT} < $< > $@"; \ + ${INDENT} < $< > $@; \ + else \ + ${ECHO} "no intent tool found, ident $< yourself, sorry"; \ + ${ECHO} "exit 1"; \ + exit 1; \ + fi + + +################## +# 133t hacker rulz +################## +# +love: + @echo 'not war?' + @${TRUE} + +haste: + $(MAKE) waste + @${TRUE} + +waste: + @echo 'haste' + @${TRUE} + +make: + @echo 'Participate in a maker faire' + @${TRUE} + +easter_egg: + @echo you expected to often misunderstand this $${RANDOM} magic + @echo chongo '' "/\\oo/\\" + @echo Eggy + +fabricate fashion form frame manufacture produce: make + @${TRUE} + +sandwich: + @if [ `id -u` -eq 0 ]; then \ + echo 'Okay.'; \ + echo $${RANDOM}`date +%s`$${RANDOM} > $@; \ + else \ + echo 'What? Make it yourself.'; \ + exit 1; \ + fi + +# Understand the history of the Homebrew Computer Club +# as well as the West Coast Computer Faire and +# you might be confused different. :-) +# +supernova: nuke + @-if [ -r .code_anal ]; then \ + ${RM} -f .code_anal_v6; \ + else \ + echo "planet deniers, like some members of the IAU, are so cute when they try to defend their logic"; \ + fi + @echo A $@ helps ${MAKE} the elements that help form planets + @${TRUE} + +deep_magic: + @-if [ -r .code_anal ]; then \ + ccode_analysis --deep_magic 7889066cdbdf09b0408021754586e895be641cc9be29e7eafd3ca65359541f17 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + fi + @${TRUE} + +magic: deep_magic + @-if [ -r .code_anal ]; then \ + ccode_analysis --level 20003 --mode 5717175 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "If you don't eat yer meat, you can't have any pudding!"; \ + echo "How can you have any pudding if you don't eat yer meat?!"; \ + fi + @${TRUE} + +# The IOCCC resident astronomer states +# +charon: supernova + @echo $@ is a dwarf planet + @echo dwarf is a type of planet + @echo therefore IAU, $@ is a planet + +pluto: supernova + ${MAKE} charon + @echo $@ is a dwarf planet + @echo dwarf is a type of planet + @echo therefore, $@ is a planet + @echo get used to having lots of planets because a $< can ${MAKE} a lot of them diff --git a/1987/heckbert/heckbert.c b/1987/heckbert/heckbert.c index ccdb7e0b7..858f5d8c7 100644 --- a/1987/heckbert/heckbert.c +++ b/1987/heckbert/heckbert.c @@ -1,9 +1,8 @@ #include #include -#define _ define -#_ A putchar -#_ B return -#_ C index +#define A putchar +#define B return +#define C index char*r,c[300001],*d=">=<=!===||&&->++-->><<",*i,*l,*j,*m,*k,*n,*h,*y;e,u=1,v,w, f=1,p,s,x;main(a,b)char**b;{p=a>1?atoi(b[1]):79;r=c+read(0,j=l=i=c,300000);v=g( j,&m);for(k=m;v!=2;j=k,m=n,v=w,k=m){w=g(k,&n);if(v==1&&m-j==1&&*j==35)e&&A(10), diff --git a/1987/heckbert/heckbert.orig.c b/1987/heckbert/heckbert.orig.c new file mode 100644 index 000000000..ccdb7e0b7 --- /dev/null +++ b/1987/heckbert/heckbert.orig.c @@ -0,0 +1,18 @@ +#include +#include +#define _ define +#_ A putchar +#_ B return +#_ C index +char*r,c[300001],*d=">=<=!===||&&->++-->><<",*i,*l,*j,*m,*k,*n,*h,*y;e,u=1,v,w, +f=1,p,s,x;main(a,b)char**b;{p=a>1?atoi(b[1]):79;r=c+read(0,j=l=i=c,300000);v=g( +j,&m);for(k=m;v!=2;j=k,m=n,v=w,k=m){w=g(k,&n);if(v==1&&m-j==1&&*j==35)e&&A(10), +e=f=0;if(!f&&v==3&&(char*)C(j,10)2&&(u||w)&&(f||u)&& +(l-i>1||*i!=61||n-k>1||!C("-*&",*k)))continue;else if(v==3)if(f&&e+1+n-k>p&&e)A +(10),e=0;else A(32),e++;else{if(f&&e+m-j>p&&e)A(10),e=0;e+=m-j;k=j;while(k=r)B*m=j,2;s=isdigit(*j)|| +*j==46&&isdigit(j[1]);for(h=j;hj)B*m=h,0;x=1;for(h=j;hj)h--,x=3;if(*j==34||*j==39)for(h=j+1;hBest Obfuscator of Programs - -

Paul Heckbert
-Pixar

- -

Judges' comments:

- -

Try:

- -
ph 40 < ph.c > foo.c; cc foo.c -o ph
-ph 20 < a_C_prog.c > bar.c; cc bar.c
-
- -

The judges used this program to fold up very long lines which the -BSD fold(1) was unable to process. This program has been added -to the contest tool chest.

- -

On System V systems, compile with: -Dindex=strchr -To compile on a 16 bit machine, change 300000’s to 30000.

- -

Copyright © 1987, Landon Curt Noll & Larry Bassel. -All Rights Reserved. Permission for personal, educational or non-profit use is -granted provided this this copyright and notice are included in its entirety -and remains unaltered. All other uses must receive prior permission in writing -from both Landon Curt Noll and Larry Bassel.

diff --git a/1987/heckbert/hint.text b/1987/heckbert/hint.txt similarity index 83% rename from 1987/heckbert/hint.text rename to 1987/heckbert/hint.txt index 445b201e4..8042262f9 100644 --- a/1987/heckbert/hint.text +++ b/1987/heckbert/hint.txt @@ -3,6 +3,12 @@ Paul Heckbert Pixar +## To build: + + make all + +NOTE: The original entry may be built with "make alt". + ## Judges' comments: @@ -17,6 +23,8 @@ to the contest tool chest. On System V systems, compile with: `-Dindex=strchr` To compile on a 16 bit machine, change 300000's to 30000. +NOTE: This entry requires a non-standard K&R C compiler to compile. + Copyright (c) 1987, Landon Curt Noll & Larry Bassel. All Rights Reserved. Permission for personal, educational or non-profit use is granted provided this this copyright and notice are included in its entirety diff --git a/1987/heckbert/index.html b/1987/heckbert/index.html new file mode 100644 index 000000000..8431179e1 --- /dev/null +++ b/1987/heckbert/index.html @@ -0,0 +1,190 @@ + + + + + + + hint + + + + +

Best Obfuscator of Programs

+

Paul Heckbert
+Pixar

+

To build:

+
    make all
+

NOTE: The original entry may be built with “make alt”.

+

Judges’ comments:

+

Try:

+
ph 40 < ph.c > foo.c; cc foo.c -o ph
+ph 20 < a_C_prog.c > bar.c; cc bar.c
+

The judges used this program to fold up very long lines which the BSD +fold(1) was unable to process. This program has been added to the +contest tool chest.

+

On System V systems, compile with: -Dindex=strchr To +compile on a 16 bit machine, change 300000’s to 30000.

+

NOTE: This entry requires a non-standard K&R C compiler to +compile.

+

Copyright (c) 1987, Landon Curt Noll & Larry Bassel. All Rights +Reserved. Permission for personal, educational or non-profit use is +granted provided this this copyright and notice are included in its +entirety and remains unaltered. All other uses must receive prior +permission in writing from both Landon Curt Noll and Larry Bassel.

+ + diff --git a/1987/heckbert/orig.Makefile b/1987/heckbert/orig.Makefile new file mode 100644 index 000000000..286328f3b --- /dev/null +++ b/1987/heckbert/orig.Makefile @@ -0,0 +1,30 @@ +# %W% %G% %U% +# +# 1987 makefile +# +# Copyright (c) 1987, Landon Curt Noll & Larry Bassel. +# All Rights Reserved. Permission for personal, educational or non-profit +# use is granted provided this this copyright and notice are included in its +# entirety and remains unaltered. All other uses must receive prior permission +# from Landon Curt Noll and Larry Bassel. + + +SHELL= /bin/sh +WINNERS= heckbert + +# for System V style systems +OPSYS= -Dindex=strchr +# for BSD style systems +#OPSYS= + +all: ${WINNERS} + +heckbert: heckbert.c + cc ${OPSYS} $? -o $@ + +clean: + rm -f core +clobber: clean + rm -f ${WINNERS} +install: all + @echo are you kidding'??' diff --git a/1987/hines/Makefile b/1987/hines/Makefile index 11abeda39..03b0bcb4c 100644 --- a/1987/hines/Makefile +++ b/1987/hines/Makefile @@ -1,30 +1,595 @@ -# %W% %G% %U% +#!/usr/bin/env make # -# 1987 makefile +# IOCCC 1987 winning entry - hines + +################################################################################ # -# Copyright (c) 1987, Landon Curt Noll & Larry Bassel. -# All Rights Reserved. Permission for personal, educational or non-profit -# use is granted provided this this copyright and notice are included in its -# entirety and remains unaltered. All other uses must receive prior permission -# from Landon Curt Noll and Larry Bassel. +# An Historical Makefile NOTE: +# +# The orig.Makefile, if it exits, is the original Makefile before this IOCCC +# year directory was reworked so that entries are in separate directories. +# This also applies to any orig.ansi.mk and orig.common.mk files. +# +# Several Makefiles were modified / formed in 2022, and as such it may have +# elements that are not historically compatible with way entries were built. +# The orig.Makefile, if it exits, is a copy of the pre-modified Makefile. +# +# Regarding individual entries: +# +# IOCCC winning entry code may not work on your system. Even with standards, +# conditions and build environments change, especially when it comes to more +# extreme code such you might find in an IOCCC winner. Moreover, what was +# allowed and liked in one IOCCC contest may no longer be liked/allowed in +# later IOCCC years. +# +# Corrections on winning author and fixing typos in remarks are VERY WELCOME. +# +# GitHub pull requests are welcome: +# +# If you have a patch that might make running an entry work in modern Unix-like +# environments, please create a GitHub pull request for the IOCCC judgess to +# consider. +# +# Suggestions and corrections regarding Makefiles, winning author information, +# fixing typos in remarks, and code patches are welcome via opening a GitHub +# issue or better yet, by creating a GitHub pull request for the IOCCC judges +# to consider. To form a GitHub issue or GitHub pull, please visit: +# +# https://github.com/ioccc-src/winner +# +################################################################################ + +# This work by Landon Curt Noll and Leonid A. Broukhis is licensed under: +# +# Creative Commons Attribution-ShareAlike 3.0 Unported License. +# +# See: http://creativecommons.org/licenses/by-sa/3.0/ -SHELL= /bin/sh -WINNERS= hines +############################# +# shell used by this Makefile +############################# +# +SHELL= /bin/bash -# for System V style systems -OPSYS= -Dindex=strchr -# for BSD style systems -#OPSYS= +####################### +# common tool locations +####################### +# +A2P= a2p +AR= ar +ASA= asa +AT= at +ATQ= atq +ATRM= atrm +AWK= awk +BANNER= banner +BASE64= base64 +BASENAME= basename +BATCH= batch +BC= bc +BINHEX= binhex +BISON= bison +BUNZIP2= bunzip2 +BZCAT= bzcat +BZCMP= bzcmp +BZDIFF= bzdiff +BZEGREP= bzegrep +BZFGREP= bzfgrep +BZGREP= bzgrep +BZIP2= bzip2 +BZLESS= bzless +BZMORE= bzmore +C2PH= c2ph +C89= c89 +C99= c99 +CAL= cal +CALC= calc +CAT= cat +CD= cd +CHFLAGS= chflags +CHGRP= chgrp +CHMOD= chmod +CKSUM= cksum +CLANG= clang +CLANG_PLUSPLUS= clang++ +CLEAR= clear +CMP= cmp +COL= col +COLLDEF= colldef +COLRM= colrm +COLUMN= column +COMPRESS= compress +CP= cp +CPIO= cpio +CPP= cpp +CRC32= crc32 +CSH= csh +CSPLIT= csplit +CURL= curl +CUT= cut +C_PLUSPLUS= c++ +C_PLUSPLUS_FILT= c++filt +DATE= date +DC= dc +DD= dd +DF= df +DIFF3= diff3 +DIFF= diff +DIG= dig +DIRNAME= dirname +ED= ed +EGREP= egrep +ENV= env +EQN= eqn +ETAGS= etags +EXPECT= expect +EXPR= expr +FALSE= false +FGREP= fgrep +FILE= file +FIND2PERL= find2perl +FIND= find +FLEX= flex +FLEX_PLUSPLUS= flex++ +FMT= fmt +FOLD= fold +FS_USAGE= fs_usage +FUNZIP= funzip +FUSER= fuser +GCC= gcc +GDIFFMK= gdiffmk +GENCAT= gencat +GENSTRINGS= genstrings +GETOPT= getopt +GETOPTS= getopts +GNUMAKE= gnumake +GREP= grep +GROFF= groff +GROFFER= groffer +GROG= grog +GROPS= grops +GROTTY= grotty +GUNZIP= gunzip +GVIM= gvim +GZCAT= gzcat +GZEXE= gzexe +GZIP_PROG= gzip +G_PLUSPLUS= g++ +H2PH= h2ph +H2XS= h2xs +HASH= hash +HEAD= head +HOSTNAME_PROG= hostname +ICONV= iconv +ID= id +INDENT= indent +INFO= info +JOT= jot +KILL= kill +KSH= ksh +LAST= last +LD= ld +LESSECHO= lessecho +LEX= len +LINK= link +LN= ln +LS= ls +M4= m4 +MAKE= make +MAN= man +MKDIR= mkdir +MKFIFo= mkfifo +MKTEMP= mktemp +MV= mv +NANO= nano +NASM= nasm +NEQN= neqn +NICE= nice +NL= nl +NM= nm +NOHUP= nohup +NROFF= nroff +NSLOOKUP= nslookup +OD= od +OPENSSL= openssl +PASTE= paste +PATCH= patch +PATHCHK= pathchk +PAX= pax +PERL= perl +PICO= pico +PR= pr +PRINTENV= printenv +PS= ps +PTAR= ptar +PTARDIFF= ptardiff +PTARGREP= ptargrep +PWD= pwd +PYDOC= pydoc +PYTHON= python +PYTHONW= pythonw +READLINK= readlink +RENICE= renice +RESET= reset +REV= rev +RI= ri +RM= rm +RMDIR= rmdir +RSYNC= rsync +RUBY= ruby +RVIM= rvim +SAY= say +SCP= scp +SCREEN= screen +SCRIPT= script +SDIFF= sdiff +SED= sed +SEQ= seq +SFTP= sftp +SH= sh +SHA1= sha1 +SHA= sha +SHAR= shar +SHASUM5_18= shasum5.18 +SHASUM= shasum +SIZE= size +SLEEP= sleep +SORT= sort +SSH= ssh +STAT= stat +STRIP= strip +STTY= stty +SUM= sum +SYNC= sync +TABS= tabs +TAIL= tail +TAR= tar +TEE= tee +TEST= test +TFTP= tftp +TIDY= tidy +TIME= time +TOP= top +TOUCH= touch +TPUT= tout +TPUT= tput +TR= tr +TROFF= troff +TRUE= true +TSET= tset +TSORT= tsort +UL= ul +UNAME= uname +UNCOMPRESS= uncompress +UNEXPAND= unexpand +UNIFDEF= unifdef +UNIFDEFALL= unifdefall +UNIQ= uniq +UNITS= units +UNLINK= unlink +UNZIP= unzip +UNZIPSFX= unzipsfx +UPTIME= uptime +UUDECODE= uudecode +UUENCODE= uuencode +UUIDGEN= uuidgen +VI= vi +VIEW= view +VIM= vim +VIMDIFF= vimdiff +W= w +WAIT4PATH= wait4path +WAIT= wait +WC= wc +WGET= wget +WHAT= what +WHATIS= whatis +WHICH= which +WHO= who +WHOAMI= whoami +WHOIS= whois +WRTIE= write +XAR= xar +XARGS= xargs +XATTR= xattr +XXD= xxd +YACC= yacc +YES= yes +ZCAT= zcat +ZCMP= zcmp +ZDIFF= zdiff +ZEGREP= zegrep +ZFGREP= zfgrep +ZFORCE= zforce +ZGREP= zgrep +ZIP= zip +ZIPCLOAK= zipcloak +ZIPGREp= zipgrep +ZIPINFo= zipinfo +ZIPNOTE= zipnote +ZIPSPLIT= zipsplit +ZLESS= zless +ZMORE= zmore +ZNEW= znew +ZPRINT= zprint +ZSH= zsh -all: ${WINNERS} +# Set X11_LIBDIR to the directory where the X11 library resides +# +#X11_LIBDIR= /usr/X11R6/lib +#X11_LIBDIR= /usr/X11/lib +X11_LIBDIR= /opt/X11/lib -hines: hines.c - cc $? -o $@ +# Set X11_INCLUDEDIR to the directory where the X11 include files reside +# +#X11_INCDIR= /usr/X11R6/include +#X11_INCDIR= /usr/X11/include +X11_INCDIR= /opt/X11/include + +# Compiler warnings +# +#CWARN= +#CWARN= -Wall +#CWARN= -Wall -Wextra +#CWARN= -Wall -Wextra ${CSILENCE} +CWARN= -Wall -Wextra -pedantic ${CSILENCE} +#CWARN= -Wall -Wextra -Weverything +#CWARN= -Wall -Wextra -Weverything -pedantic +#CWARN= -Wall -Wextra -Weverything -pedantic ${CSILENCE} + +# Silence warnings that ${CWARN} would normally complain about +# +CSILENCE= -Wno-error -Wno-implicit-function-declaration +#CSILENCE= -Wno-implicit-int + +# compiler standard +# +#CSTD= +#CSTD= -ansi +CSTD= -std=gnu89 + +# compiler bit architecture +# +# Some entries require 32-bitness: +# ARCH= -m32 +# +# Some entries require 64-bitness: +# ARCH= -m64 +# +# By default we assume nothing: +# +ARCH= + +# defines that are needed to compile +# +CDEFINE= +#CDEFINE= -DIOCCC=26 + +# include files that are needed to compile +# +CINCLUDE= +#CINCLUDE= -include stdlib.h +#CINCLUDE= -include stdio.h +#CINCLUDE= -include stdlib.h -include stdio.h +#CINCLUDE= -I ${X11_INCDIR} +#CINCLUDE= -I ${HOMEBREW_PREFIX}/include/SDL2 + +# optimization +# +# Most compiles will safely use -O2. Some can use only -O1 or -O. +# A few compilers have broken optimizers or this entry make break +# under those buggy optimizers and thus you may not want anything. +# Reasonable compilers will allow for -O3. +# +#OPT= +#OPT= -O +#OPT= -O1 +#OPT= -O2 +OPT= -O3 + +# default flags for ANSI C compilation +# +CFLAGS= ${CSTD} ${CWARN} ${ARCH} ${CDEFINE} ${CINCLUDE} ${OPT} + +# Libraries needed to build +# +LIBS= +#LIBS= -lm +#LIBS= -L ${X11_LIBDIR} -lX11 +#LIBS= -L ${HOMEBREW_PREFIX}/lib -lSDL + +# ANSI compiler +# +# Set CC to the name of your ANSI compiler. +# +# Some entries seem to need gcc. If you have gcc, set +# both CC and MAY_NEED_GCC to gcc. +# +# If you do not have gcc, set CC to the name of your ANSI compiler, and +# set MAY_NEED_GCC to either ${CC} (and hope for the best) or to just : +# to disable such programs. +# +CC= cc +#CC=clang +MAY_NEED_GCC= gcc + + +############################## +# Special flags for this entry +############################## +# +ENTRY= hines +PROG= ${ENTRY} +# +OBJ= ${PROG}.o +DATA= +TARGET= ${PROG} +# +ALT_OBJ= ${PROG}.orig.o +ALT_TARGET= ${PROG}.orig + + +################# +# build the entry +################# +# +all: ${DATA} ${TARGET} + @${TRUE} + +.PHONY: alt data everything clean clobber nuke dist_clean \ + install build love haste waste make easter_egg \ + supernova deep_magic magic charon pluto + +${PROG}: ${PROG}.c + ${CC} ${CFLAGS} $< -o $@ ${LIBS} + +# alternative executable +# +alt: ${DATA} ${ALT_TARGET} + @${TRUE} + +${PROG}.orig: ${PROG}.orig.c + @echo "NOTE: The original source may not compile using modern compilers." + ${CC} ${CFLAGS} $< -o $@ ${LIBS} + +# data files +# +data: ${DATA} + @${TRUE} + + +############### +# utility rules +############### +# +everything: all alt clean: - rm -f core + ${RM} -f ${OBJ} ${ALT_OBJ} + @-if [ -f indent.c ]; then \ + ${ECHO} ${RM} -f indent.c; \ + ${RM} -f indent.c; \ + fi + clobber: clean - rm -f ${WINNERS} -install: all - @echo are you kidding'??' + ${RM} -f ${TARGET} ${ALT_TARGET} + @-if [ -e sandwich ]; then \ + ${RM} -f sandwich; \ + echo 'ate sandwich'; \ + fi + +nuke: clobber + @${TRUE} + +dist_clean: nuke + @${TRUE} + +install: + @echo "Dr. Spock says that is not logical!" + @${TRUE} + +# you may be able to misunderstand the source by reading indent.c +# +indent.c: ${PROG}.c + @if which "${GINDENT}" >/dev/null 2>&1; then \ + ${ECHO} ${RM} -f $@; \ + ${RM} -f $@; \ + ${ECHO} "${GINDENT} < $< > $@"; \ + ${GINDENT} < $< > $@; \ + elif which "${INDENT}" >/dev/null 2>&1; then \ + ${ECHO} ${RM} -f $@; \ + ${RM} -f $@; \ + ${ECHO} "${INDENT} < $< > $@"; \ + ${INDENT} < $< > $@; \ + else \ + ${ECHO} "no intent tool found, ident $< yourself, sorry"; \ + ${ECHO} "exit 1"; \ + exit 1; \ + fi + + +################## +# 133t hacker rulz +################## +# +love: + @echo 'not war?' + @${TRUE} + +haste: + $(MAKE) waste + @${TRUE} + +waste: + @echo 'haste' + @${TRUE} + +make: + @echo 'Participate in a maker faire' + @${TRUE} + +easter_egg: + @echo you expected to often misunderstand this $${RANDOM} magic + @echo chongo '' "/\\oo/\\" + @echo Eggy + +fabricate fashion form frame manufacture produce: make + @${TRUE} + +sandwich: + @if [ `id -u` -eq 0 ]; then \ + echo 'Okay.'; \ + echo $${RANDOM}`date +%s`$${RANDOM} > $@; \ + else \ + echo 'What? Make it yourself.'; \ + exit 1; \ + fi + +# Understand the history of the Homebrew Computer Club +# as well as the West Coast Computer Faire and +# you might be confused different. :-) +# +supernova: nuke + @-if [ -r .code_anal ]; then \ + ${RM} -f .code_anal_v6; \ + else \ + echo "planet deniers, like some members of the IAU, are so cute when they try to defend their logic"; \ + fi + @echo A $@ helps ${MAKE} the elements that help form planets + @${TRUE} + +deep_magic: + @-if [ -r .code_anal ]; then \ + ccode_analysis --deep_magic 7889066cdbdf09b0408021754586e895be641cc9be29e7eafd3ca65359541f17 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + fi + @${TRUE} + +magic: deep_magic + @-if [ -r .code_anal ]; then \ + ccode_analysis --level 20003 --mode 5717175 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "If you don't eat yer meat, you can't have any pudding!"; \ + echo "How can you have any pudding if you don't eat yer meat?!"; \ + fi + @${TRUE} + +# The IOCCC resident astronomer states +# +charon: supernova + @echo $@ is a dwarf planet + @echo dwarf is a type of planet + @echo therefore IAU, $@ is a planet + +pluto: supernova + ${MAKE} charon + @echo $@ is a dwarf planet + @echo dwarf is a type of planet + @echo therefore, $@ is a planet + @echo get used to having lots of planets because a $< can ${MAKE} a lot of them diff --git a/1987/hines/hines.c b/1987/hines/hines.c index 9b6beea39..8e4d2c0bf 100644 --- a/1987/hines/hines.c +++ b/1987/hines/hines.c @@ -1,12 +1,12 @@ #include -#include +#include main(togo,toog) int togo; char *toog[]; {char *ogto, tgoo[80];FILE *ogot; int oogt=0, ootg, otog=79, ottg=1;if ( togo== ottg) goto gogo; goto goog; ggot: if ( fgets( tgoo, otog, ogot)) goto gtgo; goto gott; -gtot: exit(); ogtg: ++oogt; goto ogoo; togg: if ( ootg > 0) +gtot: exit(0); ogtg: ++oogt; goto ogoo; togg: if ( ootg > 0) goto oggt; goto ggot; ogog: if ( !ogot) goto gogo; goto ggto; gtto: printf( "%d goto \'s\n", oogt); goto gtot; oggt: if ( !memcmp( ogto, "goto", 4)) goto otgg; diff --git a/1987/hines/hines.orig.c b/1987/hines/hines.orig.c new file mode 100644 index 000000000..9b6beea39 --- /dev/null +++ b/1987/hines/hines.orig.c @@ -0,0 +1,19 @@ +#include +#include +main(togo,toog) +int togo; +char *toog[]; +{char *ogto, tgoo[80];FILE *ogot; int oogt=0, ootg, otog=79, +ottg=1;if ( togo== ottg) goto gogo; goto goog; ggot: +if ( fgets( tgoo, otog, ogot)) goto gtgo; goto gott; +gtot: exit(); ogtg: ++oogt; goto ogoo; togg: if ( ootg > 0) +goto oggt; goto ggot; ogog: if ( !ogot) goto gogo; +goto ggto; gtto: printf( "%d goto \'s\n", oogt); goto +gtot; oggt: if ( !memcmp( ogto, "goto", 4)) goto otgg; +goto gooo; gogo: exit( ottg); tggo: ootg= strlen(tgoo); +goto tgog; oogo: --ootg; goto togg; gooo: ++ogto; goto +oogo; gott: fclose( ogot); goto gtto; otgg: ogto= ogto +3; +goto ogtg; tgog: ootg-=4;goto togg; gtgo: ogto= tgoo; +goto tggo; ogoo: ootg-=3;goto gooo; goog: ogot= fopen( +toog[ ottg], "r"); goto ogog; ggto: ogto= tgoo; goto +ggot;} diff --git a/1987/hines/hint.html b/1987/hines/hint.html deleted file mode 100644 index 25adc4180..000000000 --- a/1987/hines/hint.html +++ /dev/null @@ -1,29 +0,0 @@ -

Worst Style

- -

Spencer Hines
-OnLine Computer Systems
-4200 Farragut Street
-Hyattsville, MD
-20781
-USA

- -

Judges' comments:

- -

Try:

- -
hines hines.c
-
- -

This program was designed to maximize the bother function for -structured programmers. This program takes goto statements to their -logical conclusion. The layout and choice of names are classic.

- -

We consider this to be a beautiful counter-example for Frank Rubin’s -letter to ACM form titled: “GOTO Considered Harmful” Considered Harmful. -See the Communications of the ACM, March 1987, Page 195-196.

- -

Copyright © 1987, Landon Curt Noll & Larry Bassel. -All Rights Reserved. Permission for personal, educational or non-profit use is -granted provided this this copyright and notice are included in its entirety -and remains unaltered. All other uses must receive prior permission in writing -from both Landon Curt Noll and Larry Bassel.

diff --git a/1987/hines/hint.text b/1987/hines/hint.txt similarity index 85% rename from 1987/hines/hint.text rename to 1987/hines/hint.txt index 640c73a24..87362df8e 100644 --- a/1987/hines/hint.text +++ b/1987/hines/hint.txt @@ -7,6 +7,12 @@ Hyattsville, MD 20781 USA +## To build: + + make all + +NOTE: The original entry may be built with "make alt". + ## Judges' comments: ### Try: @@ -21,6 +27,8 @@ We consider this to be a beautiful counter-example for Frank Rubin's letter to ACM form titled: *"GOTO Considered Harmful" Considered Harmful*. See the Communications of the ACM, March 1987, Page 195-196. +NOTE: To compile with modern compilers, you make need to: make alt. + Copyright (c) 1987, Landon Curt Noll & Larry Bassel. All Rights Reserved. Permission for personal, educational or non-profit use is granted provided this this copyright and notice are included in its entirety diff --git a/1987/hines/index.html b/1987/hines/index.html new file mode 100644 index 000000000..01027ade5 --- /dev/null +++ b/1987/hines/index.html @@ -0,0 +1,195 @@ + + + + + + + hint + + + + +

Worst Style

+

Spencer Hines
+OnLine Computer Systems
+4200 Farragut Street
+Hyattsville, MD
+20781
+USA

+

To build:

+
    make all
+

NOTE: The original entry may be built with “make alt”.

+

Judges’ comments:

+

Try:

+
hines hines.c
+

This program was designed to maximize the bother function for +structured programmers. This program takes goto statements to their +logical conclusion. The layout and choice of names are classic.

+

We consider this to be a beautiful counter-example for Frank Rubin’s +letter to ACM form titled: “GOTO Considered Harmful” Considered +Harmful. See the Communications of the ACM, March 1987, Page +195-196.

+

NOTE: To compile with modern compilers, you make need to: make +alt.

+

Copyright (c) 1987, Landon Curt Noll & Larry Bassel. All Rights +Reserved. Permission for personal, educational or non-profit use is +granted provided this this copyright and notice are included in its +entirety and remains unaltered. All other uses must receive prior +permission in writing from both Landon Curt Noll and Larry Bassel.

+ + diff --git a/1987/hines/orig.Makefile b/1987/hines/orig.Makefile new file mode 100644 index 000000000..11abeda39 --- /dev/null +++ b/1987/hines/orig.Makefile @@ -0,0 +1,30 @@ +# %W% %G% %U% +# +# 1987 makefile +# +# Copyright (c) 1987, Landon Curt Noll & Larry Bassel. +# All Rights Reserved. Permission for personal, educational or non-profit +# use is granted provided this this copyright and notice are included in its +# entirety and remains unaltered. All other uses must receive prior permission +# from Landon Curt Noll and Larry Bassel. + + +SHELL= /bin/sh +WINNERS= hines + +# for System V style systems +OPSYS= -Dindex=strchr +# for BSD style systems +#OPSYS= + +all: ${WINNERS} + +hines: hines.c + cc $? -o $@ + +clean: + rm -f core +clobber: clean + rm -f ${WINNERS} +install: all + @echo are you kidding'??' diff --git a/1987/index.html b/1987/index.html new file mode 100644 index 000000000..ca39da7f4 --- /dev/null +++ b/1987/index.html @@ -0,0 +1,187 @@ + + + + + + + README + + + + +

1987 marked the “The Fourth International Obfuscated C Code +Contest”

+

Copyright (c) 1987, Landon Curt Noll & Larry Bassel. All Rights +Reserved. Permission for personal, educational or non-profit use is +granted provided this this copyright and notice are included in its +entirety and remains unaltered. All other uses must receive prior +permission in writing from both Landon Curt Noll and Larry Bassel.

+

The rules for 1987 suggested even more categories than in 1986. Hints +for what to do and not to do were also given in the rules. For example, +a simple excessive abuse of /lib/cpp was discouraged unless the abuse +was unusual. The mailboxes for the contest were moved from nsc to +amdahl. The practice of posting a preliminary set of rules for the next +year was started this year.

+

Rules and results were posted to comp.lang.c, comp.unix.wizards with +an announcement in news.announce.important. Micro/Systems Journal +published the 1987 winners. Mark Horton included a version of the 1987 +winners in an appendix of his C book. The first announcement of winners +at the Summer 87 Usenix was helped by a small fly that danced all over +the foils.

+ + diff --git a/1987/korn/Makefile b/1987/korn/Makefile index 30c4e2b00..7ff3b05d0 100644 --- a/1987/korn/Makefile +++ b/1987/korn/Makefile @@ -1,30 +1,592 @@ -# %W% %G% %U% +#!/usr/bin/env make # -# 1987 makefile +# IOCCC 1987 winning entry - korn + +################################################################################ # -# Copyright (c) 1987, Landon Curt Noll & Larry Bassel. -# All Rights Reserved. Permission for personal, educational or non-profit -# use is granted provided this this copyright and notice are included in its -# entirety and remains unaltered. All other uses must receive prior permission -# from Landon Curt Noll and Larry Bassel. +# An Historical Makefile NOTE: +# +# The orig.Makefile, if it exits, is the original Makefile before this IOCCC +# year directory was reworked so that entries are in separate directories. +# This also applies to any orig.ansi.mk and orig.common.mk files. +# +# Several Makefiles were modified / formed in 2022, and as such it may have +# elements that are not historically compatible with way entries were built. +# The orig.Makefile, if it exits, is a copy of the pre-modified Makefile. +# +# Regarding individual entries: +# +# IOCCC winning entry code may not work on your system. Even with standards, +# conditions and build environments change, especially when it comes to more +# extreme code such you might find in an IOCCC winner. Moreover, what was +# allowed and liked in one IOCCC contest may no longer be liked/allowed in +# later IOCCC years. +# +# Corrections on winning author and fixing typos in remarks are VERY WELCOME. +# +# GitHub pull requests are welcome: +# +# If you have a patch that might make running an entry work in modern Unix-like +# environments, please create a GitHub pull request for the IOCCC judgess to +# consider. +# +# Suggestions and corrections regarding Makefiles, winning author information, +# fixing typos in remarks, and code patches are welcome via opening a GitHub +# issue or better yet, by creating a GitHub pull request for the IOCCC judges +# to consider. To form a GitHub issue or GitHub pull, please visit: +# +# https://github.com/ioccc-src/winner +# +################################################################################ + +# This work by Landon Curt Noll and Leonid A. Broukhis is licensed under: +# +# Creative Commons Attribution-ShareAlike 3.0 Unported License. +# +# See: http://creativecommons.org/licenses/by-sa/3.0/ -SHELL= /bin/sh -WINNERS= korn +############################# +# shell used by this Makefile +############################# +# +SHELL= /bin/bash -# for System V style systems -OPSYS= -Dindex=strchr -# for BSD style systems -#OPSYS= +####################### +# common tool locations +####################### +# +A2P= a2p +AR= ar +ASA= asa +AT= at +ATQ= atq +ATRM= atrm +AWK= awk +BANNER= banner +BASE64= base64 +BASENAME= basename +BATCH= batch +BC= bc +BINHEX= binhex +BISON= bison +BUNZIP2= bunzip2 +BZCAT= bzcat +BZCMP= bzcmp +BZDIFF= bzdiff +BZEGREP= bzegrep +BZFGREP= bzfgrep +BZGREP= bzgrep +BZIP2= bzip2 +BZLESS= bzless +BZMORE= bzmore +C2PH= c2ph +C89= c89 +C99= c99 +CAL= cal +CALC= calc +CAT= cat +CD= cd +CHFLAGS= chflags +CHGRP= chgrp +CHMOD= chmod +CKSUM= cksum +CLANG= clang +CLANG_PLUSPLUS= clang++ +CLEAR= clear +CMP= cmp +COL= col +COLLDEF= colldef +COLRM= colrm +COLUMN= column +COMPRESS= compress +CP= cp +CPIO= cpio +CPP= cpp +CRC32= crc32 +CSH= csh +CSPLIT= csplit +CURL= curl +CUT= cut +C_PLUSPLUS= c++ +C_PLUSPLUS_FILT= c++filt +DATE= date +DC= dc +DD= dd +DF= df +DIFF3= diff3 +DIFF= diff +DIG= dig +DIRNAME= dirname +ED= ed +EGREP= egrep +ENV= env +EQN= eqn +ETAGS= etags +EXPECT= expect +EXPR= expr +FALSE= false +FGREP= fgrep +FILE= file +FIND2PERL= find2perl +FIND= find +FLEX= flex +FLEX_PLUSPLUS= flex++ +FMT= fmt +FOLD= fold +FS_USAGE= fs_usage +FUNZIP= funzip +FUSER= fuser +GCC= gcc +GDIFFMK= gdiffmk +GENCAT= gencat +GENSTRINGS= genstrings +GETOPT= getopt +GETOPTS= getopts +GNUMAKE= gnumake +GREP= grep +GROFF= groff +GROFFER= groffer +GROG= grog +GROPS= grops +GROTTY= grotty +GUNZIP= gunzip +GVIM= gvim +GZCAT= gzcat +GZEXE= gzexe +GZIP_PROG= gzip +G_PLUSPLUS= g++ +H2PH= h2ph +H2XS= h2xs +HASH= hash +HEAD= head +HOSTNAME_PROG= hostname +ICONV= iconv +ID= id +INDENT= indent +INFO= info +JOT= jot +KILL= kill +KSH= ksh +LAST= last +LD= ld +LESSECHO= lessecho +LEX= len +LINK= link +LN= ln +LS= ls +M4= m4 +MAKE= make +MAN= man +MKDIR= mkdir +MKFIFo= mkfifo +MKTEMP= mktemp +MV= mv +NANO= nano +NASM= nasm +NEQN= neqn +NICE= nice +NL= nl +NM= nm +NOHUP= nohup +NROFF= nroff +NSLOOKUP= nslookup +OD= od +OPENSSL= openssl +PASTE= paste +PATCH= patch +PATHCHK= pathchk +PAX= pax +PERL= perl +PICO= pico +PR= pr +PRINTENV= printenv +PS= ps +PTAR= ptar +PTARDIFF= ptardiff +PTARGREP= ptargrep +PWD= pwd +PYDOC= pydoc +PYTHON= python +PYTHONW= pythonw +READLINK= readlink +RENICE= renice +RESET= reset +REV= rev +RI= ri +RM= rm +RMDIR= rmdir +RSYNC= rsync +RUBY= ruby +RVIM= rvim +SAY= say +SCP= scp +SCREEN= screen +SCRIPT= script +SDIFF= sdiff +SED= sed +SEQ= seq +SFTP= sftp +SH= sh +SHA1= sha1 +SHA= sha +SHAR= shar +SHASUM5_18= shasum5.18 +SHASUM= shasum +SIZE= size +SLEEP= sleep +SORT= sort +SSH= ssh +STAT= stat +STRIP= strip +STTY= stty +SUM= sum +SYNC= sync +TABS= tabs +TAIL= tail +TAR= tar +TEE= tee +TEST= test +TFTP= tftp +TIDY= tidy +TIME= time +TOP= top +TOUCH= touch +TPUT= tout +TPUT= tput +TR= tr +TROFF= troff +TRUE= true +TSET= tset +TSORT= tsort +UL= ul +UNAME= uname +UNCOMPRESS= uncompress +UNEXPAND= unexpand +UNIFDEF= unifdef +UNIFDEFALL= unifdefall +UNIQ= uniq +UNITS= units +UNLINK= unlink +UNZIP= unzip +UNZIPSFX= unzipsfx +UPTIME= uptime +UUDECODE= uudecode +UUENCODE= uuencode +UUIDGEN= uuidgen +VI= vi +VIEW= view +VIM= vim +VIMDIFF= vimdiff +W= w +WAIT4PATH= wait4path +WAIT= wait +WC= wc +WGET= wget +WHAT= what +WHATIS= whatis +WHICH= which +WHO= who +WHOAMI= whoami +WHOIS= whois +WRTIE= write +XAR= xar +XARGS= xargs +XATTR= xattr +XXD= xxd +YACC= yacc +YES= yes +ZCAT= zcat +ZCMP= zcmp +ZDIFF= zdiff +ZEGREP= zegrep +ZFGREP= zfgrep +ZFORCE= zforce +ZGREP= zgrep +ZIP= zip +ZIPCLOAK= zipcloak +ZIPGREp= zipgrep +ZIPINFo= zipinfo +ZIPNOTE= zipnote +ZIPSPLIT= zipsplit +ZLESS= zless +ZMORE= zmore +ZNEW= znew +ZPRINT= zprint +ZSH= zsh -all: ${WINNERS} +# Set X11_LIBDIR to the directory where the X11 library resides +# +#X11_LIBDIR= /usr/X11R6/lib +#X11_LIBDIR= /usr/X11/lib +X11_LIBDIR= /opt/X11/lib -korn: korn.c - cc $? -o $@ +# Set X11_INCLUDEDIR to the directory where the X11 include files reside +# +#X11_INCDIR= /usr/X11R6/include +#X11_INCDIR= /usr/X11/include +X11_INCDIR= /opt/X11/include + +# Compiler warnings +# +#CWARN= +#CWARN= -Wall +#CWARN= -Wall -Wextra +#CWARN= -Wall -Wextra ${CSILENCE} +CWARN= -Wall -Wextra -pedantic ${CSILENCE} +#CWARN= -Wall -Wextra -Weverything +#CWARN= -Wall -Wextra -Weverything -pedantic +#CWARN= -Wall -Wextra -Weverything -pedantic ${CSILENCE} + +# Silence warnings that ${CWARN} would normally complain about +# +CSILENCE= -Wno-error -Wno-implicit-function-declaration -Wno-implicit-int -Dunix=1 \ + -Wno-string-plus-int +#CSILENCE= -Wno-implicit-int + +# compiler standard +# +#CSTD= +#CSTD= -ansi +CSTD= -std=gnu89 + +# compiler bit architecture +# +# Some entries require 32-bitness: +# ARCH= -m32 +# +# Some entries require 64-bitness: +# ARCH= -m64 +# +# By default we assume nothing: +# +ARCH= + +# defines that are needed to compile +# +CDEFINE= +#CDEFINE= -DIOCCC=26 + +# include files that are needed to compile +# +CINCLUDE= +#CINCLUDE= -include stdlib.h +#CINCLUDE= -include stdio.h +#CINCLUDE= -include stdlib.h -include stdio.h +#CINCLUDE= -I ${X11_INCDIR} +#CINCLUDE= -I ${HOMEBREW_PREFIX}/include/SDL2 + +# optimization +# +# Most compiles will safely use -O2. Some can use only -O1 or -O. +# A few compilers have broken optimizers or this entry make break +# under those buggy optimizers and thus you may not want anything. +# Reasonable compilers will allow for -O3. +# +#OPT= +#OPT= -O +#OPT= -O1 +#OPT= -O2 +OPT= -O3 + +# default flags for ANSI C compilation +# +CFLAGS= ${CSTD} ${CWARN} ${ARCH} ${CDEFINE} ${CINCLUDE} ${OPT} + +# Libraries needed to build +# +LIBS= +#LIBS= -lm +#LIBS= -L ${X11_LIBDIR} -lX11 +#LIBS= -L ${HOMEBREW_PREFIX}/lib -lSDL + +# ANSI compiler +# +# Set CC to the name of your ANSI compiler. +# +# Some entries seem to need gcc. If you have gcc, set +# both CC and MAY_NEED_GCC to gcc. +# +# If you do not have gcc, set CC to the name of your ANSI compiler, and +# set MAY_NEED_GCC to either ${CC} (and hope for the best) or to just : +# to disable such programs. +# +CC= cc +#CC=clang +MAY_NEED_GCC= gcc + + +############################## +# Special flags for this entry +############################## +# +ENTRY= korn +PROG= ${ENTRY} +# +OBJ= ${PROG}.o +DATA= +TARGET= ${PROG} +# +ALT_OBJ= +ALT_TARGET= + + +################# +# build the entry +################# +# +all: ${DATA} ${TARGET} + @${TRUE} + +.PHONY: alt data everything clean clobber nuke dist_clean \ + install build love haste waste make easter_egg \ + supernova deep_magic magic charon pluto + +${PROG}: ${PROG}.c + ${CC} ${CFLAGS} $< -o $@ ${LIBS} + +# alternative executable +# +alt: ${DATA} ${ALT_TARGET} + @${TRUE} + +# data files +# +data: ${DATA} + @${TRUE} + + +############### +# utility rules +############### +# +everything: all alt clean: - rm -f core + ${RM} -f ${OBJ} ${ALT_OBJ} + @-if [ -f indent.c ]; then \ + ${ECHO} ${RM} -f indent.c; \ + ${RM} -f indent.c; \ + fi + clobber: clean - rm -f ${WINNERS} -install: all - @echo are you kidding'??' + ${RM} -f ${TARGET} ${ALT_TARGET} + @-if [ -e sandwich ]; then \ + ${RM} -f sandwich; \ + echo 'ate sandwich'; \ + fi + +nuke: clobber + @${TRUE} + +dist_clean: nuke + @${TRUE} + +install: + @echo "Dr. Spock says that is not logical!" + @${TRUE} + +# you may be able to misunderstand the source by reading indent.c +# +indent.c: ${PROG}.c + @if which "${GINDENT}" >/dev/null 2>&1; then \ + ${ECHO} ${RM} -f $@; \ + ${RM} -f $@; \ + ${ECHO} "${GINDENT} < $< > $@"; \ + ${GINDENT} < $< > $@; \ + elif which "${INDENT}" >/dev/null 2>&1; then \ + ${ECHO} ${RM} -f $@; \ + ${RM} -f $@; \ + ${ECHO} "${INDENT} < $< > $@"; \ + ${INDENT} < $< > $@; \ + else \ + ${ECHO} "no intent tool found, ident $< yourself, sorry"; \ + ${ECHO} "exit 1"; \ + exit 1; \ + fi + + +################## +# 133t hacker rulz +################## +# +love: + @echo 'not war?' + @${TRUE} + +haste: + $(MAKE) waste + @${TRUE} + +waste: + @echo 'haste' + @${TRUE} + +make: + @echo 'Participate in a maker faire' + @${TRUE} + +easter_egg: + @echo you expected to often misunderstand this $${RANDOM} magic + @echo chongo '' "/\\oo/\\" + @echo Eggy + +fabricate fashion form frame manufacture produce: make + @${TRUE} + +sandwich: + @if [ `id -u` -eq 0 ]; then \ + echo 'Okay.'; \ + echo $${RANDOM}`date +%s`$${RANDOM} > $@; \ + else \ + echo 'What? Make it yourself.'; \ + exit 1; \ + fi + +# Understand the history of the Homebrew Computer Club +# as well as the West Coast Computer Faire and +# you might be confused different. :-) +# +supernova: nuke + @-if [ -r .code_anal ]; then \ + ${RM} -f .code_anal_v6; \ + else \ + echo "planet deniers, like some members of the IAU, are so cute when they try to defend their logic"; \ + fi + @echo A $@ helps ${MAKE} the elements that help form planets + @${TRUE} + +deep_magic: + @-if [ -r .code_anal ]; then \ + ccode_analysis --deep_magic 7889066cdbdf09b0408021754586e895be641cc9be29e7eafd3ca65359541f17 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + fi + @${TRUE} + +magic: deep_magic + @-if [ -r .code_anal ]; then \ + ccode_analysis --level 20003 --mode 5717175 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "If you don't eat yer meat, you can't have any pudding!"; \ + echo "How can you have any pudding if you don't eat yer meat?!"; \ + fi + @${TRUE} + +# The IOCCC resident astronomer states +# +charon: supernova + @echo $@ is a dwarf planet + @echo dwarf is a type of planet + @echo therefore IAU, $@ is a planet + +pluto: supernova + ${MAKE} charon + @echo $@ is a dwarf planet + @echo dwarf is a type of planet + @echo therefore, $@ is a planet + @echo get used to having lots of planets because a $< can ${MAKE} a lot of them diff --git a/1987/korn/hint.html b/1987/korn/hint.html deleted file mode 100644 index 8d87b6b6b..000000000 --- a/1987/korn/hint.html +++ /dev/null @@ -1,56 +0,0 @@ -

Best One Liner

- -

David Korn
-AT&T Bell Labs
-MH 3C-526B, AT&T Bell Labs
-Murray Hill, NJ
-07974
-USA

- -

Judges' comments:

- -

The Judges believe that this is the best one line entry ever received. -Compile on a UN*X system, or at least using a C implementation that -fakes it. Very few people are able to determine what this program -does by visual inspection. I suggest that you stop reading this -section right now and see if you are one of the few people who can.

- -

Several points are important to understand in this program:

- -

1) What is the symbol ‘unix’ and what is its value in the program? - Clearly ‘unix’ is not a function, and since ‘unix’ is not declared - to be a data type (such as int, char, struct foo, enum, …) - what must ‘unix’ be?

- -

2) What is the value of the symbol “have”? (hint: the value is - NOT 4 characters, or ‘h’, or a string) Consider the fact that:

- -
    char *x;
-
- -

defines a pointer to a character (i.e. an address), and that - the ‘=’ assigns things is compatible types. Since:

- -
    x = "have";
-
- -

is legal C, what type of value is “have”?

- -

3) Note that the following expressions yield the same value:

- -
    x[3]    *(x+3)    *(3+x)
-
- -

since addition is communitive. What can be said about the value:

- -
    3[x]
-
- -

David Korn’s /bin/ksh provides us with a greatly improved version of -the /bin/sh. The source for v7’s /bin/sh greatly inspired this contest.

- -

Copyright © 1987, Landon Curt Noll & Larry Bassel. -All Rights Reserved. Permission for personal, educational or non-profit use is -granted provided this this copyright and notice are included in its entirety -and remains unaltered. All other uses must receive prior permission in writing -from both Landon Curt Noll and Larry Bassel.

diff --git a/1987/korn/hint.text b/1987/korn/hint.txt similarity index 98% rename from 1987/korn/hint.text rename to 1987/korn/hint.txt index 1f748e0e5..f934bd868 100644 --- a/1987/korn/hint.text +++ b/1987/korn/hint.txt @@ -7,6 +7,10 @@ Murray Hill, NJ 07974 USA +## To build: + + make all + ## Judges' comments: The Judges believe that this is the best one line entry ever received. diff --git a/1987/korn/index.html b/1987/korn/index.html new file mode 100644 index 000000000..2940032e2 --- /dev/null +++ b/1987/korn/index.html @@ -0,0 +1,211 @@ + + + + + + + hint + + + + +

Best One Liner

+

David Korn
+AT&T Bell Labs
+MH 3C-526B, AT&T Bell Labs
+Murray Hill, NJ
+07974
+USA

+

To build:

+
    make all
+

Judges’ comments:

+

The Judges believe that this is the best one line entry ever +received. Compile on a UN*X system, or at least using a C implementation +that fakes it. Very few people are able to determine what this program +does by visual inspection. I suggest that you stop reading this section +right now and see if you are one of the few people who can.

+

Several points are important to understand in this program:

+
    +
  1. What is the symbol ‘unix’ and what is its value in the program? +Clearly ‘unix’ is not a function, and since ‘unix’ is not declared to be +a data type (such as int, char, struct foo, enum, …) what must ‘unix’ +be?

  2. +
  3. What is the value of the symbol “have”? (hint: the value is NOT 4 +characters, or ‘h’, or a string) Consider the fact that:

    +
     char *x;
  4. +
+

defines a pointer to a character (i.e. an address), and that the ‘=’ +assigns things is compatible types. Since:

+
    x = "have";
+

is legal C, what type of value is “have”?

+
    +
  1. Note that the following expressions yield the same value:

    +
     x[3]    *(x+3)    *(3+x)
    +

    since addition is communitive. What can be said about the value:

    +
     3[x]
  2. +
+

David Korn’s /bin/ksh provides us with a greatly improved version of +the /bin/sh. The source for v7’s /bin/sh greatly inspired this +contest.

+

Copyright (c) 1987, Landon Curt Noll & Larry Bassel. All Rights +Reserved. Permission for personal, educational or non-profit use is +granted provided this this copyright and notice are included in its +entirety and remains unaltered. All other uses must receive prior +permission in writing from both Landon Curt Noll and Larry Bassel.

+ + diff --git a/1987/korn/orig.Makefile b/1987/korn/orig.Makefile new file mode 100644 index 000000000..30c4e2b00 --- /dev/null +++ b/1987/korn/orig.Makefile @@ -0,0 +1,30 @@ +# %W% %G% %U% +# +# 1987 makefile +# +# Copyright (c) 1987, Landon Curt Noll & Larry Bassel. +# All Rights Reserved. Permission for personal, educational or non-profit +# use is granted provided this this copyright and notice are included in its +# entirety and remains unaltered. All other uses must receive prior permission +# from Landon Curt Noll and Larry Bassel. + + +SHELL= /bin/sh +WINNERS= korn + +# for System V style systems +OPSYS= -Dindex=strchr +# for BSD style systems +#OPSYS= + +all: ${WINNERS} + +korn: korn.c + cc $? -o $@ + +clean: + rm -f core +clobber: clean + rm -f ${WINNERS} +install: all + @echo are you kidding'??' diff --git a/1987/lievaart/Makefile b/1987/lievaart/Makefile index 06208e66b..24921ca33 100644 --- a/1987/lievaart/Makefile +++ b/1987/lievaart/Makefile @@ -1,33 +1,602 @@ -# %W% %G% %U% +#!/usr/bin/env make # -# 1987 makefile +# IOCCC 1987 winning entry - lievaart + +################################################################################ # -# Copyright (c) 1987, Landon Curt Noll & Larry Bassel. -# All Rights Reserved. Permission for personal, educational or non-profit -# use is granted provided this this copyright and notice are included in its -# entirety and remains unaltered. All other uses must receive prior permission -# from Landon Curt Noll and Larry Bassel. +# An Historical Makefile NOTE: +# +# The orig.Makefile, if it exits, is the original Makefile before this IOCCC +# year directory was reworked so that entries are in separate directories. +# This also applies to any orig.ansi.mk and orig.common.mk files. +# +# Several Makefiles were modified / formed in 2022, and as such it may have +# elements that are not historically compatible with way entries were built. +# The orig.Makefile, if it exits, is a copy of the pre-modified Makefile. +# +# Regarding individual entries: +# +# IOCCC winning entry code may not work on your system. Even with standards, +# conditions and build environments change, especially when it comes to more +# extreme code such you might find in an IOCCC winner. Moreover, what was +# allowed and liked in one IOCCC contest may no longer be liked/allowed in +# later IOCCC years. +# +# Corrections on winning author and fixing typos in remarks are VERY WELCOME. +# +# GitHub pull requests are welcome: +# +# If you have a patch that might make running an entry work in modern Unix-like +# environments, please create a GitHub pull request for the IOCCC judgess to +# consider. +# +# Suggestions and corrections regarding Makefiles, winning author information, +# fixing typos in remarks, and code patches are welcome via opening a GitHub +# issue or better yet, by creating a GitHub pull request for the IOCCC judges +# to consider. To form a GitHub issue or GitHub pull, please visit: +# +# https://github.com/ioccc-src/winner +# +################################################################################ + +# This work by Landon Curt Noll and Leonid A. Broukhis is licensed under: +# +# Creative Commons Attribution-ShareAlike 3.0 Unported License. +# +# See: http://creativecommons.org/licenses/by-sa/3.0/ -SHELL= /bin/sh -WINNERS= lievaart lievaart2 +############################# +# shell used by this Makefile +############################# +# +SHELL= /bin/bash -# for System V style systems -OPSYS= -Dindex=strchr -# for BSD style systems -#OPSYS= +####################### +# common tool locations +####################### +# +A2P= a2p +AR= ar +ASA= asa +AT= at +ATQ= atq +ATRM= atrm +AWK= awk +BANNER= banner +BASE64= base64 +BASENAME= basename +BATCH= batch +BC= bc +BINHEX= binhex +BISON= bison +BUNZIP2= bunzip2 +BZCAT= bzcat +BZCMP= bzcmp +BZDIFF= bzdiff +BZEGREP= bzegrep +BZFGREP= bzfgrep +BZGREP= bzgrep +BZIP2= bzip2 +BZLESS= bzless +BZMORE= bzmore +C2PH= c2ph +C89= c89 +C99= c99 +CAL= cal +CALC= calc +CAT= cat +CD= cd +CHFLAGS= chflags +CHGRP= chgrp +CHMOD= chmod +CKSUM= cksum +CLANG= clang +CLANG_PLUSPLUS= clang++ +CLEAR= clear +CMP= cmp +COL= col +COLLDEF= colldef +COLRM= colrm +COLUMN= column +COMPRESS= compress +CP= cp +CPIO= cpio +CPP= cpp +CRC32= crc32 +CSH= csh +CSPLIT= csplit +CURL= curl +CUT= cut +C_PLUSPLUS= c++ +C_PLUSPLUS_FILT= c++filt +DATE= date +DC= dc +DD= dd +DF= df +DIFF3= diff3 +DIFF= diff +DIG= dig +DIRNAME= dirname +ED= ed +EGREP= egrep +ENV= env +EQN= eqn +ETAGS= etags +EXPECT= expect +EXPR= expr +FALSE= false +FGREP= fgrep +FILE= file +FIND2PERL= find2perl +FIND= find +FLEX= flex +FLEX_PLUSPLUS= flex++ +FMT= fmt +FOLD= fold +FS_USAGE= fs_usage +FUNZIP= funzip +FUSER= fuser +GCC= gcc +GDIFFMK= gdiffmk +GENCAT= gencat +GENSTRINGS= genstrings +GETOPT= getopt +GETOPTS= getopts +GNUMAKE= gnumake +GREP= grep +GROFF= groff +GROFFER= groffer +GROG= grog +GROPS= grops +GROTTY= grotty +GUNZIP= gunzip +GVIM= gvim +GZCAT= gzcat +GZEXE= gzexe +GZIP_PROG= gzip +G_PLUSPLUS= g++ +H2PH= h2ph +H2XS= h2xs +HASH= hash +HEAD= head +HOSTNAME_PROG= hostname +ICONV= iconv +ID= id +INDENT= indent +INFO= info +JOT= jot +KILL= kill +KSH= ksh +LAST= last +LD= ld +LESSECHO= lessecho +LEX= len +LINK= link +LN= ln +LS= ls +M4= m4 +MAKE= make +MAN= man +MKDIR= mkdir +MKFIFo= mkfifo +MKTEMP= mktemp +MV= mv +NANO= nano +NASM= nasm +NEQN= neqn +NICE= nice +NL= nl +NM= nm +NOHUP= nohup +NROFF= nroff +NSLOOKUP= nslookup +OD= od +OPENSSL= openssl +PASTE= paste +PATCH= patch +PATHCHK= pathchk +PAX= pax +PERL= perl +PICO= pico +PR= pr +PRINTENV= printenv +PS= ps +PTAR= ptar +PTARDIFF= ptardiff +PTARGREP= ptargrep +PWD= pwd +PYDOC= pydoc +PYTHON= python +PYTHONW= pythonw +READLINK= readlink +RENICE= renice +RESET= reset +REV= rev +RI= ri +RM= rm +RMDIR= rmdir +RSYNC= rsync +RUBY= ruby +RVIM= rvim +SAY= say +SCP= scp +SCREEN= screen +SCRIPT= script +SDIFF= sdiff +SED= sed +SEQ= seq +SFTP= sftp +SH= sh +SHA1= sha1 +SHA= sha +SHAR= shar +SHASUM5_18= shasum5.18 +SHASUM= shasum +SIZE= size +SLEEP= sleep +SORT= sort +SSH= ssh +STAT= stat +STRIP= strip +STTY= stty +SUM= sum +SYNC= sync +TABS= tabs +TAIL= tail +TAR= tar +TEE= tee +TEST= test +TFTP= tftp +TIDY= tidy +TIME= time +TOP= top +TOUCH= touch +TPUT= tout +TPUT= tput +TR= tr +TROFF= troff +TRUE= true +TSET= tset +TSORT= tsort +UL= ul +UNAME= uname +UNCOMPRESS= uncompress +UNEXPAND= unexpand +UNIFDEF= unifdef +UNIFDEFALL= unifdefall +UNIQ= uniq +UNITS= units +UNLINK= unlink +UNZIP= unzip +UNZIPSFX= unzipsfx +UPTIME= uptime +UUDECODE= uudecode +UUENCODE= uuencode +UUIDGEN= uuidgen +VI= vi +VIEW= view +VIM= vim +VIMDIFF= vimdiff +W= w +WAIT4PATH= wait4path +WAIT= wait +WC= wc +WGET= wget +WHAT= what +WHATIS= whatis +WHICH= which +WHO= who +WHOAMI= whoami +WHOIS= whois +WRTIE= write +XAR= xar +XARGS= xargs +XATTR= xattr +XXD= xxd +YACC= yacc +YES= yes +ZCAT= zcat +ZCMP= zcmp +ZDIFF= zdiff +ZEGREP= zegrep +ZFGREP= zfgrep +ZFORCE= zforce +ZGREP= zgrep +ZIP= zip +ZIPCLOAK= zipcloak +ZIPGREp= zipgrep +ZIPINFo= zipinfo +ZIPNOTE= zipnote +ZIPSPLIT= zipsplit +ZLESS= zless +ZMORE= zmore +ZNEW= znew +ZPRINT= zprint +ZSH= zsh -all: ${WINNERS} +# Set X11_LIBDIR to the directory where the X11 library resides +# +#X11_LIBDIR= /usr/X11R6/lib +#X11_LIBDIR= /usr/X11/lib +X11_LIBDIR= /opt/X11/lib -lievaart: lievaart.c - cc $? -o $@ -# not an official entry -lievaart2: lievaart2.c - cc $? -o $@ +# Set X11_INCLUDEDIR to the directory where the X11 include files reside +# +#X11_INCDIR= /usr/X11R6/include +#X11_INCDIR= /usr/X11/include +X11_INCDIR= /opt/X11/include + +# Compiler warnings +# +#CWARN= +#CWARN= -Wall +#CWARN= -Wall -Wextra +CWARN= -Wall -Wextra ${CSILENCE} +#CWARN= -Wall -Wextra -pedantic ${CSILENCE} +#CWARN= -Wall -Wextra -Weverything +#CWARN= -Wall -Wextra -Weverything -pedantic +#CWARN= -Wall -Wextra -Weverything -pedantic ${CSILENCE} + +# Silence warnings that ${CWARN} would normally complain about +# +CSILENCE= -Wno-error -Wno-implicit-function-declaration -Wno-implicit-int +#CSILENCE= -Wno-implicit-int + +# compiler standard +# +#CSTD= +#CSTD= -ansi +CSTD= -std=gnu89 + +# compiler bit architecture +# +# Some entries require 32-bitness: +# ARCH= -m32 +# +# Some entries require 64-bitness: +# ARCH= -m64 +# +# By default we assume nothing: +# +ARCH= + +# defines that are needed to compile +# +CDEFINE= +#CDEFINE= -DIOCCC=26 + +# include files that are needed to compile +# +CINCLUDE= +#CINCLUDE= -include stdlib.h +#CINCLUDE= -include stdio.h +#CINCLUDE= -include stdlib.h -include stdio.h +#CINCLUDE= -I ${X11_INCDIR} +#CINCLUDE= -I ${HOMEBREW_PREFIX}/include/SDL2 + +# optimization +# +# Most compiles will safely use -O2. Some can use only -O1 or -O. +# A few compilers have broken optimizers or this entry make break +# under those buggy optimizers and thus you may not want anything. +# Reasonable compilers will allow for -O3. +# +#OPT= +#OPT= -O +#OPT= -O1 +#OPT= -O2 +OPT= -O3 + +# default flags for ANSI C compilation +# +CFLAGS= ${CSTD} ${CWARN} ${ARCH} ${CDEFINE} ${CINCLUDE} ${OPT} + +# Libraries needed to build +# +LIBS= +#LIBS= -lm +#LIBS= -L ${X11_LIBDIR} -lX11 +#LIBS= -L ${HOMEBREW_PREFIX}/lib -lSDL + +# ANSI compiler +# +# Set CC to the name of your ANSI compiler. +# +# Some entries seem to need gcc. If you have gcc, set +# both CC and MAY_NEED_GCC to gcc. +# +# If you do not have gcc, set CC to the name of your ANSI compiler, and +# set MAY_NEED_GCC to either ${CC} (and hope for the best) or to just : +# to disable such programs. +# +CC= cc +#CC=clang +MAY_NEED_GCC= gcc + + +############################## +# Special flags for this entry +############################## +# +ENTRY= lievaart +PROG= ${ENTRY} +# +OBJ= ${PROG}.o ${PROG}2.o +DATA= +TARGET= ${PROG} ${PROG}2 +# +ALT_OBJ= ${PROG}.orig.o ${PROG}2.orig.o +ALT_TARGET= ${PROG}.orig ${PROG}2.orig + + +################# +# build the entry +################# +# +all: ${DATA} ${TARGET} + @${TRUE} + +.PHONY: alt data everything clean clobber nuke dist_clean \ + install build love haste waste make easter_egg \ + supernova deep_magic magic charon pluto + +${PROG}: ${PROG}.c + ${CC} ${CFLAGS} $< -o $@ ${LIBS} + +${PROG}2: ${PROG}2.c + ${CC} ${CFLAGS} -Wno-format $< -o $@ ${LIBS} + +# alternative executable +# +alt: ${DATA} ${ALT_TARGET} + @${TRUE} + +${PROG}.orig: ${PROG}.orig.c + @echo "NOTE: The original source may not compile using modern compilers." + ${CC} ${CFLAGS} $< -o $@ ${LIBS} + +${PROG}2.orig: ${PROG}2.orig.c + @echo "NOTE: The original source may not compile using modern compilers." + ${CC} ${CFLAGS} $< -o $@ ${LIBS} + +# data files +# +data: ${DATA} + @${TRUE} + + +############### +# utility rules +############### +# +everything: all alt clean: - rm -f core + ${RM} -f ${OBJ} ${ALT_OBJ} + @-if [ -f indent.c ]; then \ + ${ECHO} ${RM} -f indent.c; \ + ${RM} -f indent.c; \ + fi + clobber: clean - rm -f ${WINNERS} -install: all - @echo are you kidding'??' + ${RM} -f ${TARGET} ${ALT_TARGET} + @-if [ -e sandwich ]; then \ + ${RM} -f sandwich; \ + echo 'ate sandwich'; \ + fi + +nuke: clobber + @${TRUE} + +dist_clean: nuke + @${TRUE} + +install: + @echo "Dr. Spock says that is not logical!" + @${TRUE} + +# you may be able to misunderstand the source by reading indent.c +# +indent.c: ${PROG}.c + @if which "${GINDENT}" >/dev/null 2>&1; then \ + ${ECHO} ${RM} -f $@; \ + ${RM} -f $@; \ + ${ECHO} "${GINDENT} < $< > $@"; \ + ${GINDENT} < $< > $@; \ + elif which "${INDENT}" >/dev/null 2>&1; then \ + ${ECHO} ${RM} -f $@; \ + ${RM} -f $@; \ + ${ECHO} "${INDENT} < $< > $@"; \ + ${INDENT} < $< > $@; \ + else \ + ${ECHO} "no intent tool found, ident $< yourself, sorry"; \ + ${ECHO} "exit 1"; \ + exit 1; \ + fi + + +################## +# 133t hacker rulz +################## +# +love: + @echo 'not war?' + @${TRUE} + +haste: + $(MAKE) waste + @${TRUE} + +waste: + @echo 'haste' + @${TRUE} + +make: + @echo 'Participate in a maker faire' + @${TRUE} + +easter_egg: + @echo you expected to often misunderstand this $${RANDOM} magic + @echo chongo '' "/\\oo/\\" + @echo Eggy + +fabricate fashion form frame manufacture produce: make + @${TRUE} + +sandwich: + @if [ `id -u` -eq 0 ]; then \ + echo 'Okay.'; \ + echo $${RANDOM}`date +%s`$${RANDOM} > $@; \ + else \ + echo 'What? Make it yourself.'; \ + exit 1; \ + fi + +# Understand the history of the Homebrew Computer Club +# as well as the West Coast Computer Faire and +# you might be confused different. :-) +# +supernova: nuke + @-if [ -r .code_anal ]; then \ + ${RM} -f .code_anal_v6; \ + else \ + echo "planet deniers, like some members of the IAU, are so cute when they try to defend their logic"; \ + fi + @echo A $@ helps ${MAKE} the elements that help form planets + @${TRUE} + +deep_magic: + @-if [ -r .code_anal ]; then \ + ccode_analysis --deep_magic 7889066cdbdf09b0408021754586e895be641cc9be29e7eafd3ca65359541f17 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + fi + @${TRUE} + +magic: deep_magic + @-if [ -r .code_anal ]; then \ + ccode_analysis --level 20003 --mode 5717175 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "If you don't eat yer meat, you can't have any pudding!"; \ + echo "How can you have any pudding if you don't eat yer meat?!"; \ + fi + @${TRUE} + +# The IOCCC resident astronomer states +# +charon: supernova + @echo $@ is a dwarf planet + @echo dwarf is a type of planet + @echo therefore IAU, $@ is a planet + +pluto: supernova + ${MAKE} charon + @echo $@ is a dwarf planet + @echo dwarf is a type of planet + @echo therefore, $@ is a planet + @echo get used to having lots of planets because a $< can ${MAKE} a lot of them diff --git a/1987/lievaart/hint.html b/1987/lievaart/hint.html deleted file mode 100644 index 855a0f5de..000000000 --- a/1987/lievaart/hint.html +++ /dev/null @@ -1,36 +0,0 @@ -

Grand Prize

- -

Roemer B. Lievaart
-VU Informatica
-Churchilllaan 173-IV
-Amsterdam, The Netherlands

- -

Judges' remarks:

- -

We believe that you too will be amazed at just how much power Mr. Lievaart -packed into 1024 bytes!

- -

This Plays the game of reversi (Othello)! Compile and run. It then -asks for a playing level. Enter 0-10 (easy-hard). It then asks for -your move. A move is a number within 11-88, or a 99 to pass. Illegal -moves (except for an illegal pass) are rejected. Then the computer -does its move (or a 0 to pass), until the board is full.

- -

It plays rather well, for such a small program! Lievaart had to leave out the -board printing routine, so you’ll have to take a real game board to -play it. … Also due to space-limitations (the rules for 1987 had a -limit of 1024 byes), Lievaart took out the passing-handler, which -makes its ending-game rather poor. But further it knows all the -rules, uses alpha-beta pruning, and it plays f.i. on mobility(!). -Most important: it can play a pretty good game of Reversi!

- -

The Author was kind enough to supply the fully functional version of the -program. The file lievaart2.c contains what the program would have -been without the size restriction. This version has the full end game -logic and displays the board after each move!

- -

Copyright © 1987, Landon Curt Noll & Larry Bassel. -All Rights Reserved. Permission for personal, educational or non-profit use is -granted provided this this copyright and notice are included in its entirety -and remains unaltered. All other uses must receive prior permission in writing -from both Landon Curt Noll and Larry Bassel.

diff --git a/1987/lievaart/hint.text b/1987/lievaart/hint.txt similarity index 91% rename from 1987/lievaart/hint.text rename to 1987/lievaart/hint.txt index 753f85a42..4fdb929ff 100644 --- a/1987/lievaart/hint.text +++ b/1987/lievaart/hint.txt @@ -5,6 +5,11 @@ VU Informatica Churchilllaan 173-IV Amsterdam, The Netherlands +## To build: + + make all + +NOTE: The original entry may be built with "make alt". ## Judges' remarks: @@ -30,6 +35,8 @@ program. The file lievaart2.c contains what the program would have been without the size restriction. This version has the full end game logic and displays the board after each move! +NOTE: This entry requires a non-standard K&R C compiler to compile. + Copyright (c) 1987, Landon Curt Noll & Larry Bassel. All Rights Reserved. Permission for personal, educational or non-profit use is granted provided this this copyright and notice are included in its entirety diff --git a/1987/lievaart/index.html b/1987/lievaart/index.html new file mode 100644 index 000000000..9476a239c --- /dev/null +++ b/1987/lievaart/index.html @@ -0,0 +1,202 @@ + + + + + + + hint + + + + +

Grand Prize

+

Roemer B. Lievaart
+VU Informatica
+Churchilllaan 173-IV
+Amsterdam, The Netherlands

+

To build:

+
    make all
+

NOTE: The original entry may be built with “make alt”.

+

Judges’ remarks:

+

We believe that you too will be amazed at just how much power +Mr. Lievaart packed into 1024 bytes!

+

This Plays the game of reversi (Othello)! Compile and run. It then +asks for a playing level. Enter 0-10 (easy-hard). It then asks for your +move. A move is a number within 11-88, or a 99 to pass. Illegal moves +(except for an illegal pass) are rejected. Then the computer does its +move (or a 0 to pass), until the board is full.

+

It plays rather well, for such a small program! Lievaart had to leave +out the board printing routine, so you’ll have to take a real game board +to play it. … Also due to space-limitations (the rules for 1987 had a +limit of 1024 byes), Lievaart took out the passing-handler, which makes +its ending-game rather poor. But further it knows all the rules, uses +alpha-beta pruning, and it plays f.i. on mobility(!). Most important: it +can play a pretty good game of Reversi!

+

The Author was kind enough to supply the fully functional version of +the program. The file lievaart2.c contains what the program would have +been without the size restriction. This version has the full end game +logic and displays the board after each move!

+

NOTE: This entry requires a non-standard K&R C compiler to +compile.

+

Copyright (c) 1987, Landon Curt Noll & Larry Bassel. All Rights +Reserved. Permission for personal, educational or non-profit use is +granted provided this this copyright and notice are included in its +entirety and remains unaltered. All other uses must receive prior +permission in writing from both Landon Curt Noll and Larry Bassel.

+ + diff --git a/1987/lievaart/lievaart.c b/1987/lievaart/lievaart.c index 0a2473823..90df1a3fa 100644 --- a/1987/lievaart/lievaart.c +++ b/1987/lievaart/lievaart.c @@ -1,12 +1,11 @@ -#define D define -#D Y return -#D R for -#D e while -#D I printf -#D l int -#D C y=v+111;H(x,v)*y++= *x -#D H(a,b)R(a=b+11;au){R(w=i=0;i<4;i++)w+=(m=v[h[i]])==f?300:m==q?-300:(t=v[ih[i]])==f?-50 diff --git a/1987/lievaart/lievaart.orig.c b/1987/lievaart/lievaart.orig.c new file mode 100644 index 000000000..0a2473823 --- /dev/null +++ b/1987/lievaart/lievaart.orig.c @@ -0,0 +1,20 @@ +#define D define +#D Y return +#D R for +#D e while +#D I printf +#D l int +#D C y=v+111;H(x,v)*y++= *x +#D H(a,b)R(a=b+11;au){R(w=i=0;i<4;i++)w+=(m=v[h[i]])==f?300:m==q?-300:(t=v[ih[i]])==f?-50 +:t==q?50:0;return w;}H(z,0){if(GZ(v,z,f,100)){c++;w= -S(d+1,n,q,-b,-bw);if(w>bw +){zb=z;bw=w;if(w>=b||w>=8003)Y w;}}}if(!c){bz=0;C;Y-S(d+1,n,q,-b,-bw);}bz=zb;Y +d>=u-1?bw+(c<<3):bw;}main(){R(;t<1100;t+=100)R(m=0;m<100;m++)V[t+m]=m<11||m>88 +||(m+1)%10<2?3:0;V[44]=V[55]=1;V[45]=V[54]=2;I("Level:");s(u);e(lv>0){do{I("Yo\ +u:");s(m);}e(!GZ(V,m,2,0)&&m!=99);if(m!=99)lv--;if(lv<15&&u<10)u+=2;I("Wait\n") +;I("Value:%d\n",S(0,V,1,-9000,9000));I("move: %d\n",(lv-=GZ(V,bz,1,0),bz));}}GZ +(v,z,f,o)l*v;{l*j,q=3-f,g=0,i,h,*k=v+z;if(*k==0)R(i=7;i>=0;i--){j=k+(h=r[i]);e( +*j==q)j+=h;if(*j==f&&j-h!=k){if(!g){g=1;C;}e(j!=k)*((j-=h)+o)=f;}}Y g;} diff --git a/1987/lievaart/lievaart2.c b/1987/lievaart/lievaart2.c index 086799bca..cb05bfc59 100644 --- a/1987/lievaart/lievaart2.c +++ b/1987/lievaart/lievaart2.c @@ -1,15 +1,14 @@ -#define D define -#D Y return -#D R for -#D e while -#D I printf -#D l int -#D W if -#D C y=v+111;H(x,v)*y++= *x -#D H(a,b)R(a=b+11;au){R(w=i=0;i<4;i++)w+=(m=v[h[i]])==f?300:m==q?-300:(t=v[ih[i]])==f?-50: +t==q?50:0;Y w;}H(z,0){W(E(v,z,f,100)){c++;w= -S(d+1,n,q,0,-b,-j);W(w>j){g=bz=z; +j=w;W(w>=b||w>=8003)Y w;}}}W(!c){g=0;W(_){H(x,v)c+= *x==f?1:*x==3-f?-1:0;Y c>0? +8000+c:c-8000;}C;j= -S(d+1,n,q,1,-b,-j);}bz=g;Y d>=u-1?j+(c<<3):j;}main(){R(;t< +1600;t+=100)R(m=0;m<100;m++)V[t+m]=m<11||m>88||(m+1)%10<2?3:0;I("Level:");V[44] +=V[55]=1;V[45]=V[54]=2;s(u);e(lv>0){Z do{I("You:");s(m);}e(!E(V,m,2,0)&&m!=99); +W(m!=99)lv--;W(lv<15&&u<10)u+=2;U("Wait\n");I("Value:%d\n",S(0,V,1,0,-9000,9000 +));I("move: %d\n",(lv-=E(V,bz,1,0),bz));}}E(v,z,f,o)l*v;{l*j,q=3-f,g=0,i,w,*k=v ++z;W(*k==0)R(i=7;i>=0;i--){j=k+(w=r[i]);e(*j==q)j+=w;W(*j==f&&j-w!=k){W(!g){g=1 +;C;}e(j!=k)*((j-=w)+o)=f;}}Y g;} diff --git a/1987/lievaart/orig.Makefile b/1987/lievaart/orig.Makefile new file mode 100644 index 000000000..06208e66b --- /dev/null +++ b/1987/lievaart/orig.Makefile @@ -0,0 +1,33 @@ +# %W% %G% %U% +# +# 1987 makefile +# +# Copyright (c) 1987, Landon Curt Noll & Larry Bassel. +# All Rights Reserved. Permission for personal, educational or non-profit +# use is granted provided this this copyright and notice are included in its +# entirety and remains unaltered. All other uses must receive prior permission +# from Landon Curt Noll and Larry Bassel. + + +SHELL= /bin/sh +WINNERS= lievaart lievaart2 + +# for System V style systems +OPSYS= -Dindex=strchr +# for BSD style systems +#OPSYS= + +all: ${WINNERS} + +lievaart: lievaart.c + cc $? -o $@ +# not an official entry +lievaart2: lievaart2.c + cc $? -o $@ + +clean: + rm -f core +clobber: clean + rm -f ${WINNERS} +install: all + @echo are you kidding'??' diff --git a/1987/orig.Makefile b/1987/orig.Makefile new file mode 100644 index 000000000..5948a73e0 --- /dev/null +++ b/1987/orig.Makefile @@ -0,0 +1,77 @@ +#!/usr/bin/env make +# +# 1987 makefile +# +# This work by Landon Curt Noll, Simon Cooper, and Leonid A. Broukhis +# is licensed under: +# +# Creative Commons Attribution-ShareAlike 3.0 Unported License. +# +# See: http://creativecommons.org/licenses/by-sa/3.0/ + + +################ +# tool locations +################ +# +SHELL= /bin/bash +CP= cp +CPP= cpp +GUNZIP= gunzip +LD= ld +MAKE= make +RM= rm +SED= sed +TAR= tar +TRUE= true + +# for System V style systems +OPSYS= -Dindex=strchr +# for BSD style systems +#OPSYS= + +# ANSI compiler +# +# Set CC to the name of your ANSI compiler. +# +CC= cc + + +############### +# IOCCC winners +############### +# +WINNERS= heckbert wall westley hines korn biggar lievaart + +################### +# build all entries +################### +# +all: + @for i in ${WINNERS} ; do \ + echo "(cd $$i && $(MAKE) OPSYS=${OPSYS} $@)"; \ + (cd $$i && $(MAKE) "OPSYS=${OPSYS}" $@); \ + done + + +############### +# utility rules +############### +# +clean: + @for i in ${WINNERS} ; do \ + echo "(cd $$i && $(MAKE) $@)"; \ + (cd $$i && $(MAKE) $@); \ + done + +clobber: + @for i in ${WINNERS} ; do \ + echo "(cd $$i && $(MAKE) $@)"; \ + (cd $$i && $(MAKE) $@); \ + done + +install: + @for i in ${WINNERS} ; do \ + echo "(cd $$i && $(MAKE) $@)"; \ + (cd $$i && $(MAKE) $@); \ + done diff --git a/1987/rules.html b/1987/rules.html new file mode 100644 index 000000000..cb0642912 --- /dev/null +++ b/1987/rules.html @@ -0,0 +1,312 @@ + + + + + + + rules + + + + +

Copyright (c) 1987, Landon Curt Noll & Larry Bassel. All Rights +Reserved. Permission for personal, educational or non-profit use is +granted provided this this copyright and notice are included in its +entirety and remains unaltered. All other uses must receive prior +permission in writing from both Landon Curt Noll and Larry Bassel.

+

WARNING: The rules and mailing address for the contest change from +year to year. Be sure that you consult the current set of rules before +submitting entries. ——————————————————————————

+

Subject: 4th International Obfuscated C Code Contest Rules +Newsgroups: comp.lang.c,comp.unix.wizards Keywords: +rules,1987,obfuscate,contest

+

GOALS OF THE CONTEST:

+
* To write the most Obscure/Obfuscated C program under the rules below.
+* To show what should NOT be done in C programs.
+* To provide a safe forum for poor C code.  :-)
+

RULES: 1) The source must be 1024 characters long or less. NO +EXCEPTIONS!

+
2) To help us process your entries, we ask that you submit entries
+   in the following format:   (please include the --- lines)
+

—start of header items— name: org: email address: postal address: +environment: remarks: —start of entry— X <place obfuscated source of +1024 characters or less here> X + X +<leading X’s do not count toward the source character count> X + X +<newlines count as 1 character> X <assume a standard 8 +character tab stop> —end of entry—

+
3) Regarding the header items:
+
+    * All header items except 'remark' are optional.  If you do not
+      wish to answer an item, indicate so by the string:   ***NONE***
+      Any text outside of the above format will be kept confidential.
+
+    * You can remain anonymous.   If the name item is:  ***ANONYMOUS***
+      all items except the 'remarks' item will not be relased.
+
+    * Indicate the name of your Company or School in the 'org' item.
+
+    * The 'email address' item asks for a network path from a major
+      site (such as amdahl) to your mailbox.
+
+    * If you give a 'postal address', please include your Country.
+
+    * Give the machine and operating system (i.e., Un*x version) on
+      which your program ran.
+
+    * The 'remarks' item is not optional.  Please indicate:
+    - how to execute or compile if something special is required
+    - type of input or argument needed, if applicable
+    - what this program does
+    - any other remarks you wish to make
+
+    * If you need more than one line on a header item, place
+      tab or space characters at the beginning of each additional line.
+
+4) The entry should be written in a common C. (K&R + common extensions)
+
+5) The program must be of original work.  All programs must be
+   in the public domain.  All copyrighted programs will be rejected.
+
+6) Entries must be received before 30-May-87 0:00 GMT.
+   Email your entries to:
+   
+        ...!amdahl!obfuscate
+
+   Amdahl talks to hplabs, decwrl, pyramid, seismo and cbosgd.
+   We will attempt to Email a confirmation of receipt of contest
+   entries, however since Email is not reliable you may not receive it.
+   People are encouraged to submit entries via Email, however
+   one may mail entries the following postal address:
+
+    Landon Curt Noll
+    Amdahl Corp.
+    1250 E. Arques Ave.   M/S 316
+    P.O. Box 3470
+    Sunnyvale, CA
+    94088-3470
+    U.S.A.
+
+  Write the words: "International Obfuscated C Code Contest" near the
+  bottom left corner of the envelope.
+
+8) Contest entries sent in by post should indicate where TAB characters
+   are to be placed, otherwise space characters will be assumed.  Each
+   line will be assumed to contain a newline character.  The leading
+   'X' will serve to indicate where each source line starts.
+
+9) Each person may submit up to 5 entries.  Multiple entries must
+   be sent in separate Email letters or postal envelopes.
+
+10) People are encouraged to examine winners of the previous
+    contests.  A copy of these entries was posted to mod.sources
+    on or about 12-Mar-87.  Contact the mod.sources moderator
+    if you missed that article.  Keep in mind that rules change from
+    year to year, so some winning entries may not be valid
+    entries this year.  Also what was unique and novel one
+    year can get 'old' the next year.
+

ANNOUNCEMENT OF WINNERS:

+
* First announcement will be at the Summer 87 Usenix BOF.
+
+* An announcement will be posted to mod.announce near
+  mid June 1987 stating to which newsgroup the winners
+  have been posted.
+
+* An article containing the winning entries will be published
+  in a future issue of the "Micro/Systems Journal".
+
+* Winners receive international fame and flames!  :-)
+

JUDGING: Awards will be given to the best entry in a number of +categories. The actual category list will vary depending on the types of +entries we receive. At the moment, we are considering using the +following:

+
    * The best small one line program
+    * The most obscure algorithm
+    * The worst abuse of the C preprocessor  (note warnings below)
+    * The strangest source layout
+    * The most useful obfuscated program
+    * <anything else so strange that it deserves an award>
+
+Extra points will be given for programs which:
+
+    * pass lint without complaint
+    * do something quasi-interesting
+    * are portable
+    * are unique in their obfuscation style
+    * are concise
+
+Points will be taken away for programs that:
+
+    * are very hardware or Un*x version specific
+    * dump core or have compiler warnings
+      (we won't take points away if you warn us in the remark item)
+    * fail to compile
+    * obfuscate only by overuse of #defines
+      (you should do this ONLY if your use is unusual)
+    * are similar to previous winners
+    * are similar to previous losers  :-)
+
+The Judging will be done by Landon Noll and Larry Bassel.  
+Comments & questions (not entries) about the contest can be Emailed to:
+
+         ...!amdahl!judges
+

chongo //
+Larry Bassel

+ + diff --git a/1987/wall/Makefile b/1987/wall/Makefile index 6b28cdcb5..2c78a16fb 100644 --- a/1987/wall/Makefile +++ b/1987/wall/Makefile @@ -1,30 +1,593 @@ -# %W% %G% %U% +#!/usr/bin/env make # -# 1987 makefile +# IOCCC 1987 winning entry - wall + +################################################################################ # -# Copyright (c) 1987, Landon Curt Noll & Larry Bassel. -# All Rights Reserved. Permission for personal, educational or non-profit -# use is granted provided this this copyright and notice are included in its -# entirety and remains unaltered. All other uses must receive prior permission -# from Landon Curt Noll and Larry Bassel. +# An Historical Makefile NOTE: +# +# The orig.Makefile, if it exits, is the original Makefile before this IOCCC +# year directory was reworked so that entries are in separate directories. +# This also applies to any orig.ansi.mk and orig.common.mk files. +# +# Several Makefiles were modified / formed in 2022, and as such it may have +# elements that are not historically compatible with way entries were built. +# The orig.Makefile, if it exits, is a copy of the pre-modified Makefile. +# +# Regarding individual entries: +# +# IOCCC winning entry code may not work on your system. Even with standards, +# conditions and build environments change, especially when it comes to more +# extreme code such you might find in an IOCCC winner. Moreover, what was +# allowed and liked in one IOCCC contest may no longer be liked/allowed in +# later IOCCC years. +# +# Corrections on winning author and fixing typos in remarks are VERY WELCOME. +# +# GitHub pull requests are welcome: +# +# If you have a patch that might make running an entry work in modern Unix-like +# environments, please create a GitHub pull request for the IOCCC judgess to +# consider. +# +# Suggestions and corrections regarding Makefiles, winning author information, +# fixing typos in remarks, and code patches are welcome via opening a GitHub +# issue or better yet, by creating a GitHub pull request for the IOCCC judges +# to consider. To form a GitHub issue or GitHub pull, please visit: +# +# https://github.com/ioccc-src/winner +# +################################################################################ + +# This work by Landon Curt Noll and Leonid A. Broukhis is licensed under: +# +# Creative Commons Attribution-ShareAlike 3.0 Unported License. +# +# See: http://creativecommons.org/licenses/by-sa/3.0/ -SHELL= /bin/sh -WINNERS= wall +############################# +# shell used by this Makefile +############################# +# +SHELL= /bin/bash -# for System V style systems -OPSYS= -Dindex=strchr -# for BSD style systems -#OPSYS= +####################### +# common tool locations +####################### +# +A2P= a2p +AR= ar +ASA= asa +AT= at +ATQ= atq +ATRM= atrm +AWK= awk +BANNER= banner +BASE64= base64 +BASENAME= basename +BATCH= batch +BC= bc +BINHEX= binhex +BISON= bison +BUNZIP2= bunzip2 +BZCAT= bzcat +BZCMP= bzcmp +BZDIFF= bzdiff +BZEGREP= bzegrep +BZFGREP= bzfgrep +BZGREP= bzgrep +BZIP2= bzip2 +BZLESS= bzless +BZMORE= bzmore +C2PH= c2ph +C89= c89 +C99= c99 +CAL= cal +CALC= calc +CAT= cat +CD= cd +CHFLAGS= chflags +CHGRP= chgrp +CHMOD= chmod +CKSUM= cksum +CLANG= clang +CLANG_PLUSPLUS= clang++ +CLEAR= clear +CMP= cmp +COL= col +COLLDEF= colldef +COLRM= colrm +COLUMN= column +COMPRESS= compress +CP= cp +CPIO= cpio +CPP= cpp +CRC32= crc32 +CSH= csh +CSPLIT= csplit +CURL= curl +CUT= cut +C_PLUSPLUS= c++ +C_PLUSPLUS_FILT= c++filt +DATE= date +DC= dc +DD= dd +DF= df +DIFF3= diff3 +DIFF= diff +DIG= dig +DIRNAME= dirname +ED= ed +EGREP= egrep +ENV= env +EQN= eqn +ETAGS= etags +EXPECT= expect +EXPR= expr +FALSE= false +FGREP= fgrep +FILE= file +FIND2PERL= find2perl +FIND= find +FLEX= flex +FLEX_PLUSPLUS= flex++ +FMT= fmt +FOLD= fold +FS_USAGE= fs_usage +FUNZIP= funzip +FUSER= fuser +GCC= gcc +GDIFFMK= gdiffmk +GENCAT= gencat +GENSTRINGS= genstrings +GETOPT= getopt +GETOPTS= getopts +GNUMAKE= gnumake +GREP= grep +GROFF= groff +GROFFER= groffer +GROG= grog +GROPS= grops +GROTTY= grotty +GUNZIP= gunzip +GVIM= gvim +GZCAT= gzcat +GZEXE= gzexe +GZIP_PROG= gzip +G_PLUSPLUS= g++ +H2PH= h2ph +H2XS= h2xs +HASH= hash +HEAD= head +HOSTNAME_PROG= hostname +ICONV= iconv +ID= id +INDENT= indent +INFO= info +JOT= jot +KILL= kill +KSH= ksh +LAST= last +LD= ld +LESSECHO= lessecho +LEX= len +LINK= link +LN= ln +LS= ls +M4= m4 +MAKE= make +MAN= man +MKDIR= mkdir +MKFIFo= mkfifo +MKTEMP= mktemp +MV= mv +NANO= nano +NASM= nasm +NEQN= neqn +NICE= nice +NL= nl +NM= nm +NOHUP= nohup +NROFF= nroff +NSLOOKUP= nslookup +OD= od +OPENSSL= openssl +PASTE= paste +PATCH= patch +PATHCHK= pathchk +PAX= pax +PERL= perl +PICO= pico +PR= pr +PRINTENV= printenv +PS= ps +PTAR= ptar +PTARDIFF= ptardiff +PTARGREP= ptargrep +PWD= pwd +PYDOC= pydoc +PYTHON= python +PYTHONW= pythonw +READLINK= readlink +RENICE= renice +RESET= reset +REV= rev +RI= ri +RM= rm +RMDIR= rmdir +RSYNC= rsync +RUBY= ruby +RVIM= rvim +SAY= say +SCP= scp +SCREEN= screen +SCRIPT= script +SDIFF= sdiff +SED= sed +SEQ= seq +SFTP= sftp +SH= sh +SHA1= sha1 +SHA= sha +SHAR= shar +SHASUM5_18= shasum5.18 +SHASUM= shasum +SIZE= size +SLEEP= sleep +SORT= sort +SSH= ssh +STAT= stat +STRIP= strip +STTY= stty +SUM= sum +SYNC= sync +TABS= tabs +TAIL= tail +TAR= tar +TEE= tee +TEST= test +TFTP= tftp +TIDY= tidy +TIME= time +TOP= top +TOUCH= touch +TPUT= tout +TPUT= tput +TR= tr +TROFF= troff +TRUE= true +TSET= tset +TSORT= tsort +UL= ul +UNAME= uname +UNCOMPRESS= uncompress +UNEXPAND= unexpand +UNIFDEF= unifdef +UNIFDEFALL= unifdefall +UNIQ= uniq +UNITS= units +UNLINK= unlink +UNZIP= unzip +UNZIPSFX= unzipsfx +UPTIME= uptime +UUDECODE= uudecode +UUENCODE= uuencode +UUIDGEN= uuidgen +VI= vi +VIEW= view +VIM= vim +VIMDIFF= vimdiff +W= w +WAIT4PATH= wait4path +WAIT= wait +WC= wc +WGET= wget +WHAT= what +WHATIS= whatis +WHICH= which +WHO= who +WHOAMI= whoami +WHOIS= whois +WRTIE= write +XAR= xar +XARGS= xargs +XATTR= xattr +XXD= xxd +YACC= yacc +YES= yes +ZCAT= zcat +ZCMP= zcmp +ZDIFF= zdiff +ZEGREP= zegrep +ZFGREP= zfgrep +ZFORCE= zforce +ZGREP= zgrep +ZIP= zip +ZIPCLOAK= zipcloak +ZIPGREp= zipgrep +ZIPINFo= zipinfo +ZIPNOTE= zipnote +ZIPSPLIT= zipsplit +ZLESS= zless +ZMORE= zmore +ZNEW= znew +ZPRINT= zprint +ZSH= zsh -all: ${WINNERS} +# Set X11_LIBDIR to the directory where the X11 library resides +# +#X11_LIBDIR= /usr/X11R6/lib +#X11_LIBDIR= /usr/X11/lib +X11_LIBDIR= /opt/X11/lib -wall: wall.c - cc $? -o $@ +# Set X11_INCLUDEDIR to the directory where the X11 include files reside +# +#X11_INCDIR= /usr/X11R6/include +#X11_INCDIR= /usr/X11/include +X11_INCDIR= /opt/X11/include + +# Compiler warnings +# +#CWARN= +#CWARN= -Wall +#CWARN= -Wall -Wextra +CWARN= -Wall -Wextra ${CSILENCE} +#CWARN= -Wall -Wextra -pedantic ${CSILENCE} +#CWARN= -Wall -Wextra -Weverything +#CWARN= -Wall -Wextra -Weverything -pedantic +#CWARN= -Wall -Wextra -Weverything -pedantic ${CSILENCE} + +# Silence warnings that ${CWARN} would normally complain about +# +CSILENCE= -Wno-char-subscripts -Wno-error -Wno-implicit-function-declaration \ + -Wno-incompatible-library-redeclaration -Wno-return-type -Wno-string-plus-int \ + -Wno-unknown-escape-sequence +#CSILENCE= -Wno-implicit-int + +# compiler standard +# +#CSTD= +#CSTD= -ansi +CSTD= -std=gnu89 + +# compiler bit architecture +# +# Some entries require 32-bitness: +# ARCH= -m32 +# +# Some entries require 64-bitness: +# ARCH= -m64 +# +# By default we assume nothing: +# +ARCH= + +# defines that are needed to compile +# +CDEFINE= +#CDEFINE= -DIOCCC=26 + +# include files that are needed to compile +# +CINCLUDE= +#CINCLUDE= -include stdlib.h +#CINCLUDE= -include stdio.h +#CINCLUDE= -include stdlib.h -include stdio.h +#CINCLUDE= -I ${X11_INCDIR} +#CINCLUDE= -I ${HOMEBREW_PREFIX}/include/SDL2 + +# optimization +# +# Most compiles will safely use -O2. Some can use only -O1 or -O. +# A few compilers have broken optimizers or this entry make break +# under those buggy optimizers and thus you may not want anything. +# Reasonable compilers will allow for -O3. +# +#OPT= +#OPT= -O +#OPT= -O1 +#OPT= -O2 +OPT= -O3 + +# default flags for ANSI C compilation +# +CFLAGS= ${CSTD} ${CWARN} ${ARCH} ${CDEFINE} ${CINCLUDE} ${OPT} + +# Libraries needed to build +# +LIBS= +#LIBS= -lm +#LIBS= -L ${X11_LIBDIR} -lX11 +#LIBS= -L ${HOMEBREW_PREFIX}/lib -lSDL + +# ANSI compiler +# +# Set CC to the name of your ANSI compiler. +# +# Some entries seem to need gcc. If you have gcc, set +# both CC and MAY_NEED_GCC to gcc. +# +# If you do not have gcc, set CC to the name of your ANSI compiler, and +# set MAY_NEED_GCC to either ${CC} (and hope for the best) or to just : +# to disable such programs. +# +CC= cc +#CC=clang +MAY_NEED_GCC= gcc + + +############################## +# Special flags for this entry +############################## +# +ENTRY= wall +PROG= ${ENTRY} +# +OBJ= ${PROG}.o +DATA= +TARGET= ${PROG} +# +ALT_OBJ= +ALT_TARGET= + + +################# +# build the entry +################# +# +all: ${DATA} ${TARGET} + @${TRUE} + +.PHONY: alt data everything clean clobber nuke dist_clean \ + install build love haste waste make easter_egg \ + supernova deep_magic magic charon pluto + +${PROG}: ${PROG}.c + ${CC} ${CFLAGS} $< -o $@ ${LIBS} + +# alternative executable +# +alt: ${DATA} ${ALT_TARGET} + @${TRUE} + +# data files +# +data: ${DATA} + @${TRUE} + + +############### +# utility rules +############### +# +everything: all alt clean: - rm -f core + ${RM} -f ${OBJ} ${ALT_OBJ} + @-if [ -f indent.c ]; then \ + ${ECHO} ${RM} -f indent.c; \ + ${RM} -f indent.c; \ + fi + clobber: clean - rm -f ${WINNERS} -install: all - @echo are you kidding'??' + ${RM} -f ${TARGET} ${ALT_TARGET} + @-if [ -e sandwich ]; then \ + ${RM} -f sandwich; \ + echo 'ate sandwich'; \ + fi + +nuke: clobber + @${TRUE} + +dist_clean: nuke + @${TRUE} + +install: + @echo "Dr. Spock says that is not logical!" + @${TRUE} + +# you may be able to misunderstand the source by reading indent.c +# +indent.c: ${PROG}.c + @if which "${GINDENT}" >/dev/null 2>&1; then \ + ${ECHO} ${RM} -f $@; \ + ${RM} -f $@; \ + ${ECHO} "${GINDENT} < $< > $@"; \ + ${GINDENT} < $< > $@; \ + elif which "${INDENT}" >/dev/null 2>&1; then \ + ${ECHO} ${RM} -f $@; \ + ${RM} -f $@; \ + ${ECHO} "${INDENT} < $< > $@"; \ + ${INDENT} < $< > $@; \ + else \ + ${ECHO} "no intent tool found, ident $< yourself, sorry"; \ + ${ECHO} "exit 1"; \ + exit 1; \ + fi + + +################## +# 133t hacker rulz +################## +# +love: + @echo 'not war?' + @${TRUE} + +haste: + $(MAKE) waste + @${TRUE} + +waste: + @echo 'haste' + @${TRUE} + +make: + @echo 'Participate in a maker faire' + @${TRUE} + +easter_egg: + @echo you expected to often misunderstand this $${RANDOM} magic + @echo chongo '' "/\\oo/\\" + @echo Eggy + +fabricate fashion form frame manufacture produce: make + @${TRUE} + +sandwich: + @if [ `id -u` -eq 0 ]; then \ + echo 'Okay.'; \ + echo $${RANDOM}`date +%s`$${RANDOM} > $@; \ + else \ + echo 'What? Make it yourself.'; \ + exit 1; \ + fi + +# Understand the history of the Homebrew Computer Club +# as well as the West Coast Computer Faire and +# you might be confused different. :-) +# +supernova: nuke + @-if [ -r .code_anal ]; then \ + ${RM} -f .code_anal_v6; \ + else \ + echo "planet deniers, like some members of the IAU, are so cute when they try to defend their logic"; \ + fi + @echo A $@ helps ${MAKE} the elements that help form planets + @${TRUE} + +deep_magic: + @-if [ -r .code_anal ]; then \ + ccode_analysis --deep_magic 7889066cdbdf09b0408021754586e895be641cc9be29e7eafd3ca65359541f17 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + fi + @${TRUE} + +magic: deep_magic + @-if [ -r .code_anal ]; then \ + ccode_analysis --level 20003 --mode 5717175 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "If you don't eat yer meat, you can't have any pudding!"; \ + echo "How can you have any pudding if you don't eat yer meat?!"; \ + fi + @${TRUE} + +# The IOCCC resident astronomer states +# +charon: supernova + @echo $@ is a dwarf planet + @echo dwarf is a type of planet + @echo therefore IAU, $@ is a planet + +pluto: supernova + ${MAKE} charon + @echo $@ is a dwarf planet + @echo dwarf is a type of planet + @echo therefore, $@ is a planet + @echo get used to having lots of planets because a $< can ${MAKE} a lot of them diff --git a/1987/wall/hint.html b/1987/wall/hint.html deleted file mode 100644 index 62a3cdc69..000000000 --- a/1987/wall/hint.html +++ /dev/null @@ -1,35 +0,0 @@ -

Most Useful Obfuscation

- -

Larry Wall
-Unisys - System Development Group Santa Monica
-9132 Kester Ave
-Panorama City, CA 91402 USA

- -

Judges' comments:

- -

Try:

- -
lwall | bc | lwall
-input:  x*x
-input:  c^2
-
- -

Also try:

- -
lwall | bc   and   lwall | cat
-
- -

What we found amazing was how the flow of control was transferred -between subroutines. Careful inspection will show that the array of -pointers to functions named ‘vi’ refers to functions which seem to not -be directly called. Even so, these pointers to functions are being -used as an argument to signal. Can you determine why this is being -done and how it is being exploited?

- -

Some compilers complained about this file, so we changed: ‘=++I’ to ‘= ++I’.

- -

Copyright © 1987, Landon Curt Noll & Larry Bassel. -All Rights Reserved. Permission for personal, educational or non-profit use is -granted provided this this copyright and notice are included in its entirety -and remains unaltered. All other uses must receive prior permission in writing -from both Landon Curt Noll and Larry Bassel.

diff --git a/1987/wall/hint.text b/1987/wall/hint.txt similarity index 97% rename from 1987/wall/hint.text rename to 1987/wall/hint.txt index 63903a1c1..fe7af6870 100644 --- a/1987/wall/hint.text +++ b/1987/wall/hint.txt @@ -5,6 +5,10 @@ Unisys - System Development Group Santa Monica 9132 Kester Ave Panorama City, CA 91402 USA +## To build: + + make all + ## Judges' comments: ### Try: diff --git a/1987/wall/index.html b/1987/wall/index.html new file mode 100644 index 000000000..b241f7cfb --- /dev/null +++ b/1987/wall/index.html @@ -0,0 +1,195 @@ + + + + + + + hint + + + + +

Most Useful Obfuscation

+

Larry Wall
+Unisys - System Development Group Santa Monica
+9132 Kester Ave
+Panorama City, CA 91402 USA

+

To build:

+
    make all
+

Judges’ comments:

+

Try:

+
lwall | bc | lwall
+input:  x*x
+input:  c^2
+

Also try:

+
lwall | bc   and   lwall | cat
+

What we found amazing was how the flow of control was transferred +between subroutines. Careful inspection will show that the array of +pointers to functions named ‘vi’ refers to functions which seem to not +be directly called. Even so, these pointers to functions are being used +as an argument to signal. Can you determine why this is being done and +how it is being exploited?

+

Some compilers complained about this file, so we changed: ‘=++I’ to +‘= ++I’.

+

Copyright (c) 1987, Landon Curt Noll & Larry Bassel. All Rights +Reserved. Permission for personal, educational or non-profit use is +granted provided this this copyright and notice are included in its +entirety and remains unaltered. All other uses must receive prior +permission in writing from both Landon Curt Noll and Larry Bassel.

+ + diff --git a/1987/wall/orig.Makefile b/1987/wall/orig.Makefile new file mode 100644 index 000000000..6b28cdcb5 --- /dev/null +++ b/1987/wall/orig.Makefile @@ -0,0 +1,30 @@ +# %W% %G% %U% +# +# 1987 makefile +# +# Copyright (c) 1987, Landon Curt Noll & Larry Bassel. +# All Rights Reserved. Permission for personal, educational or non-profit +# use is granted provided this this copyright and notice are included in its +# entirety and remains unaltered. All other uses must receive prior permission +# from Landon Curt Noll and Larry Bassel. + + +SHELL= /bin/sh +WINNERS= wall + +# for System V style systems +OPSYS= -Dindex=strchr +# for BSD style systems +#OPSYS= + +all: ${WINNERS} + +wall: wall.c + cc $? -o $@ + +clean: + rm -f core +clobber: clean + rm -f ${WINNERS} +install: all + @echo are you kidding'??' diff --git a/1987/westley/Makefile b/1987/westley/Makefile index 6681478ee..76529a70b 100644 --- a/1987/westley/Makefile +++ b/1987/westley/Makefile @@ -1,30 +1,592 @@ -# %W% %G% %U% +#!/usr/bin/env make # -# 1987 makefile +# IOCCC 1987 winning entry - westley + +################################################################################ # -# Copyright (c) 1987, Landon Curt Noll & Larry Bassel. -# All Rights Reserved. Permission for personal, educational or non-profit -# use is granted provided this this copyright and notice are included in its -# entirety and remains unaltered. All other uses must receive prior permission -# from Landon Curt Noll and Larry Bassel. +# An Historical Makefile NOTE: +# +# The orig.Makefile, if it exits, is the original Makefile before this IOCCC +# year directory was reworked so that entries are in separate directories. +# This also applies to any orig.ansi.mk and orig.common.mk files. +# +# Several Makefiles were modified / formed in 2022, and as such it may have +# elements that are not historically compatible with way entries were built. +# The orig.Makefile, if it exits, is a copy of the pre-modified Makefile. +# +# Regarding individual entries: +# +# IOCCC winning entry code may not work on your system. Even with standards, +# conditions and build environments change, especially when it comes to more +# extreme code such you might find in an IOCCC winner. Moreover, what was +# allowed and liked in one IOCCC contest may no longer be liked/allowed in +# later IOCCC years. +# +# Corrections on winning author and fixing typos in remarks are VERY WELCOME. +# +# GitHub pull requests are welcome: +# +# If you have a patch that might make running an entry work in modern Unix-like +# environments, please create a GitHub pull request for the IOCCC judgess to +# consider. +# +# Suggestions and corrections regarding Makefiles, winning author information, +# fixing typos in remarks, and code patches are welcome via opening a GitHub +# issue or better yet, by creating a GitHub pull request for the IOCCC judges +# to consider. To form a GitHub issue or GitHub pull, please visit: +# +# https://github.com/ioccc-src/winner +# +################################################################################ + +# This work by Landon Curt Noll and Leonid A. Broukhis is licensed under: +# +# Creative Commons Attribution-ShareAlike 3.0 Unported License. +# +# See: http://creativecommons.org/licenses/by-sa/3.0/ -SHELL= /bin/sh -WINNERS= westley +############################# +# shell used by this Makefile +############################# +# +SHELL= /bin/bash -# for System V style systems -OPSYS= -Dindex=strchr -# for BSD style systems -#OPSYS= +####################### +# common tool locations +####################### +# +A2P= a2p +AR= ar +ASA= asa +AT= at +ATQ= atq +ATRM= atrm +AWK= awk +BANNER= banner +BASE64= base64 +BASENAME= basename +BATCH= batch +BC= bc +BINHEX= binhex +BISON= bison +BUNZIP2= bunzip2 +BZCAT= bzcat +BZCMP= bzcmp +BZDIFF= bzdiff +BZEGREP= bzegrep +BZFGREP= bzfgrep +BZGREP= bzgrep +BZIP2= bzip2 +BZLESS= bzless +BZMORE= bzmore +C2PH= c2ph +C89= c89 +C99= c99 +CAL= cal +CALC= calc +CAT= cat +CD= cd +CHFLAGS= chflags +CHGRP= chgrp +CHMOD= chmod +CKSUM= cksum +CLANG= clang +CLANG_PLUSPLUS= clang++ +CLEAR= clear +CMP= cmp +COL= col +COLLDEF= colldef +COLRM= colrm +COLUMN= column +COMPRESS= compress +CP= cp +CPIO= cpio +CPP= cpp +CRC32= crc32 +CSH= csh +CSPLIT= csplit +CURL= curl +CUT= cut +C_PLUSPLUS= c++ +C_PLUSPLUS_FILT= c++filt +DATE= date +DC= dc +DD= dd +DF= df +DIFF3= diff3 +DIFF= diff +DIG= dig +DIRNAME= dirname +ED= ed +EGREP= egrep +ENV= env +EQN= eqn +ETAGS= etags +EXPECT= expect +EXPR= expr +FALSE= false +FGREP= fgrep +FILE= file +FIND2PERL= find2perl +FIND= find +FLEX= flex +FLEX_PLUSPLUS= flex++ +FMT= fmt +FOLD= fold +FS_USAGE= fs_usage +FUNZIP= funzip +FUSER= fuser +GCC= gcc +GDIFFMK= gdiffmk +GENCAT= gencat +GENSTRINGS= genstrings +GETOPT= getopt +GETOPTS= getopts +GNUMAKE= gnumake +GREP= grep +GROFF= groff +GROFFER= groffer +GROG= grog +GROPS= grops +GROTTY= grotty +GUNZIP= gunzip +GVIM= gvim +GZCAT= gzcat +GZEXE= gzexe +GZIP_PROG= gzip +G_PLUSPLUS= g++ +H2PH= h2ph +H2XS= h2xs +HASH= hash +HEAD= head +HOSTNAME_PROG= hostname +ICONV= iconv +ID= id +INDENT= indent +INFO= info +JOT= jot +KILL= kill +KSH= ksh +LAST= last +LD= ld +LESSECHO= lessecho +LEX= len +LINK= link +LN= ln +LS= ls +M4= m4 +MAKE= make +MAN= man +MKDIR= mkdir +MKFIFo= mkfifo +MKTEMP= mktemp +MV= mv +NANO= nano +NASM= nasm +NEQN= neqn +NICE= nice +NL= nl +NM= nm +NOHUP= nohup +NROFF= nroff +NSLOOKUP= nslookup +OD= od +OPENSSL= openssl +PASTE= paste +PATCH= patch +PATHCHK= pathchk +PAX= pax +PERL= perl +PICO= pico +PR= pr +PRINTENV= printenv +PS= ps +PTAR= ptar +PTARDIFF= ptardiff +PTARGREP= ptargrep +PWD= pwd +PYDOC= pydoc +PYTHON= python +PYTHONW= pythonw +READLINK= readlink +RENICE= renice +RESET= reset +REV= rev +RI= ri +RM= rm +RMDIR= rmdir +RSYNC= rsync +RUBY= ruby +RVIM= rvim +SAY= say +SCP= scp +SCREEN= screen +SCRIPT= script +SDIFF= sdiff +SED= sed +SEQ= seq +SFTP= sftp +SH= sh +SHA1= sha1 +SHA= sha +SHAR= shar +SHASUM5_18= shasum5.18 +SHASUM= shasum +SIZE= size +SLEEP= sleep +SORT= sort +SSH= ssh +STAT= stat +STRIP= strip +STTY= stty +SUM= sum +SYNC= sync +TABS= tabs +TAIL= tail +TAR= tar +TEE= tee +TEST= test +TFTP= tftp +TIDY= tidy +TIME= time +TOP= top +TOUCH= touch +TPUT= tout +TPUT= tput +TR= tr +TROFF= troff +TRUE= true +TSET= tset +TSORT= tsort +UL= ul +UNAME= uname +UNCOMPRESS= uncompress +UNEXPAND= unexpand +UNIFDEF= unifdef +UNIFDEFALL= unifdefall +UNIQ= uniq +UNITS= units +UNLINK= unlink +UNZIP= unzip +UNZIPSFX= unzipsfx +UPTIME= uptime +UUDECODE= uudecode +UUENCODE= uuencode +UUIDGEN= uuidgen +VI= vi +VIEW= view +VIM= vim +VIMDIFF= vimdiff +W= w +WAIT4PATH= wait4path +WAIT= wait +WC= wc +WGET= wget +WHAT= what +WHATIS= whatis +WHICH= which +WHO= who +WHOAMI= whoami +WHOIS= whois +WRTIE= write +XAR= xar +XARGS= xargs +XATTR= xattr +XXD= xxd +YACC= yacc +YES= yes +ZCAT= zcat +ZCMP= zcmp +ZDIFF= zdiff +ZEGREP= zegrep +ZFGREP= zfgrep +ZFORCE= zforce +ZGREP= zgrep +ZIP= zip +ZIPCLOAK= zipcloak +ZIPGREp= zipgrep +ZIPINFo= zipinfo +ZIPNOTE= zipnote +ZIPSPLIT= zipsplit +ZLESS= zless +ZMORE= zmore +ZNEW= znew +ZPRINT= zprint +ZSH= zsh -all: ${WINNERS} +# Set X11_LIBDIR to the directory where the X11 library resides +# +#X11_LIBDIR= /usr/X11R6/lib +#X11_LIBDIR= /usr/X11/lib +X11_LIBDIR= /opt/X11/lib -westley: westley.c - cc $? -o $@ +# Set X11_INCLUDEDIR to the directory where the X11 include files reside +# +#X11_INCDIR= /usr/X11R6/include +#X11_INCDIR= /usr/X11/include +X11_INCDIR= /opt/X11/include + +# Compiler warnings +# +#CWARN= +#CWARN= -Wall +#CWARN= -Wall -Wextra +#CWARN= -Wall -Wextra ${CSILENCE} +CWARN= -Wall -Wextra -pedantic ${CSILENCE} +#CWARN= -Wall -Wextra -Weverything +#CWARN= -Wall -Wextra -Weverything -pedantic +#CWARN= -Wall -Wextra -Weverything -pedantic ${CSILENCE} + +# Silence warnings that ${CWARN} would normally complain about +# +CSILENCE= -Wno-for-loop-analysis -Wno-unused-value +#CSILENCE= -Wno-implicit-int + +# compiler standard +# +#CSTD= +#CSTD= -ansi +CSTD= -std=gnu89 + +# compiler bit architecture +# +# Some entries require 32-bitness: +# ARCH= -m32 +# +# Some entries require 64-bitness: +# ARCH= -m64 +# +# By default we assume nothing: +# +ARCH= + +# defines that are needed to compile +# +CDEFINE= +#CDEFINE= -DIOCCC=26 + +# include files that are needed to compile +# +CINCLUDE= +#CINCLUDE= -include stdlib.h +#CINCLUDE= -include stdio.h +#CINCLUDE= -include stdlib.h -include stdio.h +#CINCLUDE= -I ${X11_INCDIR} +#CINCLUDE= -I ${HOMEBREW_PREFIX}/include/SDL2 + +# optimization +# +# Most compiles will safely use -O2. Some can use only -O1 or -O. +# A few compilers have broken optimizers or this entry make break +# under those buggy optimizers and thus you may not want anything. +# Reasonable compilers will allow for -O3. +# +#OPT= +#OPT= -O +#OPT= -O1 +#OPT= -O2 +OPT= -O3 + +# default flags for ANSI C compilation +# +CFLAGS= ${CSTD} ${CWARN} ${ARCH} ${CDEFINE} ${CINCLUDE} ${OPT} + +# Libraries needed to build +# +LIBS= +#LIBS= -lm +#LIBS= -L ${X11_LIBDIR} -lX11 +#LIBS= -L ${HOMEBREW_PREFIX}/lib -lSDL + +# ANSI compiler +# +# Set CC to the name of your ANSI compiler. +# +# Some entries seem to need gcc. If you have gcc, set +# both CC and MAY_NEED_GCC to gcc. +# +# If you do not have gcc, set CC to the name of your ANSI compiler, and +# set MAY_NEED_GCC to either ${CC} (and hope for the best) or to just : +# to disable such programs. +# +CC= cc +#CC=clang +MAY_NEED_GCC= gcc + + +############################## +# Special flags for this entry +############################## +# +ENTRY= westley +PROG= ${ENTRY} +# +OBJ= ${PROG}.o +DATA= +TARGET= ${PROG} +# +ALT_OBJ= +ALT_TARGET= + + +################# +# build the entry +################# +# +all: ${DATA} ${TARGET} + @${TRUE} + +.PHONY: alt data everything clean clobber nuke dist_clean \ + install build love haste waste make easter_egg \ + supernova deep_magic magic charon pluto + +${PROG}: ${PROG}.c + @echo "NOTE: This entry requires a non-standard K&R C compiler to compile." + ${CC} ${CFLAGS} $< -o $@ ${LIBS} + +# alternative executable +# +alt: ${DATA} ${ALT_TARGET} + @${TRUE} + +# data files +# +data: ${DATA} + @${TRUE} + + +############### +# utility rules +############### +# +everything: all alt clean: - rm -f core + ${RM} -f ${OBJ} ${ALT_OBJ} + @-if [ -f indent.c ]; then \ + ${ECHO} ${RM} -f indent.c; \ + ${RM} -f indent.c; \ + fi + clobber: clean - rm -f ${WINNERS} -install: all - @echo are you kidding'??' + ${RM} -f ${TARGET} ${ALT_TARGET} + @-if [ -e sandwich ]; then \ + ${RM} -f sandwich; \ + echo 'ate sandwich'; \ + fi + +nuke: clobber + @${TRUE} + +dist_clean: nuke + @${TRUE} + +install: + @echo "Dr. Spock says that is not logical!" + @${TRUE} + +# you may be able to misunderstand the source by reading indent.c +# +indent.c: ${PROG}.c + @if which "${GINDENT}" >/dev/null 2>&1; then \ + ${ECHO} ${RM} -f $@; \ + ${RM} -f $@; \ + ${ECHO} "${GINDENT} < $< > $@"; \ + ${GINDENT} < $< > $@; \ + elif which "${INDENT}" >/dev/null 2>&1; then \ + ${ECHO} ${RM} -f $@; \ + ${RM} -f $@; \ + ${ECHO} "${INDENT} < $< > $@"; \ + ${INDENT} < $< > $@; \ + else \ + ${ECHO} "no intent tool found, ident $< yourself, sorry"; \ + ${ECHO} "exit 1"; \ + exit 1; \ + fi + + +################## +# 133t hacker rulz +################## +# +love: + @echo 'not war?' + @${TRUE} + +haste: + $(MAKE) waste + @${TRUE} + +waste: + @echo 'haste' + @${TRUE} + +make: + @echo 'Participate in a maker faire' + @${TRUE} + +easter_egg: + @echo you expected to often misunderstand this $${RANDOM} magic + @echo chongo '' "/\\oo/\\" + @echo Eggy + +fabricate fashion form frame manufacture produce: make + @${TRUE} + +sandwich: + @if [ `id -u` -eq 0 ]; then \ + echo 'Okay.'; \ + echo $${RANDOM}`date +%s`$${RANDOM} > $@; \ + else \ + echo 'What? Make it yourself.'; \ + exit 1; \ + fi + +# Understand the history of the Homebrew Computer Club +# as well as the West Coast Computer Faire and +# you might be confused different. :-) +# +supernova: nuke + @-if [ -r .code_anal ]; then \ + ${RM} -f .code_anal_v6; \ + else \ + echo "planet deniers, like some members of the IAU, are so cute when they try to defend their logic"; \ + fi + @echo A $@ helps ${MAKE} the elements that help form planets + @${TRUE} + +deep_magic: + @-if [ -r .code_anal ]; then \ + ccode_analysis --deep_magic 7889066cdbdf09b0408021754586e895be641cc9be29e7eafd3ca65359541f17 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + sleep 2; \ + echo "Wrong! Do it again!"; \ + fi + @${TRUE} + +magic: deep_magic + @-if [ -r .code_anal ]; then \ + ccode_analysis --level 20003 --mode 5717175 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \ + else \ + echo "If you don't eat yer meat, you can't have any pudding!"; \ + echo "How can you have any pudding if you don't eat yer meat?!"; \ + fi + @${TRUE} + +# The IOCCC resident astronomer states +# +charon: supernova + @echo $@ is a dwarf planet + @echo dwarf is a type of planet + @echo therefore IAU, $@ is a planet + +pluto: supernova + ${MAKE} charon + @echo $@ is a dwarf planet + @echo dwarf is a type of planet + @echo therefore, $@ is a planet + @echo get used to having lots of planets because a $< can ${MAKE} a lot of them diff --git a/1987/westley/hint.html b/1987/westley/hint.html deleted file mode 100644 index 78b5d5d56..000000000 --- a/1987/westley/hint.html +++ /dev/null @@ -1,23 +0,0 @@ -

Best Layout

- -

Brian Westley (aka Merlyn Leroy on usenet)
-Starfire Consulting
-1121 Hamline Ave. N. #17
-St. Paul, MN
-55108
-USA

- -

Judges' comments:

- -

Putchar must exist in the C library and not just as a macro. -If it fails to compile, add the line: #include <stdio.h> at the -top of the program.

- -

Line by line symmetry performed better than any C beautifier. Think -of if it as a C ink blot. :-)

- -

Copyright © 1987, Landon Curt Noll & Larry Bassel. -All Rights Reserved. Permission for personal, educational or non-profit use is -granted provided this this copyright and notice are included in its entirety -and remains unaltered. All other uses must receive prior permission in writing -from both Landon Curt Noll and Larry Bassel.

diff --git a/1987/westley/hint.text b/1987/westley/hint.txt similarity index 81% rename from 1987/westley/hint.text rename to 1987/westley/hint.txt index 501780b4e..cafb1709b 100644 --- a/1987/westley/hint.text +++ b/1987/westley/hint.txt @@ -7,6 +7,12 @@ St. Paul, MN 55108 USA +## To build: + + make all + +NOTE: This entry requires a non-standard K&R C compiler to compile. + ## Judges' comments: Putchar must exist in the C library and not just as a macro. @@ -16,6 +22,8 @@ top of the program. Line by line symmetry performed better than any C beautifier. Think of if it as a C ink blot. :-) +NOTE: This entry requires a non-standard K&R C compiler to compile. + Copyright (c) 1987, Landon Curt Noll & Larry Bassel. All Rights Reserved. Permission for personal, educational or non-profit use is granted provided this this copyright and notice are included in its entirety diff --git a/1987/westley/index.html b/1987/westley/index.html new file mode 100644 index 000000000..298fbf0cb --- /dev/null +++ b/1987/westley/index.html @@ -0,0 +1,192 @@ + + + + + + + hint + + + + +

Best Layout

+

Brian Westley (aka Merlyn Leroy on usenet)
+Starfire Consulting
+1121 Hamline Ave. N. #17
+St. Paul, MN
+55108
+USA

+

To build:

+
    make all
+

NOTE: This entry requires a non-standard K&R C compiler to +compile.

+

Judges’ comments:

+

Putchar must exist in the C library and not just as a macro. If it +fails to compile, add the line: #include <stdio.h> at +the top of the program.

+

Line by line symmetry performed better than any C beautifier. Think +of if it as a C ink blot. :-)

+

NOTE: This entry requires a non-standard K&R C compiler to +compile.

+

Copyright (c) 1987, Landon Curt Noll & Larry Bassel. All Rights +Reserved. Permission for personal, educational or non-profit use is +granted provided this this copyright and notice are included in its +entirety and remains unaltered. All other uses must receive prior +permission in writing from both Landon Curt Noll and Larry Bassel.

+ + diff --git a/1987/westley/orig.Makefile b/1987/westley/orig.Makefile new file mode 100644 index 000000000..6681478ee --- /dev/null +++ b/1987/westley/orig.Makefile @@ -0,0 +1,30 @@ +# %W% %G% %U% +# +# 1987 makefile +# +# Copyright (c) 1987, Landon Curt Noll & Larry Bassel. +# All Rights Reserved. Permission for personal, educational or non-profit +# use is granted provided this this copyright and notice are included in its +# entirety and remains unaltered. All other uses must receive prior permission +# from Landon Curt Noll and Larry Bassel. + + +SHELL= /bin/sh +WINNERS= westley + +# for System V style systems +OPSYS= -Dindex=strchr +# for BSD style systems +#OPSYS= + +all: ${WINNERS} + +westley: westley.c + cc $? -o $@ + +clean: + rm -f core +clobber: clean + rm -f ${WINNERS} +install: all + @echo are you kidding'??' diff --git a/years-spoiler.html b/years-spoiler.html index f5c436e75..41fbafd48 100644 --- a/years-spoiler.html +++ b/years-spoiler.html @@ -3464,74 +3464,86 @@ that works for both traditional K&R and ANSI C preprocessors.

4th International Obfuscated C Code Contest (1987)

biggar - program: "P;" defined on command line

heckbert - obfuscated fold program

hines - counts goto's, all ids anagrams of 'goto', all flow w goto

korn - one-liner that prints a message on a Un*x system

lievaart - very good othello player

wall - roman numeral -> decimal and vice versa conversion

westley - individually palindromic lines prints a palindrome


3rd International Obfuscated C Code Contest (1986)

diff --git a/years.html b/years.html index f05a81de6..a49218cf9 100644 --- a/years.html +++ b/years.html @@ -3447,74 +3447,87 @@ a summary description of all of the winners.


4th International Obfuscated C Code Contest (1987)

biggar

heckbert

hines

korn

lievaart

wall

westley


3rd International Obfuscated C Code Contest (1986)