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,15 @@
|
||||
|
||||
build: timwi
|
||||
|
||||
clean:
|
||||
|
||||
clobber:
|
||||
-rm timwi
|
||||
|
||||
timwi: timwi.c
|
||||
${CC} ${CFLAGS} ${LDFLAGS} $< -o $@
|
||||
|
||||
alt:
|
||||
|
||||
data:
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
# Most discourteous interpreter
|
||||
|
||||
Arne "Timwi" Heizmann
|
||||
Germany
|
||||
timwi@gmx.net
|
||||
|
||||
## Judges' notes
|
||||
|
||||
### To build
|
||||
|
||||
cc timwi.c -o timwi
|
||||
|
||||
### To run
|
||||
|
||||
timwi < bf_program
|
||||
|
||||
Unlike most BF interpreters that we have been receiving for the last few
|
||||
years, this one, in our opinion, is the most obfuscated albeit the most
|
||||
discourteous to the language it interprets. A simple 3-character fix will make
|
||||
it slightly less so.
|
||||
|
||||
Quite a few BF programs found on the Net expect byte-based memory, quite a few
|
||||
exceed the capacity of this interpreter, but there are many that work. Some
|
||||
small quines work, some don't.
|
||||
|
||||
Why?
|
||||
|
||||
## Selected notes from the author
|
||||
|
||||
This is an interpreter for the programming language BrainFuck (BF).
|
||||
|
||||
Input must be provided in the following format: First a sequence of integers
|
||||
separated by whitespace (this will be the input to the BF program), then a
|
||||
colon (:), then the BF program itself.
|
||||
|
||||
Example:
|
||||
|
||||
(echo "20 : ,-->+.>+.<<[>[>>+>+<<<-]>[>>+>+<<<-]>";
|
||||
|
||||
echo "[<+>-]>[<<<+>>>-]>[-]<<<<.<-]") | timwi
|
||||
|
||||
This will print the first 20 Fibonacci numbers.
|
||||
|
||||
You must not pass any command-line arguments.
|
||||
|
||||
### Features
|
||||
|
||||
* Supports the complete set of 8 BF instructions (+-<>[].,).
|
||||
* Supports the use of alternative characters for some of those instructions.
|
||||
Use this to obfuscate your BF programs!
|
||||
|
||||
For a challenge, figure out what this obfuscated BF program does:
|
||||
|
||||
J4mzt?Vazexx-20d~&&~AxdUV!x(~Jz&V)x*(P=J)JUN(dizz)xx_!xx'0&{Vz;}&Jj
|
||||
|
||||
It takes two integers as input and outputs one integer.
|
||||
|
||||
* Ignores all whitespace (newlines, spaces and tabs) in the input program.
|
||||
|
||||
### Limitations
|
||||
|
||||
Since the program, naturally, uses ints, the calculations must not exceed the
|
||||
range of an int. (But then again, you can use the integer overflow to further
|
||||
obfuscate your BF programs in creative ways!)
|
||||
|
||||
You are limited to 3125 input integers and 3125 instructions. If you exceed
|
||||
one of these limits, the behaviour is undefined.
|
||||
|
||||
### Obfuscations
|
||||
|
||||
Some of the superficial obfuscations are pretty obvious: I'm using #defines to
|
||||
make everything look nice and liney, and the program is merely a recursive
|
||||
main function with only a single 'return' statement which uses nested ternary
|
||||
operators to make even the pre-processed code unreadable.
|
||||
|
||||
However, the more subtle obfuscations relate to the way the program works.
|
||||
After applying the pre-processing, you will see a lot of "1+1+1+...etc.", and
|
||||
even if you replace these with their result, those numbers will still not
|
||||
represent (or even relate to) the ASCII codes of the BF instructions.
|
||||
|
||||
The program will first read in all the input integers, but it will begin
|
||||
execution immediately and only read program instructions as they are needed.
|
||||
Yet there is no global variable storing how far it has read! Perhaps the
|
||||
hardest thing to figure out is how it finds the matching square brackets.
|
||||
@@ -0,0 +1,26 @@
|
||||
#include <stdio.h>
|
||||
#define _ main(
|
||||
#define _l ___l ___l ___l ___l ___)
|
||||
#define __l int
|
||||
#define ___l ___)*(
|
||||
#define ____l (_l],
|
||||
#define ____ 1
|
||||
#define ___ __+_____
|
||||
#define __ ____+____
|
||||
#define _____ __+____
|
||||
#define ______1 *(l__
|
||||
#define _____1 *__1%(__
|
||||
#define ____1 )?(
|
||||
#define ___1 _1&(__
|
||||
__l __I[____l _I[____l*l__=_I,*l_=__I;__l _ __l _1,__l*__1){__l _l_;
|
||||
return ___1+ __ ____1 ___1 ____1*__1 = getchar()):__ ____1*__1<____?
|
||||
____:_____1+___ ____1 _____1+_____ ____1 _____1+____)____1 ___1+___+
|
||||
____ ____1 _____1 +__)____1 _____1 )____1 *l__)++:_____1+____)-____?
|
||||
______1 ++) :_____1+_____) -____?__:printf("%d\n",*l__):_____1+____+
|
||||
___ ____1 *l__) =*(l_++ ):__:___l ____- ____):_____1 +_____)-3?__-2:
|
||||
____:(___1+____+___ ____1 _____1)____1*l__)-- :_____1+__)?__:______1
|
||||
--):___l 0))?__:_ _1,__1+____)+____:(___1+____+___ )) &&* l__?_ ___1
|
||||
+___+___+__),__1+____)?_ ___1+11 )|(___1)?____:__- 2),__1):____-1 :(
|
||||
_l_=_ ___1 -____+___l ____),__1+____ )) ?_l_+_ ___1 )?_1 :___1+10)|(
|
||||
___1-____ ____1 __):0),__1+_l_):0):__:_1%(__ ____1 _1/(__)) ?_ scanf
|
||||
("%i",__1 ____1 _____):(___l _____)-____,__1 +____):_ _____,l_):__;}
|
||||
Reference in new issue
Block a user