Compare commits

...
4 Commits
Author SHA1 Message Date
Johannes Schaefer d84e3bff27 day08 part 2 2018-12-09 21:34:43 +01:00
Johannes Schaefer 51418b709e day08 part 1 2018-12-09 21:17:29 +01:00
Johannes Schaefer 4946263a37 day07-1 2018-12-07 11:17:48 +01:00
Johannes Schaefer cd16a42821 push to edition 2018 2018-12-07 09:53:18 +01:00
13 changed files with 216 additions and 8 deletions

No files matched your search

+1
View File
@@ -2,6 +2,7 @@
name = "aoc_2018" name = "aoc_2018"
version = "0.1.0" version = "0.1.0"
authors = ["Johannes <jschaef@mail.uni-paderborn.de>"] authors = ["Johannes <jschaef@mail.uni-paderborn.de>"]
edition = "2018"
[dependencies] [dependencies]
regex = "1.1.0" regex = "1.1.0"
+101
View File
@@ -0,0 +1,101 @@
Step B must be finished before step K can begin.
Step F must be finished before step I can begin.
Step T must be finished before step U can begin.
Step R must be finished before step Z can begin.
Step N must be finished before step S can begin.
Step X must be finished before step Y can begin.
Step I must be finished before step Y can begin.
Step K must be finished before step L can begin.
Step U must be finished before step J can begin.
Step G must be finished before step L can begin.
Step W must be finished before step A can begin.
Step H must be finished before step Q can begin.
Step M must be finished before step L can begin.
Step P must be finished before step L can begin.
Step L must be finished before step A can begin.
Step V must be finished before step Y can begin.
Step Q must be finished before step Y can begin.
Step Z must be finished before step J can begin.
Step O must be finished before step D can begin.
Step Y must be finished before step A can begin.
Step J must be finished before step E can begin.
Step A must be finished before step E can begin.
Step C must be finished before step E can begin.
Step D must be finished before step E can begin.
Step S must be finished before step E can begin.
Step B must be finished before step R can begin.
Step U must be finished before step O can begin.
Step X must be finished before step I can begin.
Step C must be finished before step S can begin.
Step O must be finished before step S can begin.
Step J must be finished before step D can begin.
Step O must be finished before step E can begin.
Step Z must be finished before step O can begin.
Step J must be finished before step C can begin.
Step P must be finished before step Y can begin.
Step X must be finished before step S can begin.
Step O must be finished before step Y can begin.
Step J must be finished before step A can begin.
Step H must be finished before step C can begin.
Step P must be finished before step D can begin.
Step Z must be finished before step S can begin.
Step T must be finished before step Z can begin.
Step Y must be finished before step C can begin.
Step X must be finished before step H can begin.
Step R must be finished before step Y can begin.
Step T must be finished before step W can begin.
Step L must be finished before step O can begin.
Step G must be finished before step Z can begin.
Step H must be finished before step P can begin.
Step I must be finished before step U can begin.
Step H must be finished before step V can begin.
Step N must be finished before step Y can begin.
Step Q must be finished before step E can begin.
Step H must be finished before step D can begin.
Step P must be finished before step O can begin.
Step T must be finished before step I can begin.
Step W must be finished before step V can begin.
Step K must be finished before step M can begin.
Step R must be finished before step W can begin.
Step B must be finished before step T can begin.
Step U must be finished before step A can begin.
Step N must be finished before step H can begin.
Step F must be finished before step U can begin.
Step Q must be finished before step O can begin.
Step Y must be finished before step S can begin.
Step V must be finished before step O can begin.
Step W must be finished before step C can begin.
Step Y must be finished before step J can begin.
Step T must be finished before step V can begin.
Step N must be finished before step D can begin.
Step U must be finished before step Q can begin.
Step A must be finished before step C can begin.
Step U must be finished before step M can begin.
Step Q must be finished before step S can begin.
Step P must be finished before step V can begin.
Step B must be finished before step Z can begin.
Step W must be finished before step Q can begin.
Step L must be finished before step S can begin.
Step I must be finished before step P can begin.
Step G must be finished before step P can begin.
Step L must be finished before step C can begin.
Step K must be finished before step A can begin.
Step D must be finished before step S can begin.
Step I must be finished before step H can begin.
Step R must be finished before step M can begin.
Step Q must be finished before step D can begin.
Step K must be finished before step O can begin.
Step I must be finished before step C can begin.
Step N must be finished before step O can begin.
Step R must be finished before step X can begin.
Step P must be finished before step C can begin.
Step B must be finished before step Y can begin.
Step G must be finished before step E can begin.
Step L must be finished before step V can begin.
Step W must be finished before step Y can begin.
Step C must be finished before step D can begin.
Step M must be finished before step J can begin.
Step F must be finished before step N can begin.
Step T must be finished before step Q can begin.
Step I must be finished before step E can begin.
Step A must be finished before step D can begin.
+1
View File
@@ -0,0 +1 @@
7 11 6 3 5 4 3 4 1 9 0 9 5 6 5 1 2 7 5 5 5 2 1 1 3 2 1 3 3 3 1 5 0 7 6 6 3 1 2 4 8 2 1 1 3 2 1 5 0 10 7 3 2 8 1 8 5 2 8 1 1 3 2 2 2 5 3 5 1 3 7 1 8 0 10 2 4 1 6 1 7 4 1 5 6 3 1 3 1 1 1 1 1 1 5 0 8 1 7 1 7 6 2 1 6 1 1 3 2 3 1 7 0 8 5 1 3 5 6 8 1 5 1 1 1 3 1 2 3 2 1 4 3 3 4 1 3 7 1 5 0 7 1 5 4 7 8 5 4 1 1 1 2 3 1 8 0 7 3 1 9 4 3 5 8 2 3 2 2 1 2 1 1 1 9 0 9 5 2 8 1 8 5 6 1 1 1 1 1 1 2 1 2 3 2 3 1 5 3 1 2 2 3 6 1 9 0 10 8 9 9 3 9 1 2 2 4 1 1 3 3 1 3 1 2 3 1 1 8 0 8 5 6 2 5 5 5 1 3 3 1 1 1 3 3 2 1 1 5 0 9 8 4 9 1 4 4 3 8 3 2 3 1 1 3 3 3 1 1 4 5 3 6 1 6 0 11 8 6 1 3 8 2 9 8 3 8 4 1 3 3 2 3 1 1 7 0 8 3 7 6 1 7 6 1 4 1 3 2 1 2 3 3 1 7 0 8 9 6 8 5 1 6 6 2 1 1 3 3 1 1 2 2 4 1 1 5 2 3 6 1 2 4 5 3 4 1 7 0 6 5 1 1 6 8 4 3 1 3 2 1 2 3 1 7 0 9 5 1 7 4 8 5 1 1 2 1 2 3 1 3 3 1 1 6 0 11 1 9 4 9 3 5 6 3 6 6 8 1 1 3 2 2 1 2 4 2 2 3 6 1 8 0 10 1 9 8 8 4 2 6 5 9 4 3 3 1 1 1 2 3 2 1 5 0 9 8 6 6 1 2 8 9 5 7 1 3 2 2 2 1 6 0 10 6 4 2 1 3 4 6 1 3 1 1 2 2 1 2 1 2 2 1 1 3 5 3 5 1 6 0 8 1 9 6 7 2 1 8 3 2 3 1 1 2 3 1 8 0 8 4 2 5 1 4 4 6 7 1 1 2 1 3 3 2 1 1 5 0 9 3 3 1 9 8 2 7 4 5 2 3 1 3 3 1 3 1 2 3 3 7 1 9 0 10 4 3 1 5 1 2 3 5 8 6 1 3 2 3 3 3 3 3 1 1 8 0 11 4 8 3 5 4 5 1 7 9 8 7 2 2 3 2 3 2 1 2 1 5 0 7 9 1 2 6 8 5 7 1 2 1 1 1 3 3 4 5 4 3 1 2 4 4 4 5 5 3 3 4 1 9 0 11 3 2 3 8 4 1 7 5 8 1 4 3 3 3 1 2 1 2 1 3 1 8 0 8 7 7 7 7 1 7 1 9 1 2 1 1 2 1 1 2 1 6 0 10 7 6 7 6 9 1 1 7 1 1 1 1 3 1 1 1 2 3 5 2 3 6 1 5 0 11 5 9 5 7 1 7 2 3 2 9 4 2 2 1 2 2 1 7 0 9 6 6 5 1 2 6 5 1 6 1 2 1 2 1 2 1 1 8 0 10 6 7 6 3 8 6 9 1 3 6 1 1 3 2 3 2 1 2 2 3 1 1 2 5 3 6 1 7 0 9 9 7 6 1 4 4 9 5 3 3 1 3 2 2 1 1 1 5 0 10 4 8 5 5 5 4 9 7 1 8 1 3 2 2 1 1 8 0 9 4 3 8 8 5 6 1 3 9 1 2 3 1 2 3 3 3 5 1 2 2 1 2 3 7 1 8 0 10 7 7 9 1 2 5 3 5 9 5 2 3 1 1 2 2 3 3 1 7 0 10 1 5 3 7 5 4 9 2 5 6 2 2 2 1 1 3 3 1 9 0 7 8 9 7 7 9 8 1 1 1 2 2 2 2 3 2 1 1 3 4 3 1 3 5 3 5 1 8 0 9 9 1 4 2 8 5 3 7 7 1 3 1 2 3 2 3 2 1 5 0 6 1 4 8 6 4 9 2 1 3 1 2 1 5 0 8 8 3 5 8 2 1 5 9 1 2 1 2 1 1 2 3 2 2 3 3 6 4 5 3 5 1 5 0 9 4 5 5 6 9 2 8 1 1 3 3 1 3 1 1 8 0 8 8 1 8 6 8 1 8 1 3 1 3 3 2 3 2 1 1 5 0 8 9 7 9 3 5 3 2 1 3 1 3 3 1 5 1 1 4 2 3 4 1 7 0 11 9 6 7 3 6 4 1 2 8 8 5 1 1 1 2 3 1 3 1 5 0 11 2 5 7 1 6 6 8 7 2 7 9 1 2 3 2 1 1 5 0 10 4 7 3 6 1 1 7 2 4 7 1 3 2 2 1 2 2 2 3 3 5 1 6 0 9 8 4 1 9 6 6 1 4 7 1 3 2 3 1 3 1 8 0 10 5 2 7 3 3 8 7 6 2 1 1 1 1 2 1 2 2 3 1 5 0 11 1 2 5 2 9 9 7 2 9 8 3 3 1 1 2 2 2 2 2 1 5 3 7 1 6 0 10 1 2 3 9 8 9 6 1 1 1 2 1 3 1 1 3 1 5 0 8 8 4 9 1 2 4 8 6 3 2 1 3 1 1 5 0 8 1 3 1 6 4 1 1 4 1 1 2 2 1 5 2 4 1 2 2 1 1 1 1 2 6 5 5 3 5 1 7 0 8 1 2 2 3 6 1 7 5 3 1 1 3 1 1 1 1 5 0 11 6 7 4 1 6 4 6 3 7 6 9 1 2 3 1 1 1 9 0 6 1 1 9 5 3 9 2 3 1 2 2 2 1 2 1 4 4 1 4 3 3 5 1 6 0 11 1 6 3 3 5 4 5 2 9 2 1 2 2 3 2 2 1 1 7 0 6 2 1 8 5 9 3 1 3 1 3 3 1 3 1 6 0 10 2 4 4 1 4 5 7 3 6 1 3 2 1 2 1 1 4 5 4 4 3 3 6 1 8 0 8 5 5 1 4 2 1 1 1 1 1 1 2 3 3 2 2 1 8 0 10 5 1 1 3 1 6 8 7 6 2 3 1 1 2 1 3 3 3 1 7 0 10 5 7 1 1 4 9 2 4 9 9 1 1 2 1 1 1 3 2 3 4 1 5 2 3 5 1 5 0 8 4 1 3 5 4 5 3 3 3 2 3 1 3 1 7 0 10 2 8 3 1 3 2 3 1 1 2 1 3 1 2 3 1 1 1 6 0 6 8 4 9 1 3 1 1 2 2 1 2 3 1 1 3 3 3 3 5 1 7 0 8 8 8 6 7 9 1 7 4 1 1 2 3 1 3 1 1 8 0 8 6 7 8 1 4 9 8 6 2 3 2 1 1 3 1 1 1 9 0 8 9 7 4 3 1 1 4 2 1 1 2 3 1 1 3 1 3 5 5 3 3 3 1 5 1 4 6 5 4 3 6 1 9 0 9 3 1 1 1 1 8 5 9 1 1 2 3 2 3 2 3 3 1 1 6 0 7 4 3 2 3 9 1 6 2 2 1 3 3 1 1 7 0 6 1 1 7 2 3 3 1 3 1 3 2 3 2 5 1 5 3 2 5 3 5 1 5 0 11 1 1 5 3 4 4 2 3 4 9 5 2 1 2 1 1 1 8 0 9 1 7 4 6 4 6 4 3 3 2 3 1 2 3 1 2 3 1 8 0 7 7 4 1 5 7 4 5 1 3 3 3 1 2 2 1 3 2 4 4 4 3 4 1 7 0 9 6 3 1 4 8 7 1 9 6 3 1 2 1 1 2 1 1 6 0 10 3 9 2 6 1 2 3 3 1 3 1 1 3 3 2 2 1 8 0 10 2 1 1 6 4 8 5 3 1 2 3 3 3 1 1 1 3 1 5 3 1 2 3 4 1 9 0 6 5 1 1 7 1 8 1 2 1 3 3 1 3 3 2 1 6 0 7 2 7 1 4 1 1 2 2 1 1 1 1 3 1 8 0 9 5 2 4 4 6 2 3 9 1 3 1 2 3 2 3 1 3 2 3 5 3 3 6 1 7 0 8 4 1 1 4 9 9 2 1 1 2 1 1 1 1 1 1 8 0 8 2 8 3 1 1 9 1 7 2 1 1 1 1 3 3 1 1 5 0 6 4 5 1 2 4 9 1 2 1 2 2 1 5 3 3 2 4 5 5 7 2 3 1 3 7 2 5 5 3 4 1 7 0 6 3 5 7 1 1 4 2 2 2 1 2 3 2 1 8 0 6 6 1 1 5 8 3 1 2 2 3 1 1 1 3 1 7 0 7 1 2 5 9 1 6 6 1 1 3 3 1 2 1 2 3 2 5 3 7 1 8 0 7 5 1 4 8 3 6 3 3 1 1 1 2 2 1 1 1 7 0 10 7 1 2 8 1 7 8 4 4 1 1 2 1 1 2 3 1 1 6 0 10 1 8 5 1 8 9 7 8 7 3 1 2 3 1 1 1 3 1 3 1 2 3 5 3 7 1 5 0 6 5 5 1 3 1 3 2 3 1 3 3 1 9 0 7 5 3 1 5 5 3 1 1 2 1 3 3 2 1 1 1 1 5 0 11 1 9 3 6 7 7 9 6 6 4 9 3 1 3 3 2 2 2 4 4 4 2 3 3 7 1 9 0 9 8 3 6 7 1 6 9 5 1 1 3 3 3 3 2 1 1 3 1 5 0 7 1 5 8 5 6 5 4 1 2 2 3 1 1 7 0 11 1 2 2 1 6 8 8 4 1 5 5 1 3 1 1 3 1 1 4 2 1 4 2 5 3 3 5 1 5 0 11 1 9 8 1 1 4 6 7 2 6 5 1 3 1 2 1 1 5 0 11 8 7 7 1 9 3 1 1 2 4 9 2 2 1 3 1 1 6 0 7 8 4 4 6 9 3 1 3 3 1 3 1 1 1 5 4 1 1 7 1 6 6 3 5 4 3 4 1 8 0 6 9 1 2 6 8 8 3 1 2 3 2 1 1 3 1 5 0 7 1 6 7 4 4 6 9 2 3 2 1 1 1 9 0 9 8 9 1 4 3 9 4 2 4 2 3 1 3 2 3 2 3 1 2 5 5 2 3 4 1 7 0 9 1 1 2 4 9 2 6 3 1 1 2 1 3 1 3 3 1 8 0 10 4 9 9 3 4 5 2 1 1 8 3 1 3 2 3 1 1 2 1 6 0 11 1 7 8 8 4 8 1 5 4 8 4 2 2 2 1 2 1 4 2 4 1 3 7 1 6 0 11 2 4 1 6 9 7 1 8 8 5 7 1 3 2 1 1 2 1 6 0 8 3 2 9 3 6 7 1 1 2 1 3 2 1 1 1 6 0 6 1 1 6 4 3 5 1 1 1 2 2 3 2 5 5 3 3 2 1 3 7 1 8 0 8 8 1 5 8 4 9 7 1 1 1 3 1 3 2 3 1 1 7 0 9 7 9 3 2 1 3 1 5 9 3 1 3 3 1 3 2 1 6 0 11 9 9 1 5 8 6Line truncated
+2 -2
View File
@@ -1,4 +1,4 @@
fn main() { fn main() {
// aoc_2018::tasks::day06::task1(); aoc_2018::tasks::day08::both();
aoc_2018::tasks::day06::task2(); // aoc_2018::tasks::day08::task2();
} }
+1 -1
View File
@@ -1,5 +1,5 @@
use std::collections::HashSet; use std::collections::HashSet;
use utils; use crate::utils;
pub fn task1() { pub fn task1() {
let frequency: i32 = utils::read_file("input/day01.txt") let frequency: i32 = utils::read_file("input/day01.txt")
+1 -1
View File
@@ -1,6 +1,6 @@
use std::collections::HashMap; use std::collections::HashMap;
use std::collections::HashSet; use std::collections::HashSet;
use utils; use crate::utils;
pub fn task1() { pub fn task1() {
let input = utils::read_file("input/day02.txt"); let input = utils::read_file("input/day02.txt");
+1 -1
View File
@@ -1,6 +1,6 @@
use regex::Regex; use regex::Regex;
use std::collections::HashMap; use std::collections::HashMap;
use utils; use crate::utils;
#[derive(PartialEq)] #[derive(PartialEq)]
enum Use { enum Use {
+1 -1
View File
@@ -2,7 +2,7 @@ use chrono::prelude::*;
use chrono::Duration; use chrono::Duration;
use chrono::NaiveDateTime; use chrono::NaiveDateTime;
use std::collections::HashMap; use std::collections::HashMap;
use utils; use crate::utils;
enum Activity { enum Activity {
Starts(u32), Starts(u32),
+1 -1
View File
@@ -1,5 +1,5 @@
use std::time::Instant; use std::time::Instant;
use utils; use crate::utils;
pub fn task1() { pub fn task1() {
let mut input = utils::read_file("input/day05.txt"); let mut input = utils::read_file("input/day05.txt");
+1 -1
View File
@@ -1,4 +1,4 @@
use utils; use crate::utils;
pub fn task1() { pub fn task1() {
use self::Bla::*; use self::Bla::*;
+42
View File
@@ -0,0 +1,42 @@
use crate::utils;
use std::collections::{HashMap, HashSet};
pub fn task1() {
let input = utils::read_file("input/day07.txt");
let mut tasks: HashSet<char> = HashSet::new();
let dependencies: Vec<(char, char)> = input
.lines()
.map(|line| (line.chars().nth(5).unwrap(), line.chars().nth(36).unwrap()))
.collect();
let mut depends_on: HashMap<char, HashSet<char>> = HashMap::new();
for (a, b) in dependencies {
depends_on.entry(b).or_insert(HashSet::new()).insert(a);
tasks.insert(a);
tasks.insert(b);
}
let mut open: HashSet<char> = tasks
.iter()
.filter(|task| !depends_on.contains_key(task))
.map(|c| *c)
.collect();
let mut result = String::new();
while open.len() > 0 {
let next = open.iter().min().unwrap().clone();
open.remove(&next);
result.push(next);
let newly_open: HashSet<char> = depends_on
.iter()
.filter(|(_task, deps)| deps.iter().all(|dep| result.chars().any(|c| c == *dep)))
.map(|(task, _)| *task)
.collect();
open = open.union(&newly_open).map(|c| *c).collect();
for c in newly_open {
depends_on.remove(&c);
}
}
println!("{}", result);
}
+61
View File
@@ -0,0 +1,61 @@
use crate::utils;
pub fn both() {
let input: Vec<usize> = utils::read_file("input/day08.txt")
.split(" ")
.map(|x| x.parse().unwrap())
.collect();
let (tree, _) = Node::extract_from(&input);
println!("Metadata sum: {}", tree.metadata_sum());
println!("Task2 sum: {}", tree.task2());
}
struct Node {
metadata: Vec<usize>,
children: Vec<Node>,
}
impl Node {
fn extract_from(input: &[usize]) -> (Self, &[usize]) {
let mut rest_input = &input[2..];
let mut num_children: usize = input[0];
let num_meta: usize = input[1];
let mut children = Vec::new();
while num_children > 0 {
let (node, rest) = Node::extract_from(&rest_input);
children.push(node);
rest_input = rest;
num_children -= 1;
}
let metadata = rest_input[..num_meta].iter().map(|x| *x).collect();
(Node { metadata, children }, &rest_input[num_meta..])
}
fn metadata_sum(&self) -> usize {
self.metadata.iter().sum::<usize>()
+ self
.children
.iter()
.map(|child| {
let s: usize = child.metadata_sum().clone();
s
})
.sum::<usize>()
}
fn task2(&self) -> usize {
if self.children.len() > 0 {
self.metadata
.iter()
.map(|meta| match self.children.get(*meta - 1) {
Some(child) => child.task2(),
None => 0,
})
.sum()
} else {
self.metadata_sum()
}
}
}
+2
View File
@@ -4,3 +4,5 @@ pub mod day03;
pub mod day04; pub mod day04;
pub mod day05; pub mod day05;
pub mod day06; pub mod day06;
pub mod day07;
pub mod day08;