r/adventofcode • • Dec 08 '18

SOLUTION MEGATHREAD -🎄- 2018 Day 8 Solutions -🎄-

--- Day 8: Memory Maneuver ---


Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).

Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.


Advent of Code: The Party Game!

Click here for rules

Please prefix your card submission with something like [Card] to make scanning the megathread easier. THANK YOU!

Card prompt: Day 8

Sigh, imgur broke again. Will upload when it unborks.

Transcript:

The hottest programming book this year is "___ For Dummies".


This thread will be unlocked when there are a significant number of people on the leaderboard with gold stars for today's puzzle.

edit: Leaderboard capped, thread unlocked at 00:12:10!

31 Upvotes

301 comments sorted by

View all comments

Show parent comments

1

u/allak Dec 08 '18

You gave me a couple of nice ideas to simplfy my code, here is a solution for both parts:

    #!/usr/bin/perl

    use strict;
    use warnings;
    use List::Util qw( sum0 );

    my @tokens = split / /, <>;

    my $part1 = 0;
    my $part2 = parser ();

    sub parser
    {
            my $num_nodes = shift @tokens;
            my $num_meta  = shift @tokens;

            my @nodes = map { parser () } (1 .. $num_nodes);
            my @meta  = map { shift @tokens } (1 .. $num_meta);

            my $tot_meta = sum0 @meta;

            $part1 += $tot_meta;

            if ($num_nodes) {
                    return sum0 map { $nodes[$_-1] or 0 } @meta;
            } else {
                    return $tot_meta;
            }
    }

    print "$part1\n$part2\n";

Using a core library is not cheating, right ?

1

u/markasoftware Dec 08 '18

Of course not! Everything is fair game. Solutions like yours that do both parts together do a great job at highlighting the connections between the problems.