From 2b732c2285863b502a8ca2a0de40d917570f3b5d Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Sat, 8 Dec 2018 07:13:48 +0100 Subject: [PATCH] Implement day 08, in python. Attempted to reach the leaderboard. Failed miserably. Trying again soon anyway. --- 2018/other/day08.py | 51 +++++++++++++++++++++++++++++++++++++++++++++ 2018/src/main.rs | 2 ++ 2 files changed, 53 insertions(+) create mode 100644 2018/other/day08.py diff --git a/2018/other/day08.py b/2018/other/day08.py new file mode 100644 index 0000000..2abcb00 --- /dev/null +++ b/2018/other/day08.py @@ -0,0 +1,51 @@ +import fileinput +import re +import itertools +from collections import defaultdict, deque +from queue import Queue, PriorityQueue, SimpleQueue + + +def sum_metadata(l): + children, metaentries = l[:2] + start = 2 + total_len = metaentries + 2 + + total = 0 + + for _ in range(children): + nt, nl = sum_metadata(l[start:]) + total += nt + total_len += nl + start += nl + + if metaentries > 0: + return total + sum(l[start:start+metaentries]), total_len + else: + return total, total_len + + +def sum_metadata2(l): + children, metaentries = l[:2] + print(children, metaentries, l) + start = 2 + total_len = metaentries + 2 + + if children == 0: + return sum(l[start:start+metaentries]), total_len + + values = [] + for _ in range(children): + nt, nl = sum_metadata2(l[start:]) + values.append(nt) + total_len += nl + start += nl + + print(values) + print(l[start:start+metaentries]) + + return sum(values[x - 1] for x in l[start:start+metaentries] if x - 1 < len(values)), total_len + + +numbers = [int(x) for x in next(fileinput.input()).strip().split()] +print(sum_metadata(numbers)) +print(sum_metadata2(numbers)) diff --git a/2018/src/main.rs b/2018/src/main.rs index be4bae2..08e5e90 100644 --- a/2018/src/main.rs +++ b/2018/src/main.rs @@ -17,6 +17,7 @@ pub mod day04; pub mod day05; pub mod day06; pub mod day07; +pub mod day08; fn get_impl(day: &str) -> Box { match day.parse() { @@ -27,6 +28,7 @@ fn get_impl(day: &str) -> Box { Ok(5) => Box::new(day05::Day05::new()), Ok(6) => Box::new(day06::Day06::new()), Ok(7) => Box::new(day07::Day07::new()), + Ok(8) => Box::new(day08::Day08::new()), Ok(val) => panic!("Unimplemented day {}", val), _ => panic!("Invalid number"), }