27
votes
\$\begingroup\$

Final phase

You have chosen the categories and the nominees for PPCG's annual “Best of”. Now it is time to pick the winners!

Each of the fourteen categories is represented by an answer to this question, and each of these answers contains all nominations by the members of our community.

Voting mechanism

Each nominee has been added as a comment to its category's answer. In each category, the nominee whose comment has the highest number of votes by May 11, 03:00 UTC will be declared the winner of that category.

Further details

  • Starting now, please do not edit the answers.

  • Please do not add comments to the answers.

  • Votes on the question and on answers are meaningless; only votes on comments count.

  • Feel free to vote for multiple nominees of the same category, including your own posts.

\$\endgroup\$

11 Answers 11

17
votes
\$\begingroup\$

Rookie of the Year - Challenges

For the best challenge written by someone who has not written a challenge prior to 2018 (i.e., not necessarily a new user, just a new challenge writer). SEDE query

Without using numbers, get the highest salary you can. But don't exaggerate!, by Nicola Sap

Nominated by Shieru Asakoto

Asked in August 2018 as Nicola's first challenge post, within days the challenge attracted dozens of answers and hundreds of upvotes. (Now the challenge has 5 pages of answers and a net score of +205.) Most if not all of his reputation points gained are from that.

I remember that there was a category for the best scoring system in BoPPCG 2017. This may also as well be one of the candidates. The scoring system of this challenge restricts the maximum score obtainable with number of bytes, thus answers to that must have gone through a series of adjustments and optimizations.

\$\endgroup\$
1
9
votes
\$\begingroup\$

Best mathematical insight

On this site we often see answers in languages specifically designed for short code, or designed to be fast. Sometimes, a nice golfing trick or speed-up technique surprises us with its ingenuity, beyond the standard use of that language.

And occasionally an answer shows up that uses an unexpected approach to greatly simplify the problem, and makes us wonder how the author could ever think of that. This usually involves some far-from-obvious mathematical equivalence, or a particularly simple approach to the problem that was not evident at all (once revealed, other answers often follow the same approach).

This category is for the answer with the best mathematical insight or unexpected approach that led to greatly simplifying the problem, in any challenge type (code golf, fastest code, or others). The insight should have led to a significant improvement according to the challenge's metric (code length, run time, or whatever applicable).

Triangular Lattice Points close to the Origin by xnor

Nominated by Bubbler

To quote xnor's comment, "My proof is an epic journey through plane geometry, Eisenstein integers, factorization over number fields, quadratic reciprocity, arithmetic progressions, and interchanging summations -- all for such a simple expression."

It was so epic that he didn't give the proof himself; instead he put a +500 bounty for the proof that his solution is correct. Lynn came up with a proof, and you can read Peter Taylor's more self-contained proof too. As the one who wrote this challenge, I'm still amazed when I read these proofs.

Incidentally, xnor's solution is the shortest among all solutions written in any practical programming language, and it even beats two Mathematica solutions.

Nonogram line brute-force solving by crashoz

Nominated by Bubbler

Unlike the solution on Triangular Lattice Points (which uses deep knowledge in number theory), this one is pure logic and careful analysis of the problem that led to very short and elegant solution. The astounding fact is that this is short and fast; by eliminating a branch of recursion, it achieves linear time complexity from an otherwise exponential algorithm.

The first n numbers without consecutive equal binary digits by Neil

Nominated by Kevin Cruijssen

The challenge states the following: "The sequence contains the decimal representation of the binary numbers of the form: 10101..., where the n-th term has n bits."
Reading this, the first approach that comes to mind is using the binary representations themselves. But no, @Neil's insight and approach was simply brilliant, without using any binary builtin at all. By using \$\frac{2}3\$ (having a binary representation of 0.101010101...), multiplied by 2 to the power of the input-integer n, his approach was not only mathematically genius in its simplicity, but even short enough to be used by multiple other answers (even golfing languages like 05AB1E) to save bytes.

\$\endgroup\$
3
9
votes
\$\begingroup\$

Most helpful commenter

One of the things that stands out about this community is that although it's highly competitive, there is nearly always someone on hand to offer advice both on improving challenges and improving answer scores. It's part of what made this site seem so welcoming to me.

