What have I learned with Advent of Code 2020?
You can glimpse a Loch Ness Monster - hero of the hardest puzzle of this year.

What have I learned with Advent of Code 2020?

As I’ve finished my second Advent of Code this year, I’ve decided to share my experiences. Again it's a great feeling to simply do so, and again I want to spread a good word for authors. This time I want also to share a word to people who are self doubting themselves in software engineering.

If you don’t know what AoC is, I’ve written introduction last time I finished full AoC in 2017 (I'm a little ashamed of those two gap years, but personal issues took precedence).

Edition of 2020

My goals

I've started this edition with 3 simple goals:

  1. Finish it,
  2. Have fun,
  3. Pull at least one person to participate.

To achieve those this year I was also using JavaScript and didn't wake up for the puzzle at 6AM my local time. Each day I would chill those puzzles with my morning coffee at around 8-9 AM, giving around 2-2,5h MTTA - plus the time to solve the puzzle. To say I wasn't one of the first is an understatement.

To achieve my 3rd goal I've reminded my programming friends about event and posted information about it on all my communication channels I'm allowed to. It worked and two people from CircleK done full AoC with me!

Advent of Code in numbers

First puzzle was completed by 148457 people - almost 4 times more than when I wrote about 2017 edition! That shows huge spike in interest and place Advent of Code as a great Christmas tradition. Like last time, people melted in nice Pareto distribution up to 11283 who finished the last puzzle - again a great increase since last time.

My favorite puzzles:

Like last years, there were puzzles designed around concepts old as programming itself - parsing (eg. passports processing on day 4), Convay's Game of Life (with more complex, seating rules on day 11) or hex maps on day 24. I believe it's because you cannot name yourself software developer if you hadn't made those at least once in your life.

There were also puzzles that were more interesting and demanded more:

  • Adapter Array on day 10 required knowledge about dynamic programming to calculate answer in reasonable time, to find total number of combinations.
  • Shuttle Search on day 13 required knowledge about Chinese Remainder Theorem* (don't ask me!) or clever step calculation for people without mathematical degree like me. Finding a extremely distant moment in time which meet strict requirements was no trivial feat.
  • Jurrasic Jigsaw on day 20 was most complicated for me. To match and find a picture through shuffled tiles and then do pattern searching was a feat I'm proud about. It's also good thing that it was weekend, because I've spent over 6 hours on it!
  • Crab Combat on day 22 and Crab Cups on day 23 was the most cute and fun challenges. It required a smart manipulation of arrays and clever data structures - especially in JavaScript which lacks ready to go, advanced CS101 structures that you can find in eg. Java. Trivial implementation from part 1 for Crab Cups would calculate over 11 hours on my computer vs more clever one that given answer in 3 seconds.

* the Chinese Remainder Theorem had 5 minutes of fame that day - google search for it sky rocketed after someone gave a tip on Reddit that it will help.

Brak alternatywnego tekstu dla tego zdj?cia

Private leaderboards

Brak alternatywnego tekstu dla tego zdj?cia

Shocking thing - considering that I was starting at least 2 hours late - was that again I was on the top of my private leaderboards.


Brak alternatywnego tekstu dla tego zdj?cia
Brak alternatywnego tekstu dla tego zdj?cia

On all of it, I was in top five with extremely talented people from Poland - people who are active in community and give great talks, blog posts and opensource for others.


People - who I am not ashamed to say - are better than me and truly deserve titles of expert.


What are my personal conclusions?

First of all, I've got very rusty in imperative programming. After 3 years working as a DevOps I am thinking of different levels now - more holistic about systems, integrations and security and less about code itself. The declarative programming destroyed some of my software necromancy suave - the problems I tackle on daily basis made me less nimble around algorithms and data structures. It doesn't mean that I forgot how to code, but it just takes me more time to build a complete mental model around imperative code. That's a little unfortunate, but it's fair. As any skill programming needs to be constantly honed. I should invest more time in 2021 to code more. That will be my new year's resolution.

Again, being systematic beats being talented. I was starting late and I am worse programmer than I was 3 years ago. Nether less I've still managed to be on top on private leaderboards I'm signed into because I was doing those challenges in timely manner. Each day forcing myself to not skip a day. That should be a message of encouragement for everyone else.

You don't have to be the best, you don't have to be the fastest, you don't have to know all to be evaluated high. You have to show consistency and determination to get things done!
-- me


Bonus, what did I learn from others?

This year I've decided to compare my solutions with top rankers to get inspired. I've stalked their GitHub and where available - watched their videos - of course after I've submitted my correct solutions (because they even weren't available sooner ;P). My notes?

  1. Competitive programming shows in all their approach. There is no second wasted, the dedicated pipeline is prepared - downloading input at exact time and sending solutions automatically with press of a button. Impressive setup to squeeze as much time as possible.
  2. There are languages (I'm talking about Ruby) that have extremely friendly and over developed standard library. That greatly cuts mundane tasks like calculating permutations that I've had to do from scratch in JS. Those little helper functions, designed to be available and approachable even though not so needed in daily work of software developers made a huge difference in chic solutions of top rankers.

As last time I'm tempted to spend time to create my standard Util library for Advent of Code for the next year.

Ending note

Participating in Advent of Code was again a great experience with lots of fun. My goals for this edition of Advent of Code were accomplished and I hope that this article will help you and encourage to participate in AoC2021! Cheers!

要查看或添加评论,请登录

Piotr Tr?bacz的更多文章

  • Developer Productivity in Story Points

    Developer Productivity in Story Points

    Story Points and Developer Productivity My friend's manager wanted to to use Story Points for Comparing Productivity…

    5 条评论
  • True Friendships in 2020

    True Friendships in 2020

    Today (30th July) is international friendship day and after watching movie Tag this weekend I felt kick of inspiration…

  • Silver bullets for your free time

    Silver bullets for your free time

    In the last article I wrote about different types of side projects. In this one – instead of widening your…

  • Stop chasing the rabbit in side projects

    Stop chasing the rabbit in side projects

    Each of us have a limited number of hours each day and modern world doesn’t make it easy to decide what we should do…

  • What I learned with Advent of Code 2017

    What I learned with Advent of Code 2017

    Before sharing my thoughts, short introduction for readers not familiar with this event, which had 3rd edition this…

    2 条评论

社区洞察

其他会员也浏览了