mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-25 21:00:31 +01:00
Implement day 08, in python.
Attempted to reach the leaderboard. Failed miserably. Trying again soon anyway.
This commit is contained in:
51
2018/other/day08.py
Normal file
51
2018/other/day08.py
Normal 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))
|
||||||
@@ -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"),
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user