m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin Chrzanowski <marcin.j.chrzanowski@gmail.com>2020-12-25 17:54:57 +0100
committerMarcin Chrzanowski <marcin.j.chrzanowski@gmail.com>2020-12-25 17:54:57 +0100
commit5ba905be2fc8c2f0f891df62618ed71d21e2588d (patch)
tree0678fb6a444adfae071b7d68c3ea3e5dc55daff1
parent1eb898f99a0b186a7cd676f38c7d1dd0b073c1d1 (diff)
Add AoC 2020 post
-rw-r--r--src/blog/advent-of-code-2020.html91
1 files changed, 91 insertions, 0 deletions
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
+---
+<p> Merry Christmas to all!</p>
+
+<p>
+<a href='https://adventofcode.com/2020'>Advent of Code 2020</a> 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!
+</p>
+
+<p>
+You can see my solutions <a href='https://gitlab.com/m-chrzan/aoc2020'>here</a>.
+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.
+</p>
+
+<h3>Thoughts on AoC 2020</h3>
+
+<p>
+I found most of the problems fairly simple, but it was fun to go through them
+all anyways.
+</p>
+
+<h4>Most Tedious Award goes to...</h4>
+
+<p>
+<i>Day 20 Part 2</i>. 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.
+</p>
+
+<p>
+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.
+</p>
+
+<h4>Most Cheesed Award goes to...</h4>
+<p>
+<i>Day 19 Part 2</i>. Rather than implementing a parser generator that could
+handle this grammar by hand, I bodged together a
+<a href='https://gitlab.com/m-chrzan/aoc2020/-/tree/master/19/b'>
+ Bison (aka Yacc) solution
+</a>. 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.
+</p>
+
+<p>
+I was quite pleased with my Part 1 solution though, where I implemented a simple
+recursive parser generator.
+</p>
+
+<h5>Runner-up in the Most Cheesed category</h5>
+<p>
+<i>Day 13 Part 2</i>. I'll admit it, I just copied a Chinese Remainder Theorem
+implementation from Rosetta Code. I'm sure the Python guys just used
+<code>numpy</code>'s CRT, so treating it as a library function doesn't seem too
+cheaty for me.
+</p>
+
+<h4>Most Fun Award goes to...</h4>
+<p>
+Probably a tie between the already mentioned <i>Day 20 Part 2</i> and <i>Day 19
+Part 1</i>. 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.
+</p>
+
+<h3>Thoughts on Lua</h3>
+<p>
+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.
+</p>
+
+<p>
+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.
+</p>