Implement day 08, in python.

Attempted to reach the leaderboard. Failed miserably. Trying again soon
anyway.
This commit is contained in:
2018-12-08 07:13:48 +01:00
parent 0c07cbda24
commit 2b732c2285
2 changed files with 53 additions and 0 deletions

51
2018/other/day08.py Normal file
View File

@@ -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))

View File

@@ -17,6 +17,7 @@ pub mod day04;
pub mod day05; pub mod day05;
pub mod day06; pub mod day06;
pub mod day07; pub mod day07;
pub mod day08;
fn get_impl(day: &str) -> Box<common::Solution> { fn get_impl(day: &str) -> Box<common::Solution> {
match day.parse() { match day.parse() {
@@ -27,6 +28,7 @@ fn get_impl(day: &str) -> Box<common::Solution> {
Ok(5) => Box::new(day05::Day05::new()), Ok(5) => Box::new(day05::Day05::new()),
Ok(6) => Box::new(day06::Day06::new()), Ok(6) => Box::new(day06::Day06::new()),
Ok(7) => Box::new(day07::Day07::new()), Ok(7) => Box::new(day07::Day07::new()),
Ok(8) => Box::new(day08::Day08::new()),
Ok(val) => panic!("Unimplemented day {}", val), Ok(val) => panic!("Unimplemented day {}", val),
_ => panic!("Invalid number"), _ => panic!("Invalid number"),
} }