fix Makefile and README.md for 2013/dlowe

This commit is contained in:
Landon Curt Noll committed 2023-03-24 00:17:43 -07:00
1 parent 118e11f2b4
commit 3aea2311e3
2 files changed
+237 -111

No files matched your search

+196 -75
View File
@@ -1,97 +1,158 @@
#!/usr/bin/env make #!/usr/bin/env make
# #
# 2013 makefile # IOCCC 2013 winning entry - dlowe
################################################################################
# #
# This work by Landon Curt Noll, Simon Cooper, and Leonid A. Broukhis # Regarding individual entries:
# is licensed under: #
# 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. # Creative Commons Attribution-ShareAlike 3.0 Unported License.
# #
# See: http://creativecommons.org/licenses/by-sa/3.0/ # See: http://creativecommons.org/licenses/by-sa/3.0/
################ #############################
# tool locations # shell used by this Makefile
################ #############################
# #
SHELL= bash SHELL= bash
CP= cp
CPP= cpp #######################
GUNZIP= gunzip # common tool locations
LD= ld #######################
MAKE= make #
RM= rm include ../../var.mk
SED= sed
TAR= tar
TRUE= true
# Set X11_LIBDIR to the directory where the X11 library resides # Set X11_LIBDIR to the directory where the X11 library resides
# #
X11_LIBDIR= /usr/X11R6/lib #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 # Set X11_INCLUDEDIR to the directory where the X11 include files reside
# #
X11_INCDIR= /usr/X11R6/include #X11_INCDIR= /usr/X11R6/include
#X11_INCDIR= /usr/X11/include
X11_INCDIR= /opt/X11/include
# Compiler warnings # Common C compiler warnings to silence
# #
#CWARN= #CSILENCE=
CWARN= -Wall -Wno-implicit-int CSILENCE= -Wno-implicit-int -Wno-pedantic
#CWARN= -Wall -W -pedantic
# compiler standard # Common C compiler warning flags
#
#CWARN= ${CSILENCE}
#CWARN= -Wall ${CSILENCE}
#CWARN= -Wall -Wextra ${CSILENCE}
CWARN= -Wall -Wextra -pedantic ${CSILENCE}
# Compiler standard
# #
#CSTD= #CSTD=
#CSTD= -ansi #CSTD= -ansi
CSTD= -std=c99 CSTD= -std=gnu11
# compiler bit architecture # Compiler bit architecture
# #
# Some entries require 32-bitness: # Some entries require 32-bitness:
# ARCH= -m32 # ARCH= -m32
# #
# Some entries require 64-bitess: # Some entries require 64-bitness:
# ARCH= -m64 # ARCH= -m64
# #
# By default we assume nothing: # By default we assume nothing:
# #
ARCH= ARCH=
# optimization # Defines that are needed to compile
#
#CDEFINE=
CDEFINE= -D'_(x)=strtof(b[x],0)'
# 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. # Most compiles will safely use -O2. Some can use only -O1 or -O.
# A few compilers have broken optimizers or this entry make break # A few compilers have broken optimizers or this entry make break
# under those buggy optimizers and thus you may not want anything. # under those buggy optimizers and thus you may not want anything.
# Reasonable compilers will allow for -O3.
# #
#OPT= #OPT=
#OPT= -O #OPT= -O
#OPT= -O1 #OPT= -O1
OPT= -O2 #OPT= -O2
#OPT= -O3 OPT= -O3
# Default flags for ANSI C compilation
#
CFLAGS= ${CSTD} ${CWARN} ${ARCH} ${CDEFINE} ${CINCLUDE} ${OPT}
# Libraries needed to build # Libraries needed to build
# #
LIBS= LIBS=
#LIBS= -lm
#LIBS= -L ${X11_LIBDIR} -lX11
#LIBS= `${SDL2_CONFIG} --libs`
# default flags for ANSI C compilation # C compiler to use
#
CFLAGS= ${CWARN} ${CSTD} ${ARCH} ${OPT} ${LIBS} -include stdio.h -include stdlib.h -D'_(x)=strtof(b[x],0)'
# 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
#CC=clang #CC=clang
MAY_NEED_GCC= gcc #CC=gcc
# Compiler add-ons or replacements for clang only
#
ifeq ($(CC),clang)
#
CSILENCE+= -Wno-float-conversion -Wno-poison-system-directories
#
CWARN+= -Weverything
#
endif
# Specific add-ons or replacements for gcc only
#
ifeq ($(CC),gcc)
#
#CSILENCE+=
#
#CWARN+=
#
endif
############################## ##############################
@@ -99,24 +160,33 @@ MAY_NEED_GCC= gcc
############################## ##############################
# #
ENTRY= dlowe ENTRY= dlowe
PROG= ${ENTRY}
#
OBJ= ${PROG}.o
DATA= DATA=
TARGET= ${PROG}
#
ALT_OBJ= ALT_OBJ=
ALT_ENTRY= ALT_TARGET=
################# #################
# build the entry # build the entry
################# #################
# #
all: ${ENTRY} ${DATA} all: data ${TARGET}
@${TRUE} @${TRUE}
${ENTRY}: ${ENTRY}.c .PHONY: all alt data everything clean clobber install \
${CC} ${CFLAGS} $< -o $@ love haste waste maker easter_egg sandwich \
supernova deep_magic magic charon pluto
${PROG}: ${PROG}.c
${CC} ${CFLAGS} $< -o $@ ${LIBS}
# alternative executable # alternative executable
# #
alt: ${ALT_ENTRY} alt: data ${ALT_TARGET}
@${TRUE} @${TRUE}
# data files # data files
@@ -124,33 +194,51 @@ alt: ${ALT_ENTRY}
data: ${DATA} data: ${DATA}
@${TRUE} @${TRUE}
# both all and alt
#
everything: all alt
############### ###############
# utility rules # utility rules
############### ###############
# #
everything: all alt
clean: clean:
${RM} -f ${ENTRY}.o ${ALT_OBJ} ${RM} -f ${OBJ} ${ALT_OBJ}
@-if [ -f indent.c ]; then \
echo ${RM} -f indent.c; \
${RM} -f indent.c; \
fi
clobber: clean clobber: clean
${RM} -f ${ENTRY} ${ALT_ENTRY} ${RM} -f ${TARGET} ${ALT_TARGET}
@-if [ -e sandwich ]; then \
nuke: clobber ${RM} -f sandwich; \
@${TRUE} echo 'ate sandwich'; \
fi
dist_clean: nuke
@${TRUE}
install: install:
@echo "Surely we are joking Dr. Lehmer!" @echo "Dr. Spock says that is not logical!"
@${TRUE} @${TRUE}
# backwards compatibility # you may be able to misunderstand the source by reading indent.c
# #
build: all indent.c: ${PROG}.c
@${TRUE} @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
################## ##################
@@ -169,36 +257,69 @@ waste:
@echo 'haste' @echo 'haste'
@${TRUE} @${TRUE}
maker:
@echo 'Participate in a maker faire'
@${TRUE}
easter_egg: easter_egg:
@echo you expected to mis-understand this $${RANDOM} magic @echo "you expected to often misunderstand this $${RANDOM} magic"
@echo chongo '<was here>' "/\\oo/\\" @echo "chongo '<was here>' /\\oo/\\"
@echo Readers shall not be disallowed from being unable to not partly misunderstand this partocular final echo. @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 # Understand the history of the Homebrew Computer Club
# as well as the West Coast Computer Faire and # as well as the West Coast Computer Faire and
# you might be confused different. :-) # you might be confused different. :-)
# #
supernova: nuke supernova: sandwich
@-if [ -r .code_anal ]; then \ @-if [ -r .code_anal ]; then \
${RM} -f .code_anal_v4; \ ${RM} -f .code_anal_v6; \
else \ else \
echo "We are not expected to understand that"; \ echo "planet deniers, like some members of the IAU, are so cute when they try to defend their logic"; \
fi fi
@echo "A $@ helps ${MAKE} the elements that help form planets"
@${TRUE} @${TRUE}
deep_magic: deep_magic: supernova
@-if [ -r .code_anal ]; then \ @-if [ -r .code_anal ]; then \
ccode_analysis --deep_magic 2ed3582ec5c094a093fea2a6bcb9f19439892873c9cc45ed1ceaafe08b7d52e1b2c7cd524be3b0b2 --FNV1a_hash 512-bit "${ENTRY}"; \ ccode_analysis --deep_magic 7889066cdbdf09b0408021754586e895be641cc9be29e7eafd3ca65359541f17 \
--FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \
else \ else \
echo "Park different"; \ echo "Wrong! Do it again!"; \
sleep 2; \
echo "Wrong! Do it again!"; \
sleep 2; \
echo "Wrong! Do it again!"; \
fi fi
@${TRUE} @${TRUE}
magic: deep_magic magic: deep_magic
@-if [ -r .code_anal ]; then \ @-if [ -r .code_anal ]; then \
ccode_analysis --mode 391581 --level 216193 --FNV1a_hash 512-bit "${ENTRY}"; \ ccode_analysis --level 20003 --mode 5717175 --FNV1a_hash_512_bit -v2 "${PROG}" "${PROG}.c"; \
else \ else \
echo "These aren't the primes you're looking for Paul Erdos!"; \ 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 fi
@${TRUE} @${TRUE}
dlowe: dlowe.c
# 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"
+41 -36
View File
@@ -1,33 +1,35 @@
# Best sparkling utility # Best sparkling utility
J. David Lowe J. David Lowe
434 Tenney Drive 434 Tenney Drive
Rogue River, OR Rogue River, OR
97537 97537
<j.david.lowe@gmail.com> <j.david.lowe@gmail.com>
<http://www.pootpoot.net/> <http://www.pootpoot.net/>
# To build:
## Judges' comments: ```sh
### To build: make
```
make dlowe
### To run: ### To run:
./dlowe [numbers...] ```sh
./dlowe [numbers...]
```
### Try: ### Try:
./dlowe 0 1 2 3 4 5 6 7 ```sh
./dlowe 16 32 64 128 ./dlowe 0 1 2 3 4 5 6 7
./dlowe 16 32 64 128
echo sparkline of file sizes: `wc -c * | awk '{print $1}' | xargs ./dlowe` echo sparkline of file sizes: `wc -c * | awk '{print $1}' | xargs ./dlowe`
./dlowe 0
```
./dlowe 0 ## Judges' comments:
### Selected Judges Remarks:
We liked how this entry used Unicode, specifically UTF-8, in a somewhat obfuscated way. We liked how this entry used Unicode, specifically UTF-8, in a somewhat obfuscated way.
@@ -36,10 +38,12 @@ or when all arguments are equal?
For extra fun, compile and run For extra fun, compile and run
#include <stdio.h> ```c
int main() { #include <stdio.h>
printf("%d %d %d\n", (int)(-1.0/0.0), (int)(0.0/0.0), (int)(1.0/0.0)); int main() {
} printf("%d %d %d\n", (int)(-1.0/0.0), (int)(0.0/0.0), (int)(1.0/0.0));
}
```
with gcc and clang. with gcc and clang.
@@ -53,28 +57,30 @@ and with clang (3.3), we get
Which one is correct? :) Which one is correct? :)
## Author's comments: ## Author's comments:
# sparkl
### sparkl
A tiny implementation of command-line 'sparkline' data visualization. A tiny implementation of command-line 'sparkline' data visualization.
## Synopsis ### Synopsis
$ sparkl 0 1 2 3 4 5 6 7 ```sh
▁▂▃▄▅▆▇▉ $ sparkl 0 1 2 3 4 5 6 7
▁▂▃▄▅▆▇▉
$ echo sparkline of file lengths: `wc -c * | awk '{print $1}' | xargs sparkl` $ echo sparkline of file lengths: `wc -c * | awk '{print $1}' | xargs sparkl`
sparkline of file sizes: ▁▁▁▃▃▂▁▂▁▁▉ sparkline of file sizes: ▁▁▁▃▃▂▁▂▁▁▉
```
## Description ### Description
This is a handy little tool for visualizing numeric series from the This is a handy little tool for visualizing numeric series from the
command-line, using 'sparklines'. Pass it a numeric series as arguments, and command-line, using 'sparklines'. Pass it a numeric series as arguments, and
sparkl will display a sparkline graph, which you can use to very quickly get a sparkl will display a sparkline graph, which you can use to very quickly get a
sense of the shape of your data. sense of the shape of your data.
## Limitations ### Limitations
* Crashes with 0 arguments. It'd be trivial to fix, but adds a few bytes to the * Crashes with 0 arguments. It'd be trivial to fix, but adds a few bytes to the
code. code.
@@ -83,7 +89,7 @@ sense of the shape of your data.
used. used.
* Produces a few harmless compiler warnings. * Produces a few harmless compiler warnings.
## Obfuscation ### Obfuscation
The code is very terse. I was torn between submitting this version, and a The code is very terse. I was torn between submitting this version, and a
one-line version compressed using a couple more -D flags. one-line version compressed using a couple more -D flags.
@@ -91,7 +97,7 @@ one-line version compressed using a couple more -D flags.
Hand-rolled utf-8 sequence, magic numbers (what's that 7 for?), meaningless Hand-rolled utf-8 sequence, magic numbers (what's that 7 for?), meaningless
variable names, reused variables, and so on. variable names, reused variables, and so on.
## Acknowledgements ### Acknowledgements
Edward Tufte invented sparklines (among other things.) Brilliant. Edward Tufte invented sparklines (among other things.) Brilliant.
@@ -103,11 +109,10 @@ write an obfuscated C sparkline utility! Vicent Martí created
[this one](https://gist.github.com/vmg/1368661) years (!) ago. (My [this one](https://gist.github.com/vmg/1368661) years (!) ago. (My
implementation is completely independent.) implementation is completely independent.)
-------------------------------------------------------------------------------- ## Copyright:
<!--
(c) Copyright 1984-2015, [Leo Broukhis, Simon Cooper, Landon Curt Noll][judges] - All rights reserved (c) Copyright 1984-2015, [Leo Broukhis, Simon Cooper, Landon Curt Noll][judges] - All rights reserved
This work is licensed under a [Creative Commons Attribution-ShareAlike 3.0 Unported License][cc]. This work is licensed under a [Creative Commons Attribution-ShareAlike 3.0 Unported License][cc].
[judges]: http://www.ioccc.org/judges.html [judges]: http://www.ioccc.org/judges.html
[cc]: http://creativecommons.org/licenses/by-sa/3.0/ [cc]: http://creativecommons.org/licenses/by-sa/3.0/
-->