Introduction

On 2 April 2018 I saw an email from the day before; the 1st of April was a very difficult day for me and I also happened to be out visiting my now late grandparents so I didn't see it until quite a few hours later. Amusingly and ironically 1 April was Easter and my entry has two Easter eggs; I don't celebrate Easter but I do celebrate having won. My immediate feelings were pride and joy beyond measure - as I knew I would be ahead of time if I won - but I was also taken aback; I didn't expect to win such a contest though I knew I could. Perhaps a big part of this is not believing in myself fully but I still knew that I could win, somehow, whatever the result. Frankly I was surprised they were done judging but they were and I was ecstatic.

'Best use of weasel words'

tweet announcing my Best
		     use of weasel words 2018 IOCCC winning entry

My entry is an implementation of Richard Dawkins' Weasel program (Wikipedia) with additional features; this includes the ability to change the target chromosome (string), two Easter eggs one of which I reveal (can you find the other?), a number of options and the program behaviour is also modifiable by redefining two constants at compilation.

Weasel words

My entry can be found here. In that directory there is a file with a brief summary of files called FILES but here I include a few quick notes.

The prog.c file is the entry itself; prog.orig.c is what I originally submitted but I found a minor error (ironically and amusingly the error was the return value in the case of an error: I had 'return 0;' rather than 'return 1;' which is an error itself!) and corrected it. In my detailed remarks file hint.html I show the difference between prog.c and prog-simple.c (keyboards subsection of the hints section) and much more.

The Makefile has a test target; running `make test' runs the script test.sh which reads strings from test-strings.txt passing each string to the program, waiting approximately two seconds between each invocation. I submitted both of these but the judges modified the latter file and I literally laughed out loud at their change (I cite it at the end of this document).

The winning IOCCC 2018 winning entries can be downloaded from here.

Finally perhaps most important of all are my winning comments and in particular my dedications, thanks and acknowledgements.

History behind my entry

It is interesting for me to to think about it but I only by accident came across the Weasel program either shortly before the contest opened or very shortly after it opened. It seemed like an interesting thing to implement in an obfuscated way though I had no idea how well it'd go; it went a lot better than I expected: perhaps part of that is self-doubt but another part of it is that there are seasoned winners who have won year after year. Not only that but the judges have seen a lot of twisted code over the contest (and before and in between) and so they certainly have quite a skill in deciphering code. Of course by their own admission they are often surprised so I made sure to submit every little detail I could.

Perhaps more interesting is that I felt a bit false with writing it; that might sound odd so why is it? Well the idea is simply this: although I'm not sure I would classify genetic algorithms as artificial intelligence it somehow does remind me of AI and I am not in favour of AI in the slightest. I realise there is some potential but unfortunately humans have this knack for making really poor decisions; and to design a system that learns on its own, deciding what the best approach is, etc., when you also have robots that can carry things - including weapons - is truly terrifying. This is a moral and ethical debate that is riddled with problems and I am sceptical it can truly be answered in a global way; quite the opposite from what I have read there already are examples where robots have killed. I am a very strong believer in pity and I consider every life precious (because every life IS precious): precious and deserving of peace, happiness and love; but at the same time the reality is living creatures are taken from this world too soon too often and once a life is gone it's gone for ever, leaving only pain and longing to those who loved them.

Either way though I felt the Weasel program was worthy of a submission and I'm glad I did. There's a reason too though as for why I thought it worth working on. The judges state in their guidelines the following (verbatim):

We like programs that:

  • are as concise and small as they need to be
  • do something at least quasi-interesting
  • are portable
  • are unique or novel in their obfuscation style
  • MAKE USE OF A NUMBER OF DIFFERENT TYPES OF OBFUSCATION <== HINT!!
  • make us laugh and/or throw up :-) (humor really helps!)
  • make us want to eat good chocolate.

That's not the only place they use the word interesting but I felt that I could make the Weasel program more interesting - more than Dawkins'. I feel that I succeeded: certainly I did when it has options, the ability to change the string, a couple Easter eggs and other things. I feel also that I succeeded in most the other points too.

How I came across the Weasel program: I first saw it on Wikipedia; I had been looking at the previous winning entries in an attempt to find something of an interesting problem (for example) that hadn't been implemented. I also knew of the Infinite Monkey Theorem and I rather quite enjoy it. By chance I came across the Weasel program and I'm happy I did!

Finally what are my true thoughts about the judges' suggested invocations and comments - and what was the addition to the test-strings.txt file? The judges had the following to say:

My thoughts? I was actually rather shocked that they changed the Makefile to copy prog to weasel - particularly when as of some years ago they no longer rename the binaries to the name of the winner; in fact my entry was the only entry they did it to and I am pleased, honoured and equally surprised. I have a guess why they did it but I really don't know. What about the suggested invocations? Well that's an interesting one:

The suggested string 'EVOLUTION IS A PROVEN FACT' certainly matches my view; the fact they don't enable monkey mode (i.e. don't enable completely randomised mode) for that but they do for 'INTELLIGENT DESIGN' is brilliant because here we're talking about evolution (because of the genetic aspect) which is science based whereas 'intelligent design' is pseudo-science (though the proponents would strongly disagree there is a reason it's called PSEUDO-science) and that's the one they suggest randomised mode (and with a long string it's not very likely it'll come to a conclusion). And finally there is: `make test'. What did they add?

