Add preview of 1984-2019
The 2020 winners are hinted it, but the source code is not there,
nor are the hints. Someone could look into the HTML and
see what was commented out, but that is not a problem because
WHO won is known and the name of their AWARD is known already.
Moreover a number of the winners have talked about what their
entirs do, so the commented out spoiler text is not a bit problem.
One will find HTML commented out with:
<!-- XXX remove when 2020 is ready
2020 links here
XXX remove when 2020 is ready -->
The "XXX remove when 2020 is ready" string is found at the
start and end comment blocks. Again, soneone could read
what was commented out, but that is OK since most of that
information is known or can be known. The following files
have such HTML comment blocks in them.
./winners.html
./years-spoiler.html
./years.html
In addition, ./all/summary.txt was modified to not
include the 2020 entries for the momemt.
The 2020 winner code AND write-ups are NOT part of this set.
p.s. The all/all.tar.bz2 does not contain the 2020 source code (yet?).
This commit is contained in:
1 parent
28efc67f5d
commit
c0663537cb
1683 files changed
+220064
No files matched your search
@@ -0,0 +1,29 @@
|
||||
|
||||
build: klausler
|
||||
|
||||
clean:
|
||||
-rm dict.h
|
||||
|
||||
clobber: clean
|
||||
-rm klausler
|
||||
|
||||
klausler: klausler.c dict.h
|
||||
${CC} ${CFLAGS} ${LDFLAGS} $< -o $@
|
||||
|
||||
alt:
|
||||
|
||||
data: dict.h
|
||||
|
||||
dict.h:
|
||||
dict="";\
|
||||
for f in mydict /usr/share/dict/words /usr/dict/words /usr/lib/dict/words ;\
|
||||
do if [ -r $$f ]; then dict="$$dict $$f"; fi; done; \
|
||||
if [ ".$$dict" = . ]; then echo no dictionary found; exit 1; fi; \
|
||||
cat $$dict | \
|
||||
tr -cd 'A-Za-z\n' |\
|
||||
tr A-Z a-z |\
|
||||
egrep -v '^[^ais]$$' |\
|
||||
sort |\
|
||||
uniq |\
|
||||
sed 's/^/"/;s/$$/",/' >dict.h
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
# Abuse of the rules
|
||||
|
||||
Peter Klausler
|
||||
Cray Inc.
|
||||
2802 W 40th St
|
||||
Minneapolis MN 55410
|
||||
USA
|
||||
pmk@cray.com
|
||||
|
||||
## Judges' comments
|
||||
|
||||
To reduce the size of the source, include other people's data.
|
||||
That is what Peter suggests when he describes how to generate
|
||||
a critical header file.
|
||||
|
||||
In other words: make use of other words! :-)
|
||||
|
||||
Rules might have to be changed!
|
||||
|
||||
### To build
|
||||
|
||||
#!/bin/sh
|
||||
dict=""
|
||||
for f in mydict /usr/share/dict/words /usr/dict/words /usr/lib/dict/words
|
||||
do if [ -r $f ]; then dict="$dict $f"; fi; done
|
||||
|
||||
if [ ".$dict" = . ]; then echo no dictionary found; exit 1; fi
|
||||
|
||||
cat $dict | \
|
||||
tr -cd 'A-Za-z\n' | \
|
||||
tr A-Z a-z | \
|
||||
egrep -v '^[^ais]$' | \
|
||||
sort | \
|
||||
uniq | \
|
||||
sed 's/^/"/;s/$/",/' >dict.h
|
||||
|
||||
cc -o klausler klausler.c
|
||||
|
||||
### To run
|
||||
|
||||
klausler peter klausler | head
|
||||
|
||||
## Author's comments
|
||||
|
||||
A useful tool to help one appear extra smart and witty when IRCing, or even
|
||||
just highly annoying.
|
||||
|
||||
Finds best anagrams for word or phrase given as program arguments. Use only
|
||||
lower-case letters in these arguments. Output is sorted firstly in ascending
|
||||
order of word count (fewer words are better) and secondly in descending order
|
||||
of word length. Pipe the output into more(1)/less(1)/head(1) and you're likely
|
||||
to find the most amusing possibilities in the first few screenfuls of output.
|
||||
For example, "ana fawlty towers | more" quickly prints "waterfowl sty". The
|
||||
fewer obscure short words in your system's dictionary, the better the quality
|
||||
of the output; indeed, all one-letter words apart from "a", "i", and "s" (for
|
||||
plurals) are ignored when the dictionary is constructed by build.sh.
|
||||
|
||||
Some history and explanation: When I noticed the call for entries in this
|
||||
year's IOCCC, I submitted two of them. I worked on the first one very hard to
|
||||
obfuscate it beautifully, using a goofy algorithm, wonderful two's-complement
|
||||
arithmetic tricks, and cute formatting. It was a glorious work so lovely as to
|
||||
make even strong men weep in admiration... but it didn't win anything. On the
|
||||
other hand, this crappy little other program, which was only mildly obfuscated
|
||||
from its original hacked form, took home an award!
|
||||
|
||||
I'm embarrassed to admit that I don't even know which specific rule this entry
|
||||
has abused. It's just yet another anagram generator and it was written very
|
||||
late one night. And now I honestly do not know how it works, so please don't
|
||||
ask. Upon reviewing the program after its unexpected honor, I guess that it's
|
||||
remarkable only for its complete lack of macros, sneaky naming, main()
|
||||
recursion, or other tricks. Enjoy!
|
||||
@@ -0,0 +1,14 @@
|
||||
typedef unsigned char B;char*x[]={
|
||||
#include "dict.h"
|
||||
0};typedef struct L{B*s;struct L*n;}L;
|
||||
L*h[128],*l[128],*s[128],Z[sizeof x/sizeof*x],*F=Z;int c[256],m,a=1;
|
||||
int k(B*q){int g=0;B*p=q;while(*p)g|=!c[*p++]--;return g-1&p-q;}
|
||||
void u(B*p){while(*p)c[*p++]++;}
|
||||
void S(int N,int r,int t,L*W){L*w;int i,n;
|
||||
for(n=r<N?r:N;n>0;n--)for(w=n==N?W:h[n];s[t]=w;u(w->s),w=w->n)if(k(w->s))
|
||||
if(n==r){if(t==m-1)for(i=a=0;i<=t;i++)printf("%s%c",s[i]->s,i<t?' ':'\n');}
|
||||
else if(t<m-1)S(n,r-n,t+1,s[t]=w);}
|
||||
int main(int C,B**A){int i=0,g,n=0;B*p;while(--C)for(p=*++A;n<127&&*p;)c[*p++]++,n++;
|
||||
for(;p=x[i++];u(p))if(g=k(p))(l[g]=*(l[g]?&l[g]->n:&h[g])=F++)->s=p;
|
||||
while(++m<128)S(127,n,0,h[127]);
|
||||
return a;}
|
||||
@@ -0,0 +1,14 @@
|
||||
typedef unsigned char B;B*x[]={
|
||||
#include "dict.h"
|
||||
0};typedef struct L{B*s;struct L*n;}L;
|
||||
L*h[128],*l[128],*s[128],Z[sizeof x/sizeof*x],*F=Z;int c[256],m,a=1;
|
||||
int k(B*q){int g=0;B*p=q;while(*p)g|=!c[*p++]--;return g-1&p-q;}
|
||||
void u(B*p){while(*p)c[*p++]++;}
|
||||
void S(int N,int r,int t,L*W){L*w;int i,n;
|
||||
for(n=r<N?r:N;n>0;n--)for(w=n==N?W:h[n];s[t]=w;u(w->s),w=w->n)if(k(w->s))
|
||||
if(n==r){if(t==m-1)for(i=a=0;i<=t;i++)printf("%s%c",s[i]->s,i<t?' ':'\n');}
|
||||
else if(t<m-1)S(n,r-n,t+1,s[t]=w);}
|
||||
int main(int C,B**A){int i=0,g,n=0;B*p;while(--C)for(p=*++A;n<127&&*p;)c[*p++]++,n++;
|
||||
for(;p=x[i++];u(p))if(g=k(p))(l[g]=*(l[g]?&l[g]->n:&h[g])=F++)->s=p;
|
||||
while(++m<128)S(127,n,0,h[127]);
|
||||
return a;}
|
||||
Reference in new issue
Block a user