this post was submitted on 13 Dec 2023
6 points (80.0% liked)

Advent Of Code

766 readers
1 users here now

An unofficial home for the advent of code community on programming.dev!

Advent of Code is an annual Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language you like.

AoC 2023

Solution Threads

M T W T F S S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25

Rules/Guidelines

Relevant Communities

Relevant Links

Credits

Icon base by Lorc under CC BY 3.0 with modifications to add a gradient

console.log('Hello World')

founded 1 year ago
MODERATORS
 

We all know and love (!) the leaderboard, but how about a different method?

One can solve a problem with a simple, naive method resulting in a short program and long runtime, or put in lots of explicit optimizations for more code and shorter runtime. (Or if you're really good, a short, fast program!)

I propose the line-second.

Take the number of lines in your program (eg, 42 lines) and the runtime (eg 0.096 seconds). Multiply these together to get a score of 4.032 line-seconds.

A smaller score is a shorter, faster program.

Similarly, (for a particular solver), a larger score is a "harder" problem.

all 10 comments
sorted by: hot top controversial new old
[–] exocortex@discuss.tchncs.de 6 points 11 months ago* (last edited 11 months ago) (1 children)
  1. I think a more consistent approach would he to not count lines, but filesizes after the code has been minimized with a specific minimizer. I could write everything in one line in many languages, so lines isn't very clever.

  2. The code has to be compiled and run on a specific architecture and with specific test input (we don't know if the AoC-example-data is always the same in size or resulting computanional complexity.

  3. The final metric could be: [minified filesize] * [code execution time] * [problem solving time].

[–] hades@lemm.ee 5 points 11 months ago

Lines of code can be arbitrarily reduced, and seconds to solve depends to a large extent on how good my hardware is. So both metrics are useless, and multiplying them makes a useless-squared metric.

I love it!

Here are my stats for the solutions so far (with no optimisation beyond the initial solution):

+-----+-----------+-------+---------------+
| Day | Time (s)  | Lines | line-seconds  |
+-----+-----------+-------+---------------+
|  1  |  0.003    |   35  |   0.098       |
|  2  |  0.001    |   47  |   0.042       |
|  3  |  0.006    |   60  |   0.348       |
|  4  |  0.003    |   41  |   0.115       |
|  5  |  0.077    |   74  |   5.708       |
|  6  |  0.000    |   45  |   0.001       |
|  7  |  0.005    |   87  |   0.395       |
|  8  | 10.175    |   60  | 610.476       |
|  9  |  0.004    |   31  |   0.128       |
| 10  |  0.084    |  103  |   8.634       |
| 11  |  0.240    |   49  |  11.771       |
| 12  |  2.448    |   93  | 227.633       |
| 13  |  0.009    |   83  |   0.707       |
+-----+-----------+-------+---------------+
[–] HeckGazer@programming.dev 4 points 11 months ago (1 children)

Another wrinkle is how do you count the lines? I've done several of this year's AoC in "one line" of JavaScript because you can just chain split().map().reduce().filter() etc. together indefinitely. Some languages like JS or python can do so much in one line

[–] lwhjp@lemmy.sdf.org 2 points 11 months ago

I probably should have made it clearer this is a somewhat tongue-in-cheek proposal :)

You're quite right - pretty much any program can be golfed into a single line.

[–] CameronDev@programming.dev 4 points 11 months ago

Some of the challenges feasably could be solved with a pen and paper amd a keen eye, giving a line count of 0.

#nocode :D

[–] Ategon@programming.dev 3 points 11 months ago (1 children)

The issue with that and reason why AoC doesnt use that for the leaderboard is they dont have access to the code people write, just the final result

Adding that as an option would mean having something that takes into account differences in base runtimes of code for different languages (e.g. scripting languages taking longer) so that its feasible to code it in anything, and having the ability to execute many different kinds of code which can be a pain to set up (and would mean youre then running arbitrary code unless you sandbox it)

I used that as the way to rank people in !challenges@programming.dev when I was running that and its been on hiatus for awhile due to the effort needed to run it since I havent had time due to building up things in the instance such as !pangora@programming.dev

It could work if self reported but then its easy to cheat

[–] lwhjp@lemmy.sdf.org 1 points 11 months ago (1 children)

Oh sure, it's only for fun - I was thinking of it more of a way to compare my own solutions to different problems.

I didn't notice there was a challenges community! That's awesome. (Maybe a more casual honor-based version where anybody can submit puzzles would be easier? Creating puzzles sounds like fun!)

[–] Ategon@programming.dev 2 points 11 months ago* (last edited 11 months ago)

Yeah ill be editing it and trying to relaunch it in the new year with a different format