fix Makefile, README.md and .gitignore for 2000/rince

This commit is contained in:
Landon Curt Noll committed 2023-03-15 14:03:34 -07:00
1 parent 568940b9bf
commit 3b44e798c8
3 files changed
+338 -219

No files matched your search

+1
View File
@@ -1 +1,2 @@
dmy2jd
rince rince
+301 -186
View File
@@ -1,215 +1,330 @@
#!/bin/make #!/usr/bin/env make
# 2000 makefile
# #
# Copyright (C) Simon Cooper, Landon Curt Noll, Peter Seebach # IOCCC 2000 winning entry - rince
# and Leonid A. Broukhis, 2000.
# 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 the contest judges.
SHELL= /bin/sh ################################################################################
CAT= cat
RM= rm
SED= sed
TRUE= true
#CINCLUDE= -I ${HOMEBREW_PREFIX}/include/SDL2
# optimization
# #
# Most compiles will safely use -O2. Some can use only -O. # Regarding individual entries:
# A few compilers have broken optimizers and thus you may #
# not want anything. # 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-empty-body -Wno-error -Wno-implicit-function-declaration \
-Wno-incompatible-pointer-types -Wno-parentheses -Wno-return-type \
-Wno-unevaluated-expression
# 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= -DM_PI=3.14159265358979323846
# 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} -I ${X11_INCDIR}/X11
#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=
#OPT= -O #OPT= -O
OPT= -O2 #OPT= -O1
#OPT= -O2
OPT= -O3
# flags for ANSI compiles # Default flags for ANSI C compilation
# #
# NOTE: Some ANSI compilers make use of -Xa to turn on ANSI mode, CFLAGS= ${CSTD} ${CWARN} ${ARCH} ${CDEFINE} ${CINCLUDE} ${OPT}
# others such as gcc may want -ansi, others (Compaq Tru64 Unix)
# want -std1, and others may want nothing at all.
# Adjust the CFLAGS line as needed.
#
# NOTE: Some compilers cannot optimize, or optimize some entries
# incorrectly. You might want to turn on -O to see if your
# compiler can handle them.
#
#
#CFLAGS= -Xa ${OPT}
#CFLAGS= -std1 $(OPT)
CFLAGS= -ansi ${OPT}
NO_ANSI_CFLAGS= # Libraries needed to build
#NO_ANSI_CFLAGS= #
#LIBS=
#LIBS= -lm
LIBS= -lm -L ${X11_LIBDIR} -lX11
#LIBS= `${SDL2_CONFIG} --libs`
# NOTE: On some systems, the library path does not include the location # C compiler to use
# of the X11 libraries. You might need to use a -L/path/to/X11/lib/dir
# in order to compile with these libs.
#
X11CCFLAGS= -I/usr/X11R6/include -I/usr/X11R6/include/X11 -I/usr/include/X11
#X11CCFLAGS=
X11LDFLAGS= -L/usr/X11R6/lib
#X11LDFLAGS=
# Perl
#
PERL= perl
#PERL= perl5
# 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= cc
MAY_NEED_GCC= gcc #CC=clang
#CC=gcc
# winners that compile under ANSI C # Compiler add-ons or replacements for clang only
# #
WINNERS= anderson schneiderwent primenum bellard bmeyer briddlebane dhyang \ ifeq ($(CC),clang)
dmy2jd jarijyrki dlowe natori rince robison thadgavin tomx
ALT_NAMES= schneiderwent.orig briddlebane.orig thadgavin.orig
DATA_FILES= schneiderwent_files bmeyer_files jarijyrki_files
all: ${WINNERS}
# Best use of flags
# #
anderson: anderson.c CSILENCE+= -Wno-comma -Wno-float-conversion -Wno-missing-prototypes \
${CC} ${CFLAGS} $? -o $@ -Wno-missing-variable-declarations -Wno-poison-system-directories \
-Wno-shorten-64-to-32 -Wno-sign-conversion -Wno-strict-prototypes \
# Most Timely Output -Wno-unreachable-code
# #
schneiderwent: schneiderwent.c CWARN+= -Weverything
${CC} ${CFLAGS} $? -o $@
schneiderwent_files: schneiderwent.data
schneiderwent.orig: schneiderwent.orig.c
${CC} ${CFLAGS} $? -o $@
# Best Abuse of CPP
# #
primenum: primenum.c endif
${CC} ${CFLAGS} $? -o $@
# Most Specific Output # Specific add-ons or replacements for gcc only
# #
bellard: bellard.c ifeq ($(CC),gcc)
${CC} ${CFLAGS} $? -o $@ #
#CSILENCE+=
#
#CWARN+=
#
endif
# Best Utility
#
# machines operating in 64 bit mode:
#
bmeyer: bmeyer.c
${CC} -DY= -O6 $? -o $@ -lm
#
# linux/x86, glibc 2.0, libc4/5:
#
# bmeyer: bmeyer.c
# ${CC} -DY="__setfpucw(0x127f)" -O6 $? -o $@ -lm
#
# linux/x86, glibc 2.1:
#
# bmeyer: bmeyer.c
# ${MAY_NEED_GCC} -DY='int x=0x127f; __asm__ ("fldcw %0" : : "m" (*&x))' \
# -O6 $? -o $@ -lm
bmeyer_files: lavabus.pgm lenna.glic michael.pgm ##############################
# Special flags for this entry
# Best Abuse of User ##############################
# #
briddlebane: briddlebane.c ENTRY= rince
${CC} ${CFLAGS} $? -o $@ -lm PROG= ${ENTRY}
briddlebane.orig: briddlebane.orig.c
${CC} ${CFLAGS} $? -o $@ -lm
# Best Layout
# #
dhyang: dhyang.c OBJ= ${PROG}.o
${CC} ${CFLAGS} $? -o $@ DATA=
TARGET= ${PROG} dmy2jd
dmy2jd: dmy2jd.c
${CC} ${CFLAGS} $? -o $@
# Best of Show
# #
jarijyrki: jarijyrki.c ALT_OBJ=
${CC} ${X11CCFLAGS} ${CFLAGS} -DNeedFunctionPrototypes \ ALT_TARGET=
-DU=40 -DT=98 '-Dz=(T+1)*U*U' -DQ=80 -DS=20 -DN=10 -DB=5 -DG=23 \
-Dp=7 '-DM=((p+1)*Q)+S' '-DH=(G*S)+S+S' -DC=XK_Up -DL=XK_Down \
-DO=XK_Left -DV=XK_Right -DR=XK_Escape -D_=XK_BackSpace \
$? -o $@ ${X11LDFLAGS} -lX11
jarijyrki_files: sheet1.info
# Worst Abuse of the Rules #################
# build the entry
#################
# #
# NOTE: You will need to adjust this path to the place where Perl has been all: data ${TARGET}
# installed on your system. Running "perl -V" may help you locate
# this place.
#
# The following bit of perl may help determining the values you need:
#
# perl -MConfig -e 'print "$Config{archlibexp}/CORE\n"'
#
#
dlowe: dlowe.c
${CC} ${NO_ANSI_CFLAGS} -DPERL_POLLUTE \
`${PERL} -MExtUtils::Embed -e ccopts` $? -o $@ \
`${PERL} -MExtUtils::Embed -e ldopts`
# Best Small Program
#
natori: natori.c
${CC} ${CFLAGS} $? -o $@ -lm
# Astronomically Obfuscated
#
rince: rince.c
${CC} ${X11CCFLAGS} ${CFLAGS} -DM_PI=3.14159265358979323846 \
$? -o $@ -lm ${X11LDFLAGS} -lX11
# Best game
#
robison: robison.c
${CC} ${CFLAGS} $? -o $@
# Most Portable Output
#
thadgavin: thadgavin.c
${CC} ${CFLAGS} $? -o $@ -lcurses -lm
thadgavin.orig: thadgavin.orig.c
${CC} ${CFLAGS} $? -o $@ -lncurses -lm
# Most Complete Program
#
tomx: tomx.c
${CC} ${CFLAGS} $? -o $@
everything: ${WINNERS} ${ALT_NAMES} ${DATA_FILES}
clean:
${RM} -f *.o a.out core ${WINNERS}
clobber: clean
${RM} -f ${WINNERS}
${RM} -f ${ALT_NAMES}
nuke: clobber
@${TRUE} @${TRUE}
install: all .PHONY: all alt data everything clean clobber install \
${CAT} ${WINNERS} ${ALT_NAMES} > /dev/null 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:
${RM} -f ${OBJ} ${ALT_OBJ}
@-if [ -f indent.c ]; then \
echo ${RM} -f indent.c; \
${RM} -f indent.c; \
fi
clobber: clean
${RM} -f ${TARGET} ${ALT_TARGET}
@-if [ -e sandwich ]; then \
${RM} -f sandwich; \
echo 'ate sandwich'; \
fi
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}
maker:
@echo 'Participate in a maker faire'
@${TRUE}
easter_egg:
@echo "you expected to often misunderstand this $${RANDOM} magic"
@echo "chongo '<was here>' /\\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"
+36 -33
View File
@@ -1,4 +1,4 @@
Astronomically Obfuscated: # Astronomically Obfuscated:
James Bonfield James Bonfield
MRC Laboratory of Molcular Biology MRC Laboratory of Molcular Biology
@@ -7,22 +7,26 @@ Astronomically Obfuscated:
CB2 2QH CB2 2QH
England England
# To build:
Judges' Comments: ```sh
make
```
To build: ### To run:
make rince ```sh
./rince number number2
```
To run (using an X windows server): ### Try:
./rince
Also try:
```sh
make dmy2jd make dmy2jd
./rince 0.001 `./dmy2jd 7.8 1 1610` ./rince 0.001 `./dmy2jd 7.8 1 1610`
```
## Judges' comments:
This program may have you going around in circles :-) Try running it This program may have you going around in circles :-) Try running it
first before reading the Selected Author's Comments below. first before reading the Selected Author's Comments below.
@@ -30,15 +34,15 @@ Judges' Comments:
The judges verified the correctness of output for recent dates The judges verified the correctness of output for recent dates
thru visual observation. thru visual observation.
## Author's comments:
Selected Author's Comments: ### How to use it
How to use it
-------------
The simplest way to run it is with no arguments. Just type: The simplest way to run it is with no arguments. Just type:
```sh
./rince ./rince
```
You will need to have access to X windows, although it doesn't require You will need to have access to X windows, although it doesn't require
desperately high resolution and there are no known limitations on colour desperately high resolution and there are no known limitations on colour
@@ -50,14 +54,18 @@ Selected Author's Comments:
which is used to ensure that we see the "live" pictures. Simply specify which is used to ensure that we see the "live" pictures. Simply specify
the fraction of a day to skip forward for each screen refresh. I suggest: the fraction of a day to skip forward for each screen refresh. I suggest:
```sh
./rince 0.01 ./rince 0.01
```
To display the output (still guessing?) for a given date, specify two To display the output (still guessing?) for a given date, specify two
arguments. The first argument is as before and the second argument is a arguments. The first argument is as before and the second argument is a
Julian day number (given as a fractional component). Eg: Julian day number (given as a fractional component). Eg:
```sh
./rince 0 2441193.6 ./rince 0 2441193.6
./rince 0.01 2441193.6 ./rince 0.01 2441193.6
```
A Julian day is defined to be the number of days since January 1st in A Julian day is defined to be the number of days since January 1st in
the year -4712 (4713BC), starting at 12 noon GMT.[1] To aid conversion the year -4712 (4713BC), starting at 12 noon GMT.[1] To aid conversion
@@ -65,9 +73,7 @@ Selected Author's Comments:
named: dmy2jd.c. Run it with "day_float month year" as arguments. See named: dmy2jd.c. Run it with "day_float month year" as arguments. See
below for an example. below for an example.
### What it does
What it does
------------
This program plots the positions of the four Galilean moons of Jupiter, This program plots the positions of the four Galilean moons of Jupiter,
as seen from earth. It doesn't correct for your location on earth, but I as seen from earth. It doesn't correct for your location on earth, but I
@@ -101,14 +107,13 @@ Selected Author's Comments:
(*) Not to scale. (*) Not to scale.
### History
History
-------
Galileo discovered the moons in January 1610. Galileo discovered the moons in January 1610.
"http://www-isds.jpl.nasa.gov/cwo/cwo_54ga/html/cd/galileo.htm" states "http://www-isds.jpl.nasa.gov/cwo/cwo_54ga/html/cd/galileo.htm" states
the following: the following:
```
By early 1610, Galileo had further improved his telescope by By early 1610, Galileo had further improved his telescope by
double its power, so it now enlarged objects a thousand double its power, so it now enlarged objects a thousand
times. He began looking at the stars and couldn't believe how times. He began looking at the stars and couldn't believe how
@@ -141,12 +146,15 @@ Selected Author's Comments:
the Earth orbited the sun, wouldn't the moon get left behind? the Earth orbited the sun, wouldn't the moon get left behind?
Here he could see for himself that somehow, a planet could Here he could see for himself that somehow, a planet could
orbit the sun, and not leave a moon behind! orbit the sun, and not leave a moon behind!
```
Thus we can plot Galileo's discoveries using the following three plots: Thus we can plot Galileo's discoveries using the following three plots:
```sh
./rince 0 `./dmy2jd 7.8 1 1610` ./rince 0 `./dmy2jd 7.8 1 1610`
./rince 0 `./dmy2jd 8.8 1 1610` ./rince 0 `./dmy2jd 8.8 1 1610`
./rince 0 `./dmy2jd 10.8 1 1610` ./rince 0 `./dmy2jd 10.8 1 1610`
```
However we can go one better by seeing what Galileo would have seen if it However we can go one better by seeing what Galileo would have seen if it
wasn't cloudy on the 9th. Try "./rince 0 `./dmy2jd 9.85 1 1610`" to see wasn't cloudy on the 9th. Try "./rince 0 `./dmy2jd 9.85 1 1610`" to see
@@ -167,31 +175,25 @@ Selected Author's Comments:
http://aa.usno.navy.mil/AA/faq/docs/millennium.html http://aa.usno.navy.mil/AA/faq/docs/millennium.html
### Assumptions
Assumptions
-----------
1. The ASCII character set is used. 1. The ASCII character set is used.
2. That an enormous comet hasn't changed the course of Jupiter (or Earth!). 2. That an enormous comet hasn't changed the course of Jupiter (or Earth!).
3. That the date has not been specified as the gap between the Julian 3. That the date has not been specified as the gap between the Julian and Gregorian calendar.
and Gregorian calendar.
4. That the DISPLAY environment variable is set and the X display can 4. That the DISPLAY environment variable is set and the X display can opened. If this is not the case the program will crash.
opened. If this is not the case the program will crash.
5. There is a year 2000BC problem :-) 5. There is a year 2000BC problem :-)
More specifically, the plots for dates that far back are too inaccurate More specifically, the plots for dates that far back are too inaccurate
to be of realistic use. Comparisons against SkyMap Pro [3] show that to be of realistic use. Comparisons against SkyMap Pro [3] show that
there is a good similarity (but not much more) up to about 500BC. there is a good similarity (but not much more) up to about 500BC.
6. The code definitely is not portable - it will produce incorrect results 6. The code definitely is not portable - it will produce incorrect results if run from the surface of Mars.
if run from the surface of Mars.
### Obfuscations
Obfuscations
------------
In addition to the normal obfuscations, I feel that the code contains In addition to the normal obfuscations, I feel that the code contains
some less common tricks. Taken through the standard rounds listed in the some less common tricks. Taken through the standard rounds listed in the
@@ -280,7 +282,9 @@ Selected Author's Comments:
which do not have usleep, but do have select, the following may which do not have usleep, but do have select, the following may
suffice as an additional compiler argument: suffice as an additional compiler argument:
```sh
-Dusleep={time_t v[2]={0,10000};select(0,0,0,0,v);} -Dusleep={time_t v[2]={0,10000};select(0,0,0,0,v);}
```
Gcc complains about "unreachable code at beginning of switch Gcc complains about "unreachable code at beginning of switch
statement", although removing some of this code will prevent statement", although removing some of this code will prevent
@@ -320,9 +324,8 @@ Selected Author's Comments:
I've only tried to include such examples in places where at I've only tried to include such examples in places where at
first glance the code appears to be executed. first glance the code appears to be executed.
### References
References
----------
[1] Astronomical algorithms (1st ed): page 59 [1] Astronomical algorithms (1st ed): page 59
Jean Meeus. Published by Willmann-Bell Inc. Jean Meeus. Published by Willmann-Bell Inc.