In recognition of this, nominees should be people who have helped others improve and made them feel welcome, whether by direct comments on challenges and answers, or in comments in chat.

Kevin Cruijssen

Self nomination

Not sure if self-nomination is appropriate here or not, but I figured I'd add it anyway. I help new users pretty often. If new users has attempted to golf their code, I usually add a comment with some additional golfs, and explain what I've changed and why. I also link to the relevant tip pages, which are always Tips for golfing in all languages and the used programming language tip page. And if anyone has any questions regarding an answer I posted, or a golfing suggestion I've made, I'll try to explain it to my best ability.
Here some examples of those kind of comments: C# .NET answer by @Destroigo; Swift answer by @Roman Podymov; etc. EDIT: Realized those comments are from January of this year instead of last year.. So here some alternatives: Dart answer by @Elcan; C# .NET answer by @Meerkat; new user asking about Java I/O rules on my own answer; C# .NET answer by @Epicness; etc.

Giuseppe

Nominated by MickyT

There are so many people that are deserving of this award, but for me I think Giuseppe deserves this award. Giuseppe's comments are always respectful and helpful. For a number of answers that I and other users have done, especially in R, he has made very useful comments and provided some very good insights. The comments that Giuseppe makes on challenges are always positive and helpful.

A simple search demonstrates quite nicely the number of helpful comments made by Giuseppe.

\$\endgroup\$
2
  • 12
    \$\begingroup\$ Kevin Cruijssen \$\endgroup\$
    – user45941
    Apr 28, 2019 at 0:41
  • 10
    \$\begingroup\$ Giuseppe \$\endgroup\$
    – user45941
    Apr 28, 2019 at 0:41
9
votes
\$\begingroup\$

Best Explanation

This category is for the answer with the best explanation accompanying it. Ideally, the winner will be an answer with a very detailed explanation that is accessible to anyone, regardless of the amount of relevant knowledge already possessed.

Golf you a quine for great good! by Ørjan Johansen

Self-Nomination

Fueue is a very much not golfy esolang whose unique queue-based control flow makes it close to write-only even when you know it – and that's before trying to golf it anyhow. Also, it doesn't have any string literals, making a quine complicated. So when I tried to explain my quine, it naturally got way out of hand. Whether I succeeded in making it understandable is up to you to decide.

A spiral sequence by Arnauld

Self-Nomination

Despite a concise definition, this challenge involves a rather sophisticated sequence based on a spiral of numbers on a hexagonal tiling. Once my code was golfed enough, I realized that it had become quite difficult to explain. In order to make the description -- hopefully -- pleasant to read and easier to understand, I've tried to alternate between diagrams, explanations and commented pieces of code of reasonable size.

\$\endgroup\$
2
8
votes
\$\begingroup\$

Rookie of the Year - Answers

For the best answer by someone who hasn't submitted an answer prior to 2018 (i.e., not necessarily a new user, but just someone who's a new answer writer). SEDE query

Write Moby Dick, approximately by A. Rex

Nominated by Kevin Cruijssen

At time of writing this is A. Rex' only answer thus far, with currently 83 upvotes. But not only that, it's also the only of (currently) 21 answers to have a score below 500,000 for this challenge. An impressive display worthy to be nominated here.

\$\endgroup\$
1
8
votes
\$\begingroup\$

Wrong tool for the job

This category is for an answers that use the worst possible language to accomplish a task, while still making an effort to optimize the score. For example, writing a non-trivial program while using an extremely minimalist language like 7, or an inconvenient language like lost, or even a normal language that's missing some crucial capability like internet connectivity or image processing.

Answers for this category should consider both the difficulty of the task and the unsuitable-ness of the language.

Scrabble Scorer by MickyT

Self Nomination

With a view to get some more interest on this category, I am nominating this one for it. I am sure I have come across better examples in the past year, but I can't locate them at the moment.

