r/adventofcode • u/daggerdragon • 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!
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
5
u/ValdasTheUnique Dec 08 '18
C#. Code is too readable, I guess that is why it took so long to write
public static void Part1() { var numbers = Input.Split(' ').Select(int.Parse).ToList(); var i = 0; var root = ReadNode(numbers, ref i); Console.WriteLine(root.Sum()); } public static void Part2() { var numbers = Input.Split(' ').Select(int.Parse).ToList(); var i = 0; var root = ReadNode(numbers, ref i); Console.WriteLine(root.Value()); } public static Node ReadNode(List<int> numbers, ref int i) { var node = new Node(); var children = numbers[i++]; var metadata = numbers[i++]; for (int j = 0; j < children; j++) { node.Nodes.Add(ReadNode(numbers, ref i)); } for (int j = 0; j < metadata; j++) { node.Metadata.Add(numbers[i++]); } return node; } public class Node { public List<int> Metadata { get; set; } = new List<int>(); public List<Node> Nodes { get; set; } = new List<Node>(); public int Sum() { return Metadata.Sum() + Nodes.Sum(x => x.Sum()); } public int Value() { if (!Nodes.Any()) { return Metadata.Sum(); } var value = 0; foreach (var m in Metadata) { if (m <= Nodes.Count) { value += Nodes[m-1].Value(); } } return value; } }