Hacker News new | past | comments | ask | show | jobs | submit login

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...)

I'm one of the people who solved problems very quickly (3rd overall last year). I'm somewhat competitive by nature, and I did ACM programming challenges in undergrad (although I was never good enough to make the local team, heh). Happy to answer any questions you might have about "competitive" AoC; it's fun in a very different way than learning new languages for the competition. I personally used Python for the last few years, and I'll probably use it again this year (assuming I try to compete).

Part of it is familiarity with the format, which of course assumes they keep things reasonably similar this year. Knowing the kinds of problems that appear (parsing, graphs, optimization, reverse engineering, etc.) helped me put together a little library of code that means I'm not spending time rewriting fundamental algorithms.

Reading problem statements is one of those skills I picked up from ACM programming competitions. The problem statements usually contain a lot of fluff - to speed-code you want to be able to pluck out the relevant bits quickly so you can start formulating the solution.

For day 3 in 2017, the spiral. Were you just aware of this concept before hand?

I’m not OP, but if I were solving this I’d just take the smallest square less than that number, figure out where it is (the top left or bottom right corner), and then “run” the algorithm from there, which should only require one “turn” at the most. You really don’t need to know anything about spirals in particular; just look for a pattern that you can take advantage of to reduce your work.

You make it sound so easy. Part 2 was the real gnarly bit.

Anyway I’m sure I won’t ever encounter that spiral as long as I live but if I do, I have code prepped for it :D

Oh, I didn't see that. The Advent of Code website is strangely annoying in that it makes it extremely difficult to find past problems…

Based on what I found online (which is abridged rewordings of the problem, something of a sequence sum?) I'd get lazy at that point and implement something that makes the spiral. Presumably, this shouldn't take to long, as the sequence grows rapidly so they can't give us a number that's too big…

>extremely difficult to find past problems…

Huh? Click [Events], click on the year, click on the day.

The second (and sometimes much harder) part of each days problem is only revealed when you complete the first part.

I was not particularly fast that day. If I recall correctly, I just bruteforced it (implemented the four-turn logic). Not elegant but it runs fast enough :)

Me too, good to know ;)

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

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).

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!)

Aside from the other responses mentioning why cheating wouldn’t work, I don’t think it’s out of the question that people can solve these that quickly. The “trick”, from my experience, has been to quickly skim the problem, extract useful information (which you can “learn” to do if you do it enough), and try to figure out how to solve the problem while you are writing boilerplate to set up the problem. Using Python or a similarly high-level language often helps.

I vaguely remember something from last year or the year before one of them was pretty quick because I could just ask wolfram alpha to solve it:)

You cannot cheat that way. It tracks time since the question became live.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact