22
\$\begingroup\$

Just over a year ago, Omar Tuchfeld posted High throughput Fizz Buzz, a challenge where answers should aim to output Fizz Buzz as quickly as they can. Their challenge was nominated in Best of 2020, and was well-received, but otherwise wasn't a massive standout of a challenge.

Near the end of October, ais523 posted an answer to this challenge that blew away all other competition. The 8 answers posted before this answer had scores around 8 or 9 GiB per second - ais' hit 31 GiB/s on their machine, and an incredible 55 GiB/s on the OP's machine. In fact, this was so incredible that it was posted to Hacker News, a well frequented website about anything tech related.

A couple of weeks ago, ais' post was posted again on Hacker News, and the site has experienced a brief uptick in activity, especially on that challenge. Both of these two events got me thinking about the impact that this site has had on the world of code golfing, and, through this blog post, I aim to explore that impact.

The beginnings of code golf

The exact origins of code golf are, unsurprisingly, fairly unknown. After all, the concept of making code more concise isn't exactly revolutionary. However, by 1999, references to Perl golf were floating around, and various references to APL and J golf were popping up more frequently. For a significant number of years, code golf was primarily limited to Perl, APL and J - and even then, many people avoided APL and J due to their tacit nature and, in APL's case, odd symbols.

It wasn't until 2007, when Golfscript came into existance, that the concept of a "golfing language" become a thing. Before now, most golfing was done with practical languages, often Perl due to its symbolic commands and loose structure. APL and J used single/double character commands, but they weren't designed specifically with conciseness in mind - Golfscript was deliberately intended to be as short as possible for any given task.

If you follow the field of esoteric languages - as most users of this site do - then you're likely aware of how out of date Golfscript is now, compared to modern golfing languages such as Jelly, 05AB1E, Vyxal and more. However, unlike more practical languages such as Perl, Python or even APL, you'd be hard-pressed to find these languages outside of some very niche areas of programming.

Code golf on Stack Exchange

As I've discussed before, code golf on Stack Exchange began on Stack Overflow, and was largely dominated by Golfscript, APL and J, with the odd Perl answer winning from time to time. However, as the on-topicness of code golf was contentious, it didn't really go far, beyond inspiring the creation of a new member of the Stack Exchange family of sites: Code Golf and Coding Challenges. In fact, for the first year or so of this site's history, nothing much happened in the publicity department.

All that changed when Polynomial decided to rickroll the entire site. Within days, this was tweeted by Jeff Atwood, the founder of Stack Exchange, as well as being posted on Hacker News. This caused the first spike in new user activity since the site launched a year ago, and is likely one of the first examples of Code Golf Stack Exchange leaking to other sites on the internet.

However, code golf was by absolutely no means limited to Code Golf Stack Exchange. The site Anarchy Golf published its first challenge on the 29th of January 2007, almost exactly 4 years before CGCC launched, and 18 months before the first code golf challenge was posted on Stack Overflow, and, in the years since, there are multiple sites for code golf around the internet.

Despite not being the first site to the online golfing scene, I would argue that Code Golf Stack Exchange's biggest impact, by far, on the world of code golf originates from two main factors: activity and freedom of language.

Activity

This section is very brief - CGCC is the most active code golf website available. The most recent challenge posted on Anarchy Golf (aka anagol) was 4 days ago (as of writing), code.golf has a new challenge every week or two and Code Golf Codidact's most recent challenge is almost a fortnight old. For comparison, CGCC averages over 2 new challenges per day. Without a doubt, CGCC is the most active site dedicated to code golf on the internet. But, activity only plays a part - people will compete on slower sites, as evidenced by the existence of, well, every site less active than CGCC. The other factor is freedom of language.

Freedom of Language

As I've mentioned, I would say that the biggest code golf sites, behind CGCC, are anagol, code.golf and Code Golf Codidact. However, if you take a quick browse through the first two, you'll notice something that differs from CGCC and Code Golf Codidact (which was based on CGCC): they have a set list of languages that can be used. Compare this to CGCC's policy that allows any programming language, even non-programming languages.

This is, in my opinion, the biggest difference between CGCC and other code golf sites, and the cause behind CGCC's primary impact on the code golfing world: the development of new languages.

If you've been at all active in the golfing spaces over the past few years, you must be aware of the latest generation of golfing languages - what I term the "third gen" languages - such as Jelly, 05AB1E and Husk. For those unaware, these are languages that primarily utilise custom codepages to allow them to use 256 different characters for commands, rather than the 95 characters available when limited to only printable ASCII. As a result, they have far more commands available in a single byte, and so are generally much shorter. However, taking a look at the languages available on anagol and code.golf, we can see that only Jelly makes the cut, and that's only on anagol. Those who wish to use the best golfing languages need to find somewhere else to do so, and, due to its activity, that's often CGCC.

Language development

Indeed, by looking at the history of golfing languages, we can see that CGCC is a prime driver: aditsu created CJam as a better version of Golfscript, Jelly was developed by Dennis as an improvement on both J and CJam, and so on. A countless number of golfing languages have been developed by CGCC users, and the vast majority of these are unable to be used on the other large code golf sites. In short, CGCC, by allowing any language to compete, has driven the development of golfing languages, and these golfing languages are pushing the boundaries of how short code can become.

