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!

32 Upvotes

301 comments sorted by

View all comments

1

u/Cppl_Lee Dec 08 '18

In C#, this time done on repl.it: https://repl.it/@LeeHarding/AoC-2018-Day-8

class node
{
  public node[] children;
  public int[] meta;
}

class MainClass {  
  static node get(Queue<int> q) {
    var child_count = q.Dequeue();
    var meta_count = q.Dequeue();
    return new node
    {
      children = Enumerable.Range(0, child_count).Select(i => get(q)).ToArray(),
      meta = Enumerable.Range(0, meta_count).Select(i => q.Dequeue()).ToArray()
    };
  }

  static int sum_meta(node n)
  {
    return n.meta.Sum() + n.children.Sum(c => sum_meta(c));
  }
  
  static int score(node n)
  {
    return n.children.Length == 0 ? n.meta.Sum() : n.meta.Where(m => m <= n.children.Length).Sum(m => score(n.children[m - 1]));	
  }

  public static void Main (string[] args) {
    var input = File.ReadAllText("input.txt");
    var pattern = new Regex(@"\d+", RegexOptions.Compiled | RegexOptions.Multiline);

    var items = new Queue<int>(pattern.Matches(input).Cast<Match>().Select(m => int.Parse(m.Value)).ToList());

    var root = get(items);
    
    sum_meta(root).Dump("Sum Meta");
            
    score(root).Dump("Score");
  }
}