This commit is contained in:
2018-12-01 09:44:29 +01:00
parent 40eb43173e
commit 1ed2085a2c
5 changed files with 124 additions and 0 deletions

4
2017/13/Cargo.lock generated Normal file
View File

@@ -0,0 +1,4 @@
[[package]]
name = "day-13"
version = "0.1.0"

6
2017/13/Cargo.toml Normal file
View File

@@ -0,0 +1,6 @@
[package]
name = "day-13"
version = "0.1.0"
authors = ["Anders Olsson <anders.e.olsson@gmail.com>"]
[dependencies]

43
2017/13/input.txt Normal file
View File

@@ -0,0 +1,43 @@
0: 5
1: 2
2: 3
4: 4
6: 6
8: 4
10: 6
12: 10
14: 6
16: 8
18: 6
20: 9
22: 8
24: 8
26: 8
28: 12
30: 12
32: 8
34: 8
36: 12
38: 14
40: 12
42: 10
44: 14
46: 12
48: 12
50: 24
52: 14
54: 12
56: 12
58: 14
60: 12
62: 14
64: 12
66: 14
68: 14
72: 14
74: 14
80: 14
82: 14
86: 14
90: 18
92: 17

67
2017/13/src/main.rs Normal file
View File

@@ -0,0 +1,67 @@
use std::io::{self, BufRead};
#[derive(Debug)]
struct Layer {
depth: usize,
range: usize,
}
impl Layer {
fn new(depth: usize, range: usize) -> Layer {
Layer { depth, range }
}
fn is_scanner_at(&self, delta: usize, index: usize) -> bool {
let time = self.depth + delta;
let c = (self.range - 1) * 2;
time % c == index || time % c == (c - index)
}
fn severity(&self) -> usize {
self.depth * self.range
}
}
fn main() {
let stdin = io::stdin();
let firewall = stdin
.lock()
.lines()
.filter_map(Result::ok)
.map(|line| {
let digits = line
.split(": ")
.map(|digit| digit.parse::<usize>().expect("failed to parse digit"))
.collect::<Vec<_>>();
Layer::new(digits[0], digits[1])
}).collect::<Vec<_>>();
let mut severity = 0;
for layer in &firewall {
if layer.is_scanner_at(0, 0) {
severity += layer.severity();
}
}
println!("part.one={}", severity);
let mut delta = 0;
'iteration: loop {
for layer in &firewall {
if layer.is_scanner_at(delta, 0) {
delta += 1;
continue 'iteration;
}
}
break;
}
println!("part.two={}", delta);
}

4
2017/13/test.txt Normal file
View File

@@ -0,0 +1,4 @@
0: 3
1: 2
4: 4
6: 4