
Advent of Code 2018 - rauhl
https://adventofcode.com/2018
======
pmulv
People have been interested in this in the past so I'll post it again: Peter
Norvig's satisfying Jupyter notebook solutions from AoC 2016[0].

[0][http://nbviewer.jupyter.org/url/norvig.com/ipython/Advent%20...](http://nbviewer.jupyter.org/url/norvig.com/ipython/Advent%20of%20Code.ipynb)

~~~
kbirkeland
He also did one for 2017[0]. I imagine if he does this one it will end up in
the same repo.

[0]
[https://github.com/norvig/pytudes/blob/master/ipynb/Advent%2...](https://github.com/norvig/pytudes/blob/master/ipynb/Advent%202017.ipynb)

------
mochtar
Last year I created a visualization of our private leaderboard [1], but that
required same manual work to update the ranking each day.

So for this year I've converted it to a browser extension, so it fetches the
data automatically :) Available for both Firefox [2] and Chrome [3].

[1] [https://github.com/amochtar/aoc-ranking](https://github.com/amochtar/aoc-
ranking) [2] [https://addons.mozilla.org/en-US/firefox/addon/aoc-
ranking/](https://addons.mozilla.org/en-US/firefox/addon/aoc-ranking/) [3]
[https://chrome.google.com/webstore/detail/aoc-
ranking/jbnlaf...](https://chrome.google.com/webstore/detail/aoc-
ranking/jbnlafikncgjjhdkmfhokcplgahebmjl)

------
aczerepinski
I'm exited to dust off my Elixir skills. Jose Valim (creator of the language)
is going to stream solutions on Twitch on a one-day lag.

~~~
rehemiau
Announcement link: [http://blog.plataformatec.com.br/2018/11/lets-learn-
elixir-t...](http://blog.plataformatec.com.br/2018/11/lets-learn-elixir-
together-with-advent-of-code/)

~~~
sfusato
This is a really cool thing for Jose to do. It's a unique opportunity.

------
ThorinJacobs
I'm really excited for this year's AoC, and trying to get other devs at my
work involved too!

Last year I tried to solve at least the first few days in a bunch of different
languages, doing Red/Green TDD so I could learn how to set up a basic project
and do tests in languages I was less familiar with. Still trying to decide if
I should take that approach again this year or focus on getting every day done
in a single new language.

~~~
aczerepinski
That's what I did too and my original plan was to use 25 different languages
throughout the month. However as the puzzles got harder, I found there just
wasn't enough time in the day. I'm sure the puzzles remain easy for some, but
for me personally they got challenging even in the languages I already know.

------
netcraft
I've participated in this the last couple years. It is really well done. The
puzzles get progressively harder as the month goes on. I usually try to use a
language im interested in but don't have a lot of experience with, but thats
even more of a challenge and generally by the 15th or 20th im struggling to
find enough time to complete the puzzles, but I try to go back and finish
everything eventually. Always learn something new; theyre generally problems
different from what I work on day to day.

~~~
keithnz
this is what I like to do too.... it's quite nice for learning languages.

Not quite sure what language I'm going to do this year though

------
notjustanymike
Forget the code challenges for a minute, and just look at that beautiful font
and text-shadow combination on the logo.

~~~
j1elo
To be honest that website looks very bad to me. Fonts are too thin and that
makes the text quite difficult to read. Much more than e.g. HN. And that's in
my desktop PC, in mobile I went directly to close the tab.

(Update) The "high contrast" CSS style they provide is more readable, but I'm
sure it should be possible to create a dark style where readability doesn't
suffer that much. That font is just not the best choice.

~~~
xPaw
It really is a thin font, I've pinged the author on Twitter a couple of days
ago.

[https://twitter.com/thexpaw/status/1067699713745530883](https://twitter.com/thexpaw/status/1067699713745530883)

------
fells
Excited for this year's version. I did last year's event in OCaml which was a
challenging, yet very rewarding experience. Still trying to decide what
language to use this year.

~~~
jaaames
I'm going to do Rust.

~~~
sten
Gonna try using rust this year as well. I have no background in rust at all so
I'm a bit excited for the extra experience of trying a new language.

~~~
itsme24543
gonna give Rust a try also

------
netcraft
Would be cool if they asked for information after you completed a puzzle for
the day - scale of 10 how hard did you consider the puzzle, did you learn
something new, what language did you use to complete it - would be super
interesting data I bet.

~~~
aleksei
Can you expound on that? What would you wish to know?

~~~
netcraft
I think the three I mentioned would be a great place to start.

\- On a scale of 1-10, 1 being you could do it with your eyes closed, 10 being
you thought it was nearly impossible, how difficult was this puzzle for you?

\- Did you learn something new because of this puzzle? Could be something
about your language or a library or a new algorithm that helped you solve it.

\- What language(s) did you use to solve this puzzle?

It could let you compare yourself with other developers - if you thought it
was hard and most others didn't then you would know you might need to practice
something more. It might be something that would best be combined with some
profile level questions - like their experience level and primary languages
that they use day to day.

It could tell us that people who used python found this particular puzzle easy
(maybe because of some built in function in the stdlib) but people using some
other language didn't.

Year over year it would be awesome to compare the languages that people use.
Nobody is doing this for their job supposedly so these are either languages
that people enjoy or find practical. I bet you'd find some correlations though
too between language and how many puzzles they complete in a year - ie people
using language x tend to finish the whole year but language y tend to drop off
after day 10.

------
j1elo
If you participated in previous editions, how much time did you have to
dedicate each day, on average?

I've joined similar initiatives in the past, but I always end up giving up
because of not being able to keep up the pace of sitting down _every_ day.

Yeah one could just solve the problems with some offset delay, or just skip
all missed problems, but then it's not fun any more, and I'd wager that the
same could be done any other time of the year too...

~~~
loeg
For others looking for their past year results, check out the URL:
[https://adventofcode.com/2017/leaderboard/self](https://adventofcode.com/2017/leaderboard/self)

Probably 15-20 minutes a day on average (edit: yep, my data from 2017 supports
that), but with large spikes (and the average goes up towards the end of the
month). (But I'm pretty quick — I was on the global leaderboard the last few
years in a row.)

Edit: real numbers from 2017:

Excluding outliers and days I was absent at the start of the challenge:
average 12.5 minutes for part 1 and 19.5 minutes for part 2.

Only excluding days where I was absent at the start of the challenge: average
16.25 minutes for part 1 and 23 minutes for part 2.

Edit2: 2016 was similar: 19-25 minutes excluding outliers, 23-35 minutes
excluding days I missed the puzzle release by several hours.

If you're going for speed / leaderboard, Python is usually your best bet.
Suggested libraries to be familiar with include:

stdlib: binascii, collections (especially defaultdict), fractions (gcd),
itertools (combinations, combinations_with_replacement, permutations, product,
izip, chain), md5, re, os/sys.

Non-std: networkx (graphs and shortest path), sympy (isprime()), numpy
(efficient representation of large arrays).

It's useful to have a canned exhaustive tree search prepared
(breadth/depth/"best"-first search).

You can use complex numbers to represent 2-dimensional coordinates and
direction; turning the unit vector left and right involves multiplying by 1j
and -1j, respectively, and movement is addition.

Oh, and sometimes pypy is faster enough that it can make a Python solution
viable where otherwise it would have been too slow.

------
dean177
I have been pretty interested in ReasonML / Ocaml lately, these puzzles are a
great oppertunity to get to grips with the basics of a language.

~~~
thangngoc89
Shamelessly plug, I created a repository for storing solution written on
Sketch.sh here: [https://github.com/Sketch-sh/advent-of-
code-2018](https://github.com/Sketch-sh/advent-of-code-2018)

~~~
rukuu001
Huh, that's cute :) I'm using AOC to learn Reason this year too

------
zephyrfalcon
I'm thinking of using Red this year, although it might not be ready, depending
on what kinds of problems come up. Otherwise it will "just" be Prolog again.
:)

------
mathgeek
Discussion from last year's AoC:
[https://news.ycombinator.com/item?id=15813318](https://news.ycombinator.com/item?id=15813318)

------
jeroenheijmans
The 2017 edition was the first time I participated, and I severely
underestimated how much fun it would be! Am participating (and to a much
lesser degree competing) again this year :D

------
qubyte
I got a bit too invested in this last year. I even did a write up of one of
the tasks. That year I did it all using JS since it's easy to write input
parsers with it. This year I'll be doing it in Rust to stretch myself a
little.

[https://qubyte.codes/blog/advent-of-
code-2017-day-20-task-2](https://qubyte.codes/blog/advent-of-
code-2017-day-20-task-2)

~~~
w4tson
Depending on your skills it may stretch you a lot. I did 2016 in rust and it
was a battle, I knew relatively little beforehand.

2017 I solved in kotlin and got all the way to the end. I remember closing my
laptop on Christmas Day and feeling elated/tired

------
SnowingXIV
Looking forward to completing this year! Normally I'd grab ruby or js, but
been filling gaps using C lately and tempted to keep pushing that.

------
aquova
I vaguely remember hearing about this last year, and I'm really excited to try
my hand at it this year. I initially taught myself Python doing daily coding
challenges, but it's been over 4 years since I've done any. I'm debating
trying my hand at learning a new language through this, possibly Nim or Rust,
but we'll have to see if they start to get too tough.

------
anthay
I did the AoC last year for the first time and was amazed how quickly some
participants solved the puzzles, e.g. < 60 seconds. (I wrote about my
experience here: [http://howtowriteaprogram.blogspot.com/2017/12/advent-of-
cod...](http://howtowriteaprogram.blogspot.com/2017/12/advent-of-
code-2017.html))

~~~
Marazan
Never rule out people cheating. Solving it on one account then doing it again
in another account

~~~
nneonneo
That doesn't help - time is counted from midnight, so if you solve the problem
on one account and then another, the second account will have a strictly worse
time. About all it can really do is mess with the score distribution.

Also, the input data for each problem is randomized per user, so you really do
need a proper programmatic solution (i.e. simply copying another person's
answer is unlikely to work).

~~~
aczerepinski
You could hurt other people's scores though right? Like if you and one other
competitor traded wins on different days, but you had a second account that
you posted the same solution to, your competitor would get third place on your
winning days (and thus fewer points).

(Please don't do this!)

------
Insanity
I love AoC and gladly donate to it :) I have been looking forward to it for
some time now!

I have also made a discord bot to show the leaderboard, if anyone is
interested :
[https://github.com/DylanMeeus/Advent_Of_Code_Bot](https://github.com/DylanMeeus/Advent_Of_Code_Bot)

------
wodenokoto
I'm stuck on question 1. As in "I don't think I understand the question"

Is there a list of frequencies I starring me in the face, that I am failing to
see, which needs to apply to zero?

Am I supposed to suss out the pattern for how frequency change occur as a
function of current frequency from the two examples?

~~~
joshvm
You're not given frequencies, you're given offsets/errors which affect the
overall drift.

------
BooneJS
The last few years I used Go, but I’d like to learn Rust. This seems like a
good excuse to dabble in a new language.

~~~
Insanity
I am going to use this year similarly, but with Go and Lisp instead of Python
and Haskell :)

It is such a fun way to pick up new langs

------
jordigh
Here is my blog post for when I did this in D:

[http://jordi.inversethought.com/blog/advent-
of-d/](http://jordi.inversethought.com/blog/advent-of-d/)

------
meuk
Hey, maybe it's an idea if everyone who plans to do the exercises in a
specific language posts a link to a github repo? Then we could compare the
solutions :)

------
ghostbrainalpha
You can check out last years challenges while you wait right now.

[https://adventofcode.com/2017](https://adventofcode.com/2017)

------
keyle
AZPCS is in full swing at the moment.

[http://azspcs.com/](http://azspcs.com/)

------
timmorgan
I’ve been wanting to learn scheme. I think this would be a good opportunity!

Question: should I go with Racket or Chicken Scheme?

~~~
chickenfries
I'm considering doing Racket because it has a lot of good resources for people
who aren't necessarily experts in Scheme.

------
karanke
Coming across this for the first time, very cool!

Going to do this in Scala, if anybody wants to join my email is in my bio.

------
appleiigs
Is "Dec 1st midnight" at the beginning of the day or the end of the day?

~~~
333c
The beginning of the day. The 2018 page [1] has a countdown which is currently
at about 11 hours remaining.

[1]: [https://adventofcode.com/2018](https://adventofcode.com/2018)

------
rpz
k/q programmers, unite!

~~~
jerry40
How is it going? FOr advent 2018 I use scheme but after 4 stars I think that
kdb+/q actually quite suitable for such kind of tasks (at least so far). I'm
not very good at it but now I'm thinking about trying to redo the exercises in
it.

------
reaperducer
I dig the little Easter egg. I don't remember that in previous years.

~~~
333c
What's the Easter egg?

------
luked22
is there a way to get an email reminder to do the task every day?

~~~
narimiran
Let writing an email reminder program be your Day 0 task for tomorrow ;)

------
aestetix
Is it really that hard to provide an email based login?

~~~
biggerfisch
I mean, it is additional work. Not only do you need to store the
emails/passwords securely, which while it isn't _that_ hard, it is a needed
consideration, but you also need to now:

\- provide a password reset service

\- find a way to send emails to this many people for low cost, it is a free
service after all, so all of the confirmation/reset emails are an additional
cost

\- etc

~~~
jaaames
Firebase has ergonomic free auth that does all this out of the box.

------
jawns
Looks like a cool project.

I'm just curious about why this is billed as an Advent calendar, when really
the only thing it has in common with an Advent calendar is that it terminates
on Christmas.

Is there anything about it that has anything to do with Advent, i.e. the
Christian liturgical season that precedes Christmas?

~~~
lazzlazzlazz
With an Advent calendar, you open a surprise, tiny gift every day of December
until Christmas. With Advent of Code, you open a surprise, tiny code puzzle
every day of December until Christmas.

