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