PAULINE HANSEN ACTS LIKE A WEASEL

Which as I said made me laugh out loud. Who is she? She's an Australian politician. And anyone who knows me knows that I have at best contempt for politicians; I however won't get into the cesspool that is politics. What about their comments?

Love it. It fits brilliantly; their comments on their own just multiply the source of pride I have. I don't really know how to explain it but it just feels magical - it's perfect. As I already noted I submitted a rpm spec file and the rpm.markdown file has some notes on it (as does the file here I linked to earlier).

One more thing: I said that I would provide contact information in addition to what is published on the IOCCC website but I have decided against that: I already gave enough to contact me should anyone truly want to.

Story behind one of the Easter eggs (and how it relates to the 2019 contest)

This section should have been here shortly after the 2019 guidelines were published but due to an issue (that I'm actually uncertain of what happened or when - I have had very much going on) the new version of the file was replaced by the old. The Easter egg I refer to has to do with a question the judges asked regarding a number they had used when discussing limitations in entries and the way entries should discuss their limitations in such a way to increase the odds of winning. The question in the 2018 guidelines was:

BTW: What is so special about 2305567963945518424753102147331756070? You tell us!

Intriguing question isn't it? Well not only did I suspect it would be a good thing to find out to answer as far as chances of winning in some way or another but I was quite curious too. So the obvious thing to do would see if I could figure out what it is. How? I started with Google - but how exactly did it unfold? How did I manage to find it? I mean there are a lot of numbers out there, it's a large number and what are the odds it would be defined somewhere? Well frankly that was a bit naïve of me: it probably could be found and obviously it was. But in a somewhat unusual way.

One thing is for certain though: the judges are very fond of prime numbers; but even that was not used in my quest to find what is indeed so special about it. Actually it was a struck of good luck and fortune. What I did is look up the number in Google and what do I see but the number! This number was on Wikipedia - but the Dutch version. Well obviously I could just use Google translate but even if I couldn't I have more Dutch friends than any other location so it wouldn't have been a problem; in fact one such friend I thanked in my winning comments: Martijn Schoemaker, who I owe very much to my programming experience and skill and equally inspiration and motivation.

Anyway by copying the address of the Wiki link and pasting it into https://translate.google.com it linked me to a translation of the page https://nl.wikipedia.org/wiki/Primoriaal. This is I hoped would lead me to my answer. Well I was in luck! There was a table called 'Table of primorials' and from the description above it I inferred that it is a primorial prime which happens to be the product of all prime numbers less than the number in question. Searching the page I saw the number indeed:

97   |    2305567963945518424753102147331756070

Aha. Now I had an answer (I confirmed it first but I suspected it was correct somehow)! But I had some work to do yet. It's one thing to answer their question but it's quite another to make use of that number in a clever way - and this is particularly true when their references to the number are related to potential entries. Well my entry already allowed changing of the target string so wouldn't it be a unique twist if it was possible to make the default target string print that number? I thought so and that's what I did. But I also masked the number so that it wasn't visible in the source code. I did give a hint though maybe vague and/or cryptic in my remarks.markdown but in fact I did one other thing that is related to that very section in the guidelines; in fact it's another Easter egg and the judges' comments talk about the number in another way that I took advantage of!.

They talk about how if the entry reaches the limit then it should insult 'your' fish called 'Eric'; but then they point out that the judges might not have a fish called Eric or a fish at all so they added that it should insult the fish Eric even if such a fish does not exist. However my entry does not have anything to do with fish; instead it has to do with monkeys! So obviously I added references to the monkey Eric even if he doesn't exist. Now the truth of the matter is that number is too big for the C standard types but the fact is both of my Easter eggs are somehow connected to the limitations part they discuss. But this is the beautiful thing and what prompted me to even write about the primorial prime Easter egg.

When the judges announced that the 2019 contest would be open as soon as I could I read the guidelines and rules. But I also wondered: would they have made any reference to that number again? Or more correctly would they have removed their question? Yes! They did remove the question! This feels to me like I won twice ... for the same entry! It's also a huge, huge honour to have the judges change the guidelines because of my entry. Now although I don't believe the judges say anything about that or when they change the rules due to a 'Worst/Best abuse of rules' winning entry the previous year Wiki certainly does say it's a high honour. Well I agree there. Yet in a way it's even more special for me because whereas most years they do have that award I do not believe they often change the guidelines due to an entry. Pride beyond pride and joy beyond joy. Now if the judges will only continue with the 2019 judging (they've not done any judging for I believe now three weeks) ...

My thoughts on the other entries (New: 14 September 2018)

I would like to acknowledge the other winners because not only are they brilliant but it's a huge honour and privilege to win beside them. In my winning thoughts I thanked Dave Burton for acknowledging me in his remarks in his second winning entry which won the award of 'Best abuse of the rules'. Yet he actually said much more than what I quoted. I want to say that at this time I still haven't tried to figure out (how they work) the other entries but I have tried most of the entries; I don't know when or if I'll get to trying to figure out how the programs work (I have a lot going on and I'm always exhausted). Whatever the case though I want to once again congratulate all the winners on their entry (entries) as they're all fabulous. I think highly of every winner and their entries (previous years, this year and future years) and it's an amazing feeling to win alongside with you all (those who won this year that is). With that being said here are some of my thoughts on the entries in the order listed on The 25th IOCCC Winners.

Other references to IOCCC 25 Winning entries (New: 2018/09/12)

Yesterday, 11 September 2018, I came across a website that discusses the IOCCC 25 winning entries and I was deeply touched. The reason I am deeply touched is most assuredly because I am extremely symbolic but to a lesser extent because I am immensely proud and happy to have won especially amongst some of the most seasoned winners. But there's more in the website I discovered because it seems the author actually read some of my hints (I am surprised to say the least). The website is Code Witchery Abounds as the IOCCC Celebrates the Strangest C Programs for its 25th Year and I was rather impressed with not just the article itself (and its content and the effort put into it) but also the title. It further adds to my pride and joy of having won. Here's what they had to say about my entry:

Ferguson: "Best use of weasel words" builds on the Infinite Monkey Theorem with weird results.

I like how they summarised my entry: 'weird results'. I'm not sure exactly what they mean by 'weird' but I don't object at all to it; somehow in some ways or others it's just perfect though I can't explain it. The fact they read some of the hints is very special to me indeed. And what they wrote is indeed true: but of course many might not know what the Infinite Monkey Theorem is and this could (for those interested which I imagine very few if any who aren't interested would even consider reading more than a sentence or two if they even looked at it after the title) intrigue some readers. Whatever the case I wanted to both show my pride but also acknowledge their work. Thank you Daniel! It's a wonderful tribute to IOCCC 25 and it means a lot to me. I tip my wizard's cap to you!

Entry errata

I feel, now that I have an errata entry (27th of August 2018) I should have had errata here; however I linked specifically to a subdirectory dedicated to errata. Be that that may I will - whilst updating that page - also include the information here where I feel it actually belongs.