Furthermore, this freedom of language has allowed the development of a related, but distinct, class of languages: esoteric programming languages. These are languages that are designed more to push the limits of what a programming language is, rather the specifically to compete and win at code golf. And, through the freedom afforded by CGCC, many well-known esoteric languages have been created and the limits of existing languages have been extended. The shortest known Hello, World! program in brainfuck is only 72 bytes - shorter than Java - and was found by a CGCC user, KSab. Another CGCC user, Kamila Szewczyk, has created a Lisp intepreter, written in Malbolge, often termed the most difficult language to program in. There are countless answers on CGCC that demonstrate users pushing esoteric languages to their extremes, just to answer a simple question. And that's not even getting started on the esolangs created by CGCC users.

Martin Ender, former site moderator, has created multiple esolangs, including Hexagony, the first 2D language based on a hexagonal grid, rather than square; Labyrinth, a 2D language that modifies the grid as the program is executed; and, Stack Cats, a symmetric esolang where each command undoes the operation done by its corresponding command in the other program half. In a semi-recent interview, Martin credited this site - CGCC (or, PPCG, as it was at the time) - for his introduction to the esoteric side of languages. I'm sure that a lot of users here can relate to that. I myself only started looking at language development after joining the site, and a lot of users use their own languages to answer challenges.

Other impacts

While I clearly consider the language side of CGCC to be the primary impact this site has had on the worlds of code golf and programming, there are a few other things that I'd be remiss for not mentioning.

Try it online!

Created by Dennis primarily to provide a testing environment for the many languages used on the site, TIO has since developed far beyond CGCC. It's being used more increasingly on Stack Overflow to effectively demonstrate users' answers, people are using it at work to help colleagues and is considering useful enough to Dyalog for them to donate $500 per year to help cover the costs. It's a truly incredible resource, created originally for CGCC.

In addition, thanks to TIO, Wolfram Language (Mathematica), a typically non-free language, can be run (albeit with some limited functionality), making TIO one of the few ways that people can use Mathematica without having to pay for it.

Dyalog

You may be aware that Adám works for Dyalog. In fact, part of his job is specifically to be part of this site, and through this, Dyalog has and aims to hire users from the site as interns and employees. Dyalog, through Adám, has stated that they believe code golfers have the right mindset for using and developing APL, and our site is clearly a good place to look for those kind of programmers.

Math and science

This is fully answered by What contributions has PPCG made to the fields of math or computer science?, so I'll keep this short. Given the popularity of challenges, it's not surprising that CGCC has had multiple contributions to the OEIS, such as extending and correcting existing sequences, and adding new ones. Furthermore, various other CGCC challenges have been referenced and mentioned in a number of scientific papers and articles - including our Tips for golfing in JavaScript, mentioned in Expert JavaScript.

Conclusion

In short, I believe that CGCC has had a large impact on the world of code golf, and a not-insignificant impact on programming as a whole. Through our policy of freedom of language, we've encouraged and revolutionised the development of golfing languages, extended the capabilities of existing esoteric languages, and have resulted in a number of useful impacts across multiple areas. I look forward to seeing what we can do in the future!


: For reference, I consider the first generation to be Golfscript, APL and J; and the second generation to be the languages that evolved from the first gen, while still only using ASCII characters - this includes CJam, Pyth and Brachylog v1.

\$\endgroup\$
1
  • 6
    \$\begingroup\$ For the readers: Ping me in apl.chat if you're interested in working for Dyalog. \$\endgroup\$
    – Adám
    Dec 20, 2021 at 17:08

3 Answers 3

10
\$\begingroup\$

Underappreciated answers

As part of blog posts, we demonstrate some of the more unappreciated posts on the site, and we highly recommend you check them out and give them an upvote. These were nominated by various users, and if you think you've found an answer that deserves more appreciation, feel free to drop a link to it in the CGCC Blog chat room.

dylnan's Jelly/05AB1E answer to Trick or Treat polyglot. Not only is this a polyglot between two languages with different code pages, but dylnan also reverse-engineered Jelly's string compressor to find a string that when decompressed contained treat and when compressed contained trick (both case-insensitive). Truly an impressive answer.

lyxal's Vyxal answer to Product over exclusive and inclusive ranges. Vyxal's latest version, 2.6, is well-demonstrated in this answer, which currently tops the leaderboard for the challenge. While it isn't as standout as the other answers here, it's still a very good answer and deserves more appreciation.

Aaroneous Miller's Vim answer to Write a Whitespace Interpreter. Continuing on from his brainfuck interpreter in Vim, Aaron has decided to add another Vim interpreter to his collection. Whitespace is alright a complicated language to interpret, as shown by there being only 3 answers to the challenge, but to do it in a text editor rather than a classical programming language is even more impressive.

\$\endgroup\$
5
\$\begingroup\$

A comment on history: The code golf challenge quality has increased over the years. Old questions/challenges are often one or two sentences and don't specify test cases or how I/O should look like. I myself was guilty of famous questions of the notorious and tags, which was eventually deemed disallowed (a bit of a shame - they provided some of the most entertaining and whimsical answers in the site's history).

\$\endgroup\$
4
\$\begingroup\$

Another major difference between CGCC and other code golf sites is that the answers here are manually checked by users, versus other sites that use a judge program accepting answers that only satisfy test cases. My view, coming from competition programming and which is in the minority on this site, is that I/O should be strict to provide a level playing field and avoid too "creative" I/O interpretations that stray from the purity of the task at hand. This is a significant hindrance to esolangs which may not support standard I/O, but does make conforming answers much more fairly comparable in a leaderboard, granted this site emphasizes creativity over leaderboards and scores.

\$\endgroup\$

You must log in to answer this question.

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