Compare commits
4 Commits
5ab8409b5b
...
d84e3bff27
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d84e3bff27 | ||
|
|
51418b709e | ||
|
|
4946263a37 | ||
|
|
cd16a42821 |
@@ -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
input/day07.txt
Normal file
101
input/day07.txt
Normal 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
input/day08.txt
Normal file
1
input/day08.txt
Normal file
File diff suppressed because one or more lines are too long
@@ -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,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,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,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 {
|
||||||
|
|||||||
@@ -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,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,4 +1,4 @@
|
|||||||
use utils;
|
use crate::utils;
|
||||||
|
|
||||||
pub fn task1() {
|
pub fn task1() {
|
||||||
use self::Bla::*;
|
use self::Bla::*;
|
||||||
|
|||||||
42
src/tasks/day07.rs
Normal file
42
src/tasks/day07.rs
Normal 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
src/tasks/day08.rs
Normal file
61
src/tasks/day08.rs
Normal 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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user