2017/13
This commit is contained in:
4
2017/13/Cargo.lock
generated
Normal file
4
2017/13/Cargo.lock
generated
Normal file
@@ -0,0 +1,4 @@
|
||||
[[package]]
|
||||
name = "day-13"
|
||||
version = "0.1.0"
|
||||
|
||||
6
2017/13/Cargo.toml
Normal file
6
2017/13/Cargo.toml
Normal 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
43
2017/13/input.txt
Normal 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
67
2017/13/src/main.rs
Normal 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
4
2017/13/test.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
0: 3
|
||||
1: 2
|
||||
4: 4
|
||||
6: 4
|
||||
Reference in New Issue
Block a user