From 5ba905be2fc8c2f0f891df62618ed71d21e2588d Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Fri, 25 Dec 2020 17:54:57 +0100 Subject: Add AoC 2020 post --- src/blog/advent-of-code-2020.html | 91 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 src/blog/advent-of-code-2020.html (limited to 'src/blog/advent-of-code-2020.html') diff --git a/src/blog/advent-of-code-2020.html b/src/blog/advent-of-code-2020.html new file mode 100644 index 0000000..3b78433 --- /dev/null +++ b/src/blog/advent-of-code-2020.html @@ -0,0 +1,91 @@ +title: Advent of Code 2020 +date: December 25, 2020 17:35 +--- +

Merry Christmas to all!

+ +

+Advent of Code 2020 has come to an +end. At the time of this writing, around seven thousand people finished the +whole thing, out of the 150000 that had submitted a solution to the first day's +problem. And I'm one of them! +

+ +

+You can see my solutions here. +I started out with C, moved on to Ruby, and near the end switched to Lua. I'm +going to need some Lua knowledge for the Redis section of the databases class +I'm taking right now, so AoC was a good time to get familiar with the language. +

+ +

Thoughts on AoC 2020

+ +

+I found most of the problems fairly simple, but it was fun to go through them +all anyways. +

+ +

Most Tedious Award goes to...

+ +

+Day 20 Part 2. My solution ended up being a good 340 lines of Lua split +between two scripts. This is the last problem I solved because I knew it would +require a lot of work to get working, so I procrastinated on it until the end. +

+ +

+In the end, the process of solving this was actually kind of fun, and getting +the final solution satisfying. I think it might have something to do with the +geometric/visual nature of the problem. There's just something nice about +rotating and flipping ASCII squares with code, and seeing them all line up +correctly in the end. +

+ +

Most Cheesed Award goes to...

+

+Day 19 Part 2. Rather than implementing a parser generator that could +handle this grammar by hand, I bodged together a + + Bison (aka Yacc) solution +. It's not very pretty, especially the Bash script that just calls the +parser with each input word separately and counts how many times it didn't exit +with a syntax error. But it works! And I finally learned something about +Bison/Yacc and Flex/Lex, which I've had indirect exposure to before, but never +actually used. +

+ +

+I was quite pleased with my Part 1 solution though, where I implemented a simple +recursive parser generator. +

+ +
Runner-up in the Most Cheesed category
+

+Day 13 Part 2. I'll admit it, I just copied a Chinese Remainder Theorem +implementation from Rosetta Code. I'm sure the Python guys just used +numpy's CRT, so treating it as a library function doesn't seem too +cheaty for me. +

+ +

Most Fun Award goes to...

+

+Probably a tie between the already mentioned Day 20 Part 2 and Day 19 +Part 1. Day 20 had that cool geometric component and satisfaction of +putting a puzzle together, but I'm a sucker for recursive parsers implemented +with higher order functions. +

+ +

Thoughts on Lua

+

+Learning Lua was probably the most useful outcome of this year's AoC for me. I +feel pretty comfortable with the basic constructs of the language, and even +played around a bit with metatable-driven OOP. I don't know how closely I stuck +to general conventions, and didn't interact with any external libraries, but can +definitely read and write the language comfortably now. +

+ +

+My one sentence summary of feelings towards Lua is that Go is to Java what Lua +is to Python/Ruby/JavaScript. Its very small vocabulary means you learn the +language quickly and don't need to think much while writing it, but your +programs can end up more verbose than the equivalent Ruby/Python. +

-- cgit v1.2.3