From 000823d86bc072f5bf3d026640daa471d5f60753 Mon Sep 17 00:00:00 2001 From: Landon Curt Noll Date: Wed, 15 Mar 2023 14:08:30 -0700 Subject: [PATCH] fix Makefile and README.md for 2000/robison --- 2000/robison/Makefile | 488 +++++++++++++++++++++++++---------------- 2000/robison/README.md | 254 ++++++++++----------- 2 files changed, 433 insertions(+), 309 deletions(-) diff --git a/2000/robison/Makefile b/2000/robison/Makefile index 25524921d..4ae2b091e 100644 --- a/2000/robison/Makefile +++ b/2000/robison/Makefile @@ -1,215 +1,331 @@ -#!/bin/make -# 2000 makefile +#!/usr/bin/env make # -# Copyright (C) Simon Cooper, Landon Curt Noll, Peter Seebach -# 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. +# IOCCC 2000 winning entry - robison -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. -# A few compilers have broken optimizers and thus you may -# not want anything. +# 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-bitwise-op-parentheses -Wno-error -Wno-implicit-function-declaration \ + -Wno-format-security -Wno-parentheses -Wno-shift-negative-value \ + -Wno-shift-op-parentheses + +# 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} -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= -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, -# 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} +CFLAGS= ${CSTD} ${CWARN} ${ARCH} ${CDEFINE} ${CINCLUDE} ${OPT} -NO_ANSI_CFLAGS= -#NO_ANSI_CFLAGS= +# Libraries needed to build +# +LIBS= +#LIBS= -lm +#LIBS= -L ${X11_LIBDIR} -lX11 +#LIBS= `${SDL2_CONFIG} --libs` -# NOTE: On some systems, the library path does not include the location -# 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. +# C compiler to use # 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 \ - 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 +ifeq ($(CC),clang) # -anderson: anderson.c - ${CC} ${CFLAGS} $? -o $@ - -# Most Timely Output +CSILENCE+= -Wno-comma -Wno-conditional-uninitialized -Wno-format-nonliteral \ + -Wno-implicit-int-conversion -Wno-missing-prototypes \ + -Wno-missing-variable-declarations -Wno-poison-system-directories \ + -Wno-shadow -Wno-sign-conversion # -schneiderwent: schneiderwent.c - ${CC} ${CFLAGS} $? -o $@ - -schneiderwent_files: schneiderwent.data - -schneiderwent.orig: schneiderwent.orig.c - ${CC} ${CFLAGS} $? -o $@ - -# Best Abuse of CPP +CWARN+= -Weverything # -primenum: primenum.c - ${CC} ${CFLAGS} $? -o $@ +endif -# Most Specific Output +# Specific add-ons or replacements for gcc only # -bellard: bellard.c - ${CC} ${CFLAGS} $? -o $@ +ifeq ($(CC),gcc) +# +#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 - -# Best Abuse of User +############################## +# Special flags for this entry +############################## # -briddlebane: briddlebane.c - ${CC} ${CFLAGS} $? -o $@ -lm - -briddlebane.orig: briddlebane.orig.c - ${CC} ${CFLAGS} $? -o $@ -lm - -# Best Layout +ENTRY= robison +PROG= ${ENTRY} # -dhyang: dhyang.c - ${CC} ${CFLAGS} $? -o $@ - -dmy2jd: dmy2jd.c - ${CC} ${CFLAGS} $? -o $@ - -# Best of Show +OBJ= ${PROG}.o +DATA= +TARGET= ${PROG} # -jarijyrki: jarijyrki.c - ${CC} ${X11CCFLAGS} ${CFLAGS} -DNeedFunctionPrototypes \ - -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 +ALT_OBJ= +ALT_TARGET= -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 -# 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 +all: data ${TARGET} @${TRUE} -install: all - ${CAT} ${WINNERS} ${ALT_NAMES} > /dev/null +.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: + ${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 '' /\\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/2000/robison/README.md b/2000/robison/README.md index f01a1672c..123bb4c40 100644 --- a/2000/robison/README.md +++ b/2000/robison/README.md @@ -1,172 +1,180 @@ -Best game: +# Best game: - Arch D. Robison - 1406 Country Lake Drive - Champaign IL 61821 - USA +Arch D. Robison +1406 Country Lake Drive +Champaign IL 61821 +USA +# To build: -Judges' Comments: +```sh +make +``` - To build: +### To run: - make robison +```sh +./robison +``` - To run: +### Try: - ./robison +```sh +echo "Do or do not. There is no try." +``` - The program plays almost always reasonably, but does not always detect - illegal moves. Try "9 1" as your first move, then "13 2". Also it - tends to think for quite a while in the beginning of a game. It is - also smart enough to give up by making a losing move at the end of - a game when its position is hopeless. +## Judges' comments: - Unfortunately, due to the contest rules, we're unable to grant the - author a patent he applied for. :-) +The program plays almost always reasonably, but does not always detect +illegal moves. Try "9 1" as your first move, then "13 2". Also it +tends to think for quite a while in the beginning of a game. It is +also smart enough to give up by making a losing move at the end of +a game when its position is hopeless. +Unfortunately, due to the contest rules, we're unable to grant the +author a patent he applied for. :-) -Selected Author's Comments: +## Author's comments: - TITLE OF INVENTION +### TITLE OF INVENTION - Highly Compressed Program for Playing Hygienic Checkers +Highly Compressed Program for Playing Hygienic Checkers - FIELD OF INVENTION +### FIELD OF INVENTION - The present invention generally relates to checkers. +The present invention generally relates to checkers. - BACKGROUND OF THE INVENTION +### BACKGROUND OF THE INVENTION - Within the field of checkers, the problem of finding a hygienic opponent - is difficult, as good opponents are peculiar to the tavern habitat of - cracker-barrels, pot-belly stoves, tobacco, and spittoons. +Within the field of checkers, the problem of finding a hygienic opponent +is difficult, as good opponents are peculiar to the tavern habitat of +cracker-barrels, pot-belly stoves, tobacco, and spittoons. - BRIEF SUMMARY OF THE INVENTION +### BRIEF SUMMARY OF THE INVENTION - The present invention plays checkers without spitting. +The present invention plays checkers without spitting. - BRIEF DESCRIPTION OF SEVERAL VIEWS OF THE INVENTION +### BRIEF DESCRIPTION OF SEVERAL VIEWS OF THE INVENTION - FIG. 1 shows a numbering of positions. +FIG. 1 shows a numbering of positions. - FIG. 2 shows a numbering of directions. +FIG. 2 shows a numbering of directions. - FIG. 3 shows a sample board. +FIG. 3 shows a sample board. - FIG. 4 shows a method in accordance with the present invention. +FIG. 4 shows a method in accordance with the present invention. - DETAILED DESCRIPTION OF THE INVENTION +### DETAILED DESCRIPTION OF THE INVENTION - Operator plays Black (x); the program plays White (o). Said Black goes - first. On operators turn, said program requests a position and direction. - FIG. 1 shows the numbering of the squares. FIG. 2 shows the numbering of - directions. As per standard rules, if one or more jumps are possible, one - of the jumps must be taken in preference to other moves. Said operator - enters the numbers for the position and direction. If after jumping over a - piece, another jump is possible, and said piece did not become a king after - said jump, standard rules require that another jump be taken. In said case, - said program requests a direction only in which to continue jumping from the - present position. Kings are denoted by upper case. FIG 3. shows a sample - board. There is a black king (X) on square 30 and a red king (O) on square - 2. The numbers on the right are the numbers of the rightmost square in each - row. +Operator plays Black (x); the program plays White (o). Said Black goes +first. On operators turn, said program requests a position and direction. +FIG. 1 shows the numbering of the squares. FIG. 2 shows the numbering of +directions. As per standard rules, if one or more jumps are possible, one + of the jumps must be taken in preference to other moves. Said operator +enters the numbers for the position and direction. If after jumping over a +piece, another jump is possible, and said piece did not become a king after +said jump, standard rules require that another jump be taken. In said case, +said program requests a direction only in which to continue jumping from the +present position. Kings are denoted by upper case. FIG 3. shows a sample +board. There is a black king (X) on square 30 and a red king (O) on square +2. The numbers on the right are the numbers of the rightmost square in each +row. - A player loses if they cannot make a legal move. Said loss is trivially - true if player loses all of his/her pieces. The present invention announces - said loser. +A player loses if they cannot make a legal move. Said loss is trivially +true if player loses all of his/her pieces. The present invention announces +said loser. - FIG. 4 shows a C program in accordance with the present invention. Control - flow is straightforward: control enters routine ``main'', executes a - plurality of statements, and exits via return statement. FIG. 4 presumes - that type int is 32 bits and short is 16 bits, which are essential to the - preferred embodiment of the invention. FIG. 4 also presumes that the host - computer uses ASCII encoding for characters. It should be obvious that - practitioners skilled in the art of C programming can remove said - limitations. +FIG. 4 shows a C program in accordance with the present invention. Control +flow is straightforward: control enters routine ``main'', executes a +plurality of statements, and exits via return statement. FIG. 4 presumes +that type int is 32 bits and short is 16 bits, which are essential to the +preferred embodiment of the invention. FIG. 4 also presumes that the host +computer uses ASCII encoding for characters. It should be obvious that +practitioners skilled in the art of C programming can remove said +limitations. - The disclosure here describes a particular embodiment of the present - invention, and other embodiments within the spirit of this disclosure - are possible, as well as consumption of spirits while playing. +The disclosure here describes a particular embodiment of the present +invention, and other embodiments within the spirit of this disclosure +are possible, as well as consumption of spirits while playing. - CLAIMS +### CLAIMS - I claim, by letters patently absurd: +I claim, by letters patently absurd: - 1. A method for playing checkers on a computer-based system, where said - method's source code fits into 1536 countable bytes of source code, - where a byte is countable if +1. A method for playing checkers on a computer-based system, where said + method's source code fits into 1536 countable bytes of source code, + where a byte is countable if - (a) it is not whitespace and - (b) it is not a {, }, or ; immediately followed by whitespace. + (a) it is not whitespace and + (b) it is not a {, }, or ; immediately followed by whitespace. - 2. The method of claim 1, further comprising a method of alpha-beta pruning - that exploits the zero-sum nature of the game to unify alpha - and beta cuts. +2. The method of claim 1, further comprising a method of alpha-beta pruning + that exploits the zero-sum nature of the game to unify alpha + and beta cuts. - 3. The method of claim 1, further comprising the step of formatting the - source code with short lines, in order to impress manager with - high productivity, when measured in lines of code. +3. The method of claim 1, further comprising the step of formatting the + source code with short lines, in order to impress manager with + high productivity, when measured in lines of code. - 4. The method of claim 3, further comprising the step for telling - skeptical manager that this is the well-known technique of - "linear programming". +4. The method of claim 3, further comprising the step for telling + skeptical manager that this is the well-known technique of + "linear programming". - 5. The method of claim 1, where ~- and -~ replace the obvious arithmetic - operations. +5. The method of claim 1, where ~- and -~ replace the obvious arithmetic + operations. - 6. The method of claim 1, further comprising a method where +6. The method of claim 1, further comprising a method where - (a) strings are encrypted in a manner suitable as C strings, and - (b) 7-bit ASCII characters with uniform distribution are maximally - packed subject to the restriction that - (c) each byte is not countable. + (a) strings are encrypted in a manner suitable as C strings, and + (b) 7-bit ASCII characters with uniform distribution are maximally + packed subject to the restriction that + (c) each byte is not countable. - 7. A method for a computer-based system that uses a single shared code - sequence to either sum a plurality of bits in an N-bit word or reverses - them, in lg(N) time, depending upon a parameter. +7. A method for a computer-based system that uses a single shared code + sequence to either sum a plurality of bits in an N-bit word or reverses + them, in lg(N) time, depending upon a parameter. - DRAWINGS +DRAWINGS - FIG 1. +FIG 1. - +--+--+--+--+--+--+--+--+ - |32| |31| |30| |29| | - +--+--+--+--+--+--+--+--+ - | |28| |27| |26| |25| - +--+--+--+--+--+--+--+--+ - |24| |23| |22| |21| | - +--+--+--+--+--+--+--+--+ - | |20| |19| |18| |17| - +--+--+--+--+--+--+--+--+ - |16| |15| |14| |13| | - +--+--+--+--+--+--+--+--+ - | |12| |11| |10| | 9| - +--+--+--+--+--+--+--+--+ - | 8| | 7| | 6| | 5| | - +--+--+--+--+--+--+--+--+ - | | 4| | 3| | 2| | 1| - +--+--+--+--+--+--+--+--+ + +--+--+--+--+--+--+--+--+ + |32| |31| |30| |29| | + +--+--+--+--+--+--+--+--+ + | |28| |27| |26| |25| + +--+--+--+--+--+--+--+--+ + |24| |23| |22| |21| | + +--+--+--+--+--+--+--+--+ + | |20| |19| |18| |17| + +--+--+--+--+--+--+--+--+ + |16| |15| |14| |13| | + +--+--+--+--+--+--+--+--+ + | |12| |11| |10| | 9| + +--+--+--+--+--+--+--+--+ + | 8| | 7| | 6| | 5| | + +--+--+--+--+--+--+--+--+ + | | 4| | 3| | 2| | 1| + +--+--+--+--+--+--+--+--+ - FIG. 2. +FIG. 2. - 1 0 - \ / - . - / \ - 3 2 + 1 0 + \ / + . + / \ + 3 2 - FIG. 3. +FIG. 3. - o o X . 29 - o . . . 25 - o . . o 21 - . o . o 17 - x . . . 13 - . . x . 9 - x x . . 5 - x x O x 1 + o o X . 29 + o . . . 25 + o . . o 21 + . o . o 17 + x . . . 13 + . . x . 9 + x x . . 5 + x x O x 1 - FIG. 4 +FIG. 4 - [See attached listing.] +[See attached listing.]