From 49afc7ae3997109eaea591f8cb005b56e655c738 Mon Sep 17 00:00:00 2001 From: Landon Curt Noll Date: Wed, 8 Mar 2023 00:18:23 -0800 Subject: [PATCH] remove orig code from 2005/boutines --- 2005/boutines/.gitignore | 2 + 2005/boutines/Makefile | 331 +++++++++++++++++++++++++++++++++- 2005/boutines/README.md | 6 +- 2005/boutines/boutines.orig.c | 75 -------- 4 files changed, 327 insertions(+), 87 deletions(-) create mode 100644 2005/boutines/.gitignore delete mode 100644 2005/boutines/boutines.orig.c diff --git a/2005/boutines/.gitignore b/2005/boutines/.gitignore new file mode 100644 index 000000000..c3119afbf --- /dev/null +++ b/2005/boutines/.gitignore @@ -0,0 +1,2 @@ +boutines +test.svg diff --git a/2005/boutines/Makefile b/2005/boutines/Makefile index fc6b52340..8ff856ef6 100644 --- a/2005/boutines/Makefile +++ b/2005/boutines/Makefile @@ -1,18 +1,329 @@ +#!/usr/bin/env make +# +# IOCCC 2005 winning entry - boutines -build: boutines +################################################################################ +# +# 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 judges 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 used by this Makefile +############################# +# +SHELL= bash + +####################### +# common tool locations +####################### +# +include ../../var.mk + +# 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 + +# 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 + +# Common C compiler warnings to silence +# +CSILENCE= +#CSILENCE= -Wno-implicit-int + +# Common C compiler warning flags +# +#CWARN= ${CSILENCE} +#CWARN= -Wall ${CSILENCE} +#CWARN= -Wall -Wextra ${CSILENCE} +CWARN= -Wall -Wextra -pedantic ${CSILENCE} + +# Compiler standard +# +#CSTD= +#CSTD= -ansi +CSTD= -std=gnu99 + +# 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 + +# 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= `${SDL2_CONFIG} --cflags` + +# 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= `${SDL2_CONFIG} --libs` + +# C compiler to use +# +CC= cc +#CC=clang +#CC=gcc + +# Compiler add-ons or replacements for clang only +# +ifeq ($(CC),clang) +# +CSILENCE+= -Wno-cast-qual -Wno-comma -Wno-implicit-int-conversion \ + -Wno-missing-prototypes -Wno-missing-variable-declarations \ + -Wno-poison-system-directories -Wno-shadow -Wno-shorten-64-to-32 \ + -Wno-sign-conversion +# +CWARN+= -Weverything +# +endif + +# Specific add-ons or replacements for gcc only +# +ifeq ($(CC),gcc) +# +#CSILENCE+= +# +#CWARN+= +# +endif + + +############################## +# Special flags for this entry +############################## +# +ENTRY= boutines +PROG= ${ENTRY} +# +OBJ= ${PROG}.o +DATA= +TARGET= ${PROG} +# +ALT_OBJ= +ALT_TARGET= + + +################# +# build the entry +################# +# +all: data ${TARGET} + @${TRUE} + +.PHONY: all alt data everything clean clobber install \ + love haste waste maker easter_egg sandwich \ + 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} + +# both all and alt +# +everything: all alt + + +############### +# utility rules +############### +# clean: - -clobber: - -rm boutines + ${RM} -f ${OBJ} ${ALT_OBJ} + @-if [ -f indent.c ]; then \ + echo ${RM} -f indent.c; \ + ${RM} -f indent.c; \ + fi -boutines: boutines.c - ${CC} ${CFLAGS} ${LDFLAGS} $< -o $@ +clobber: clean + ${RM} -f ${TARGET} ${ALT_TARGET} + @-if [ -e sandwich ]; then \ + ${RM} -f sandwich; \ + echo 'ate sandwich'; \ + fi -alt: boutines.orig +install: + @echo "Dr. Spock says that is not logical!" + @${TRUE} -boutines.orig: boutines.orig.c - ${CC} ${CFLAGS} ${LDFLAGS} $< -o $@ +# 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 -data: + +################## +# 133t hacker rulz +################## +# +love: + @echo 'not war?' + @${TRUE} + +haste: + $(MAKE) waste + @${TRUE} + +waste: + @echo 'haste' + @${TRUE} + +maker: + @echo 'Participate in a maker faire' + @${TRUE} + +easter_egg: + @echo "you expected to often misunderstand this $${RANDOM} magic" + @echo "chongo '' /\\oo/\\" + @echo "Eggy" + +sandwich: easter_egg + @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: sandwich + @-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: supernova + @-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: magic + @echo "$@ is a dwarf planet" + @echo "dwarf is a type of planet" + @echo "therefore IAU, $@ is a planet" + +pluto: charon + ${MAKE} charon + @echo "$@ is a dwarf planet" + @echo "dwarf is a type of planet" + @echo "therefore, $@ is a planet" + @echo "having lots of planets is good feature because supernovae can help ${MAKE} a lot of them" diff --git a/2005/boutines/README.md b/2005/boutines/README.md index 1c5f37a7e..fe269559a 100644 --- a/2005/boutines/README.md +++ b/2005/boutines/README.md @@ -6,9 +6,9 @@ ## Judges' Comments -### To build +## To build: - cc -o boutines boutines.c + make all ### To run @@ -21,6 +21,8 @@ The following will create an SVG file, perl -e 'map{print rand," ",rand,"n";}(1..20);' | ./boutines > test.svg +## Judges' comments + Can you explain the author's remark "[generated files] are not as scalable as their name suggests"? ## Author's Comments diff --git a/2005/boutines/boutines.orig.c b/2005/boutines/boutines.orig.c deleted file mode 100644 index f8c3f850d..000000000 --- a/2005/boutines/boutines.orig.c +++ /dev/null @@ -1,75 +0,0 @@ - -#define F 0xF -#define U 512 - -#define std(x,y) (*x)(const char *,...)=y##f -#define str(l,e,x) l##e,l##x -#define mx(p,v1,v2) p[3]=v2,p[1]=v1,p[2]=v2,*p=v1 -#define mov(x,y) y=*f - #include - - typedef float n; n *d,*b,*f; typedef unsigned char c; -char _[ ]=" \n<%s %s=\"%d\" %s=\"%d\">\n", q [7][7] = { -"ivory\0","black\0","width\0","height\0","text"};int v,std(i,scan),std(o,print); - -int cc(str(const void*,x,y)) -{ - rt(*(n*)x>*(n*)y)-(*(n*)x<*(n*)y); - } - n t(n f,n g,str(n*,x,y)) - { - f=*x++-f,g=g-*x,*y=f*f;rt *y+g*g; - } - c*ln(n*p) - { - c*f=((c*)(d+2*(2+v))+2*(p-d)); while(!*f) mx(f,rand(),rand());rt f; - } - n*put(str(n*,f,l),n z) - { - int r=(l-f)/4,p=*(f+(r*=2))0?put(f+p*r,p?l:f+r,z):f; - } - n*g(n u,n w) - { - n y=(.5+u)/U, *s=put(d,d+v+2,y),z=(w+.5)/U,k,l=t(y,z,s,&k), - m=l,*r[4],g[4],*f; c p; for(mx(r,s,0),mx(g,k,l); - p=*(1+g)<*g,(m>*(g+1))+(*gu;++u) - i+=*ln(y),j+=*(1+ln(y)),k+=*(ln(y)+2); - *_=i/u,*(1+_)=j/u,*(_+2)=k/u;rt(c*)_; -} - -void tr(n x,n y,n i) -{ - c*h,w;n*m=g(y,i); for(w=4*(x<=1);++w<4&&m==g(w/2*x+y,i+w%2*x);); - w=4*(w>=4&&(h=x>1?ln(m):a(&y,&i))&&o - ("\n",*h,*(1+h),*(2+h),str(F+,y,i),vi(x))); - for(x/=2;x>0&&w<4;++w)tr(x,y+w/2*x,w%2*x+i); -} - -int main() -{ - long k,r=1e6,h;d=calloc(r,k=sizeof(n)),f=d+r,b=d; - - while(0<(h=i("%f",b)))*--f=*b++;v=b-d;if - - (!h+v%2+!v&&(r=0x630C65u)){o("\n0x7");while(r-->0)o("F");rt -1;} - mx((d+v),-r,r);qsort(d,2+(v/=2),2*k,cc); - tr(U,str(0,*o(4+_,"xml","svg",vi(2*F+U)),0)); - - for(b=d-1+r,k=0;v>k++;b-=2)for(r=1;0<=r;--r) - o("<%s x=\"%f\" y=\"%f\" fill=\"%s\" %s-anchor=\"end\">%d\n", - 4+q,str(F+r/2.-5+U**,b,(b-1)),q+r,q+4,k+!o - ("\n", - r+q,str(F+r/4.+U**,b,(b-1))),4+q); - - free(d);rt o("\n")-7; -}