Computing in 128 Characters: Winners of the 2018 Wolfram Employees One-Liner Competition
Every year at the Wolfram Technology Conference, attendees take part in the One-Liner Competition, a contest to see who can do the most astounding things with 128 characters of Wolfram Language code. Wolfram employees are not allowed to compete out of fairness to our conference visitors, but nevertheless every year I get submissions and requests to submit from my colleagues that I have to reject. To provide an outlet for their eagerness to show how cool the software is that they develop, this year we organized the first internal One-Liner Competition.
We awarded first-, second- and third-place prizes as well as six honorable mentions and one dishonorable mention. And the winners are…
Honorable Mention
Danny Finn, Consultant
ImageGuessr (Wolfram Pictionary) (128 characters)
Danny’s submission is a complete game in 128 characters. Some of the judges found it so compelling that they went on playing after the judging session ended.
The code picks a random word and assembles a collage of images found on the web by searching for that word. Then it puts up a dialog with the collage and an input field for the player to guess what the word is. When the player enters a word, it correlates the semantic features of the guess with the semantic features of the word. The higher the correlation, the closer the guess in meaning to the original word. That’s a lot of functionality in one tweet of code!
✕
{w=RandomWord[],g=ToString@Input@ImageCollage@WebImageSearch[w,"Images"],Dot@@@FeatureExtract[{{w,g}},"WordVectors"][[;;,;;,1]]} |
Honorable Mention
Danny Finn, Consultant
Notebook Pox (123 characters)
Danny earned a second honorable mention for code that gives your notebook a case of the pox. He probably would have earned a dishonorable mention had he not also provided the cure (see the second input in this section).
Danny could have saved seven characters by eliminating the unnecessary System` that precedes BackgroundAppearance, probably a leftover from some sort of experimentation.
✕
SetOptions[EvaluationNotebook[],System`BackgroundAppearance->Rasterize@Graphics[{Red,Disk[#,0.01]&/@RandomReal[1,{99,2}]}]] |
✕
SetOptions[EvaluationNotebook[],System`BackgroundAppearance->None] |
Honorable Mention
Sarah Stanley, Principal Consultant
Rainforest Winter (126 characters)
Sarah’s submission combines image search and an image-transforming neural network in a novel way to show what the rainforest would look like if it snowed. The ListAnimate output shows a selection of winterized rainforest images.
✕
ResourceObject[a="CycleGAN Summer-to-Winter Translation"];ListAnimate[ NetModel[a][#]&/@WebImageSearch["rainforest","Images"]] |
Honorable Mention
Sarah Stanley, Principal Consultant
Changing Tigers’ Stripes (128 characters)
Like Danny, Sarah also earned a second honorable mention, for an image search and neural network combination that removes tigers’ stripes. The ResourceObject that the code retrieves is the CycleGAN Zebra-to-Horse Translation Trained on ImageNet Competition Data neural network, a name that would have chewed up 72 of her 128 characters had her code not instead used the more compact numeric identifier. While the original network was trained to convert zebras to horses, Sarah applied it to a new domain, white tigers, to interesting effect.
✕
ResourceObject[a="4b148040-10cd-43e2-8152-1a31c675cec3"];{#, NetModel[a]@#}&/@WebImageSearch["white tiger","Images"]//TableForm |
Honorable Mention
Brian Wood, Lead Technical Marketing Writer
A Little Fun with Motion (117 characters)
Brian’s submission does video effects on the fly with a compact piece of image-processing code that creates color trails as an object moves. When an object is stationary, the superimposed color trails sum to faithfully recreate the original image.
✕
Manipulate[With[{c:=CurrentImage[],p:=Pause[t]},ImageAdd[(p;ImageMultiply[c,#])&/@{Red,Green,Blue}]],{t,.05,.15,.01}] |
Honorable Mention
Daniel Carvalho, International Business Development Executive
Wave (93 characters)
After knotting their brains trying to understand some of the more complex submissions, the judges found Daniel’s meditative, gently rolling wave a soothing balm.
✕
Animate[Plot3D[Sin[f+x]Cos[f+y],{x,0,2Pi},{y,0,2Pi},ColorFunction->"DeepSeaColors"],{f,0,Pi}] |
Dishonorable Mention
Jon McLoone, Director, Technical Communication and Strategy
Surprisingly Short Minesweeper Code (47 characters?)
Jon’s Minesweeper submission was a first: an entry that hacked the submission notebook to subvert its character-counting code. It serves as a brilliant example of why you get that annoying Enable Dynamics button when you open a Wolfram Notebook that contains dynamic code:
When you open Jon’s submission, you see 2,000-some characters of code for a functional Minesweeper game that begins like this:
✕
DynamicModule[{$GameTime = 0, $Time, data = {{}}, display = {}, neighbours, $GameState = "Start", $GameData, h = 9, w = 9, n = 10, bombchar = |
In spite of the huge submission, the character counter at the top shows that his submission is just 47 characters long:
A note that accompanied Jon’s submission reads, “Surprisingly short Minesweeper code. It may look longer but scores only 47 characters. Go on check! And, I promise, I haven’t changed the submission template, you can copy the code into a fresh OneLiner template and see.”
So how did he do it? He indeed hadn’t changed the source code embedded in the submission notebook, but he did redefine some of the functions that that code defines. You can see how when you use Cell > Show Expression on the cell that contains his code.
The first "0" in the code is wrapped with a DynamicWrapperBox that gives the submission notebook’s character-counting functions new definitions. Instead of counting the characters in the submission, the new definitions count the characters in the string “Surely deserving of a dishounourable [sic] mention!!!” (47 characters):
✕
RowBox[{"$GameTime","=",InterpretationBox[DynamicWrapperBox["0",Quiet[Clear[$CellContext`BoxesToTweetString,$CellContext`UntweetableBoxTypes];$CellContext`UntweetableBoxTypes[BlankNullSequence[]]={};$CellContext`BoxesToTweetString[BlankNullSequence[]]:="Surely deserving of a dishounourable mention!!!"; Protect[$CellContext`UntweetableBoxTypes,$CellContext`BoxesToTweetString]] ],0]}] |
The first time Jon’s submission is scrolled onscreen, the DynamicWrapperBox code activates and hacks the submission notebook. Indeed deserving of a dishonorable mention, Jon!
Third Place
Jofre Espigule-Pons, Consultant
Endangered Species (122 characters)
The best submissions combine Wolfram Language components in ways that produce beautiful, useful and surprising results. Jofre’s submission meets all three criteria. It finds the intersection of the class of mammals with the class of endangered species (i.e. the class of endangered mammals), gets an image of each one and assembles the images into a collage—a graphic reminder of the biological wealth we are in danger of losing.
✕
ImageCollage[#["Image"]&/@(EntityClass[s="Species","Mammal"<>s][e="Entities"]⋂endangered species species specifications[e]),Method->"Columns"] |
Second Place
Lou D’Andria, Senior User Interface Developer
Wolfram Celebrities (123 characters)
We had a lot of fun with Lou’s submission that scrapes employee images from our company directory and uses Classify to find the notable person that they most resemble.
✕
Labeled[#,Classify["NotablePerson",#]]&/@Import["https://abcd.wolfram.com/efghi/jilmnopqr/stuvwx/images",{"HTML","Images"}] |
A surprisingly large number of people in the company were identified as “Stephen Wolfram” (including Stephen himself). Hmm…
First Place
Jon McLoone, Director, Technical Communication and Strategy
Evolving Abstract Art (68 characters)
The same colleague who earned this competition’s dishonorable mention also took first place. The elegance and concision of Jon McLoone’s 68-character submission won over the judges with its high ratio of graphical impact to code length. It’s both animated and graphically engaging, and keeps you watching to see how the image will evolve:
✕
i=RandomImage[1,300,ColorSpace->"RGB"]; Dynamic[i=ImageRestyle[i,i]] |
Jon took advantage of the complexity-compounding effect of repetition to create code that delivers far more than its small character count promises. Congratulations, Jon!
There were many more great entries—34 total—that you can see by downloading this notebook. To all who participated: thanks for showing us once again the power of the Wolfram Language.
Get a Mathematica service plan to be the first to receive an upgrade for the upcoming release of Version 12 of the Wolfram Language. |
The winner’s code seems to require a version newer than 11.3 which crashes on that code.
Hi Gustavo:
The blog utilizes features that are going to be included in version 12, which will soon be released. This is noted at the top of the blog post.
Great post.Will there be a notebook? I tried Jon’s winning entry and got just an $Aborted. How do I fix this?
Hi George:
Thanks for the feedback. As noted at the beginning of the blog, these one-liners utilize features that will be included in version 12. Once that is released, there will be a downloadable notebook.
I have version 12 beta. I fixed the problem by breaking the code into steps. There was an issue downloading the neural net. Fortunately, the error message told me how to fix this, so the code is working now. Unfortunately, it is sucking up all my CPU, so I guess it’s time for a new computer ;-)
Glad you were able to resolve the issue!
First prize stole from second place in 2016: https://blog.wolfram.com/2016/11/09/the-2016-wolfram-one-liner-competition-winners/
Hi Tom:
I commend you on noticing that they both used the RandomImage function. However, with Jon’s code being so concise (just 68 characters) vs the 120+ in the code from 2016, it’s hard to not acknowledge that level of precision! Great eye though for noticing the similarities!
The use of RandomImage is not what matters, but rather the idea of using a Dynamic image that updates itself with a neural network – that was the borrowed idea.
Yes, there are certainly similarities. But I’m not so sure I would say the idea was borrowed. They’re both very interesting.
Well that’s embarrassing! It certainly wasn’t in my mind when I wrote my entry and I have no recollection of that past entry, though I would have looked at the blog at the time – I wasn’t at the technology conference that year.
In my defense, if you look at what they are trying to achieve, that is quite different, even if that code structure is rather similar. Dynamic[i=fn[i]] is a pretty standard trick to make a refreshing notebook element, that neither of us can take much credit for. But Michael Sollami is using the network as his fn to inject randomness by using NetInitialize to create, effectively, a random image filter each time. It is really a structured random walk through image space. What I was trying to do was to use a fixed network to iterate towards a fixed point of i==fn[i] in a similar way to my blog from 2010: https://blog.wolfram.com/2010/09/07/self-description/
I had in mind “can we extract the essential pattern from the randomness by refining the image to its key features”. If you set the image size to 256, it does do that, but it turned out to be much more boring to watch than the constant zooming effect you get from using a 300px image. so I submitted that instead.