diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2023-12-25 18:52:56 +0100 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2023-12-25 18:52:56 +0100 |
| commit | 57ef2d54ef65043cc3fcc18b474dad140bfe70aa (patch) | |
| tree | dbdae2acfa5cccb2bfc12818c38af34eb6843ca6 /src/blog | |
| parent | 2b30bffc6cfef47c785c9bd3d5aa365750c0d533 (diff) | |
| download | sebastiano.tronto.net-57ef2d54ef65043cc3fcc18b474dad140bfe70aa.tar.gz sebastiano.tronto.net-57ef2d54ef65043cc3fcc18b474dad140bfe70aa.zip | |
Added blog post
Diffstat (limited to 'src/blog')
| -rw-r--r-- | src/blog/2023-12-25-advent-of-code/advent-of-code.md | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/blog/2023-12-25-advent-of-code/advent-of-code.md b/src/blog/2023-12-25-advent-of-code/advent-of-code.md new file mode 100644 index 0000000..3216486 --- /dev/null +++ b/src/blog/2023-12-25-advent-of-code/advent-of-code.md | |||
| @@ -0,0 +1,75 @@ | |||
| 1 | # Advent of Code | ||
| 2 | |||
| 3 | The [Advent of Code](https://adventofcode.com) is an online programming | ||
| 4 | contest that takes place every year in December. It works like an | ||
| 5 | [advent calendar](https://en.wikipedia.org/wiki/Advent_calendar), except | ||
| 6 | each day instead of a piece of chocolate or a sweet you get a new problem | ||
| 7 | to solve. | ||
| 8 | |||
| 9 | I have taken part in this contest for the first time this year, after | ||
| 10 | an email from a colleague that mentioned prizes for the winner of our | ||
| 11 | private leaderboard. Even without any prize, if it is a challenge | ||
| 12 | then I must accept it! | ||
| 13 | |||
| 14 | *Warning: if you are still trying to complete the problems, you may find | ||
| 15 | minor spoilers ahead, but nothing game-breaking.* | ||
| 16 | |||
| 17 | ## Choosing my weapons | ||
| 18 | |||
| 19 | As I was initially not planning on taking part in the challenge, I did | ||
| 20 | not have much time to decide which language or tools to use. I opted for | ||
| 21 | solving the problems in C, because it is the language I worked with the | ||
| 22 | most recently, but in hindsight it would have been more convenient to | ||
| 23 | refresh my Python or C++ skills. | ||
| 24 | |||
| 25 | In the end using a more limited language did not make a big difference: the | ||
| 26 | easy problems were still easy, some of the hard ones became a bit slower | ||
| 27 | to type out. I also had some fun implementing some basic data structures, | ||
| 28 | for example [heaps](https://en.wikipedia.org/wiki/Heap_(data_structure)) | ||
| 29 | for [day 17](https://adventofcode.com/2023/day/17). | ||
| 30 | |||
| 31 | ## The fun | ||
| 32 | |||
| 33 | Overall, I really enjoyed solving these problems! I liked the diverse | ||
| 34 | set of techniques that were needed: graph algorithms, dynamic programming, | ||
| 35 | computational geometry... a very nice selection of brain teasers! | ||
| 36 | |||
| 37 | I also liked the fact that the difficulty increased *on average*, but | ||
| 38 | sometimes a hard problem was be followed by an easier one. This way, | ||
| 39 | even if I found a problem particularly hard, I could still hope that | ||
| 40 | the next one would be quicker to solve. | ||
| 41 | |||
| 42 | I also liked that other people, including friends, colleagues and my | ||
| 43 | girlfriend, were taking on the challenge at the same time. I enjoyed | ||
| 44 | explaining my solution or asking my friends to explain theirs. By the | ||
| 45 | way, my friend Jared has some in-depth explanation of his solutions | ||
| 46 | in his [blog](https://guissmo.com/blog/) - check it out! | ||
| 47 | |||
| 48 | ## The ugly | ||
| 49 | |||
| 50 | There were a couple of problems that I disliked, and all of them for | ||
| 51 | the same reason: the problem was not solvable without taking advantage | ||
| 52 | of specific properties of the input data that were not made explicit in | ||
| 53 | the problem's statement. | ||
| 54 | |||
| 55 | As a Mathematician, I am never going to randomly assume that a generic | ||
| 56 | graph has a specific structure, or that just throwing the | ||
| 57 | [lcm](https://en.wikipedia.org/wiki/Least_common_multiple) into my | ||
| 58 | algorithm would make it work. So I was scratching my head for hours trying | ||
| 59 | to solve a general problem that was very likely unsolvable, when I only | ||
| 60 | had to solve a special case. | ||
| 61 | |||
| 62 | However, as a Reddit user pointed out, the input data *is* part of the | ||
| 63 | problem statement. Analyzing it to figure out what algorithm may work | ||
| 64 | is a skill. I guess I learnt something from this. | ||
| 65 | |||
| 66 | ## Solutions | ||
| 67 | |||
| 68 | If you are interested, you can find all my solutions on | ||
| 69 | [my git page](https://git.tronto.net/aoc/) and on | ||
| 70 | [Github](https://github.com/sebastianotronto/aoc). They are written in | ||
| 71 | [C99](https://en.wikipedia.org/wiki/C99) without any external dependency | ||
| 72 | other than the C standard library. | ||
| 73 | |||
| 74 | Apart from the harder problems, I have not commented my solutions much, | ||
| 75 | but you can send me an email if you want some explanation! | ||