I originally started it because someone mentioned in the comments, but Beatnik isn't a good language for many things and especially golfing. It is a stack based language with limited support for numerical operations. It proved to be reasonably challenging, especially for me :).

  • It has add and subtract as numerical operations. Fortunately this was enough for this challenge.
  • There is no way to output a number, only characters can be output. This means either breaking a number into it's digits and outputting the characters for them, or as in my case outputting unary.
  • The stack manipulation commands are limited to push, pop and swap. This makes keeping a accumalated value on the stack diffucult. Outputting unary also helped avoid this.
  • It has "if" commands that allow you to skip backward or forward in the code on 0 or not 0 values. This made the program logic a bit horrible. The end of the program has 10 output "1" commands. When the character is determined the program will skip forward n words to the appropriate point in the output commands. The program then skips back a ton of words to the beggining.
  • If input is called for and not found it will error. Fortunately you are allowed to end on an error and it was not a bad way to finish this program.

The only thing that made this language suitable for this challenge was that it relies on the scrabble scores of the words in the program to determine the commands done. Debugging it wasn't a very pleasant task.

\$\endgroup\$
1
  • 7
    \$\begingroup\$ Scrabble Scorer \$\endgroup\$
    – user45941
    Apr 28, 2019 at 0:41
7
votes
\$\begingroup\$

Kansas City Shuffle

Too often, once someone devises a generic golfy method of solving a challenge, most people will use that method for their answers. This award goes to those answers that utilize an alternative method as a better solution than the method that the majority of other answers use (prior to the posting of the rewarded answer).

Remove surrounding zeroes of a 2d array by JungHwan Min

Self-nomination

This was arguably the most absurd solution I've ever written, abusing the specification of the built-in Mathematica function CellularAutomaton (my favorite) to get a shorter solution than the general golfy solution, which was already quite short. Most golfy submissions implemented an algorithm that removes rows and columns whose sums are zero (and of course, this is not a difficult task for Mathematica). And as a cherry on top, this solution turned out to be 42 bytes!

\$\endgroup\$
1
6
votes
\$\begingroup\$

Most elegant spec

Writing an interesting challenge is tough, not just in thinking up a good idea, but in specifying it clearly enough without taking pages of text. This category is for challenges whose specification is a pleasure to read, summing up exactly what is required succinctly and unambiguously.

The Hungry Mouse by Arnauld

Nominated by xnor

A tight, clear spec beautifully illustrated with a LaTeX diagram featuring a cute mouse. Every time I started to have a question while reading the spec, it was immediately answered by the next bit of text.

\$\endgroup\$
1
  • 17
    \$\begingroup\$ The Hungry Mouse \$\endgroup\$
    – user45941
    Apr 28, 2019 at 0:43
5
votes
\$\begingroup\$

Breaking The Mold (Most Original Challenge)

It's really easy to come up with normal code-golf and , or challenge, etc. Don't get me wrong, there's nothing wrong with these challenges. They're the meat of the challenges on our site. However, they're not the most imaginative.

This category is for a challenge that re-invents the wheel, and explores new ideas that we haven't really used on the site.

  • Maybe this challenge inspired a new tag, or category of challenges?

  • Maybe it's a with a unique and very well balanced scoring formula?

Or maybe it's even a challenge about a novel task. This category is for rewarding users who came up with interesting ideas that keep the site fresh.

Maximize Sudoku King's tour by Bubbler

Self-nomination

This is probably the first to ask directly for the optimized solution, rather than some score combined with code length or such. I took extra care on the "winning criterion" section to encourage competition without time limit. Unfortunately, it was beat by Anders Kaseorg with the optimal solution.

Overlapping Polyglots by Esolanging Fruit

Self-nomination

This is novel in that it's the only challenge on the site tagged as both and . This is because each answer serves as both a cop and a robber - it cracks the previous answer by discovering what language it is written in, and polyglots it with a mystery language for the next answer to find. This challenge is similar in principle to The Programming Language Quiz, Mark II, but it places more of an emphasis on pure obfuscation as it has no element. Unlike many , the challenge has no end; the winning answer is simply the one that survives the longest before being cracked. The current winning answer was recently cracked, which is what reminded me of this challenge.

Design a One Instruction Set Computer! by MD XF

Nominated by BMO

We rarely get which don't get closed, in 2018 there were 3 such challenges, one of which I nominate here. This challenge asked for an OISC to be invented and implemented. This is one of the challenges in 2018 that I enjoyed the most.

It requires a genuinely interesting approach at designing a new programming language (the OISC part), but also requires the submissions to be creative (the pop-con part). This challenge thus created (unfortunately only) 4 new, novel and interesting programming languages which is in my opinion worthy of a bounty.

\$\endgroup\$
3
4
votes
\$\begingroup\$

SGITW (Slowest Gun in the West)

For the best 2018 answer in a challenge which received no answers within 48 hours of posting. The challenge itself does not need to be from 2018 and the nominated answer doesn't need to be the first answer to the challenge, but the first answer to the challenge does need to be from 2018. Tips questions are not counted for this category.

It's very easy to get drawn to the fast-rising HNQ-hitting questions with a plethora of answers, so I thought this would be a good way to bring attention to answers that really needed to earn their love. SEDE Query, with the delays in days

Google's Hopping Bunny, by DJMcMayhem

Self Nomination

This is one of my favorite answers. It was a very fun project, and it felt a lot more like a coding-project rather than a quick code-golf. It took me a long time to find enough heuristics to make a brute-force solution possible, so about half the time I spent on that answer was just looking for ways to speed it all up/remove redundant programs.

Evaluate expressions with significant figures, by Kevin Cruijssen

Self nomination

The challenge was posted in August 2016, without any answers. At the time I was challenging myself to post answers for challenges that didn't had any answers yet. Of course, most of those challenges were pretty hard (as their reason for being unanswered), but it was fun figuring it out regardless.

My favorite revival of the few I did was this one. Due to the rules, it had an extreme amount of edge-cases the program had to implement in order to get the correct answer for all possible inputs. Therefore it took quite a while to complete my answer for this, with loads of substeps: understanding the challenge (I had to read and check it a few times before I fully grasped what was being asked and how the test cases worked); writing an answer; fixing edge cases; writing the answer and explanation; fixing some minor bugs; golfing, golfing, golfing. I'm not sure anymore how much time I spend on this challenge, but it was certainly a mixture of fun and frustration along the way.

Cyclic Levenquine by Jo King

Self-Nomination

The most highly voted unanswered challenge, a lot of people thought that the question was simply impossible using existing languages. Over a year later, I posted an answer using Gol><>, a rather versatile 2D language, which makes quining easier. It was still a very difficult challenge, that involved designing a way of changing the behaviour of a program through single character changes, creating distinct character-wise programs and a way of translating between the two in a way that didn't repeat any more characters.

Confound my attempts to solve the halting problem by Jo King

Self-Nomination

Another hard challenge that has gone without a valid answer for a long time (almost 4 years!). The submission was an implementation of a rough proof of the unsolvability of the halting problem in a Turing complete language, which of course I took to mean the easiest language to code in, brainfuck. The final program ended up a mash-up of a quine and a self-interpreter, both hard projects in of themselves.

\$\endgroup\$
4
3
votes
\$\begingroup\$

Best Above-and-Beyond Answer

Every once in a while, an answer takes the challenge to the extreme. This prize will be awarded to an answer which went far beyond the expectations of the challenge. This could include

  • a code golf answer that brute-forced/proved the shortest program in some language
  • a graphical-output popcon answer of extreme size and quality
  • a KOTH answer of high complexity which absolutely dominated the competition

Maximize Sudoku King's tour by Anders Kaseorg

Nominated by Bubbler

When I wrote this challenge, I expected it to take forever, at least days, to find the true optimum. Anders smashed my dream in just four hours after posting the challenge.

Fastest Mini-Flak Quine by ais523's temporary account

Nominated by DJMcMayhem

Brain-flak is an inconvenient language to use, akin in spirit to brain-fuck. Mini-flak is a minimalist variation of brain-flak that has the minimum number of brain-flak commands needed for Turing completeness (and also half as much data storage). With no string capabilities, it's not exactly a language built for quining. However, that doesn't stop people from using it for quines. Up until this point, the fastest mini-flak quine took about 30 minutes to run in the standard interpreter. ais523 got this down to 20 seconds on TIO. This is a very impressive answer.

\$\endgroup\$
2

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .