summary refs log tree commit diff homepage
path: root/2017/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2017/src/bin/day13.rs68
1 files changed, 68 insertions, 0 deletions
diff --git a/2017/src/bin/day13.rs b/2017/src/bin/day13.rs
new file mode 100644
index 0000000..360e266
--- /dev/null
+++ b/2017/src/bin/day13.rs
@@ -0,0 +1,68 @@
+use std::io::{self, Read};
+
+#[derive(Debug, Clone, Copy)]
+struct Layer {
+    range: i32,
+    scanner: i32,
+    direction: i32,
+}
+
+impl Layer {
+    fn new(range: i32) -> Self {
+        Layer { range, scanner: 0, direction: 1 }
+    }
+
+    fn step(&mut self) {
+        if self.scanner == 0 {
+            self.direction = 1;
+        } else if self.scanner == self.range - 1 {
+            self.direction = -1;
+        }
+        self.scanner += self.direction;
+    }
+}
+
+fn solve1(input: &str) -> usize {
+    let mut layers = vec![];
+    for line in input.lines() {
+        let mut iter = line.split(": ");
+        let index: usize = iter.next().unwrap().parse().unwrap();
+        let range = iter.next().unwrap().parse().unwrap();
+        layers.resize(index + 1, None);
+        layers[index] = Some(Layer::new(range));
+    }
+
+    let mut severity = 0;
+    for i in 0..layers.len() {
+        if let Some(ref layer) = layers[i] {
+            if layer.scanner == 0 {
+                severity += i * layer.range as usize;
+            }
+        }
+
+        for layer in &mut layers {
+            layer.as_mut().map(Layer::step);
+        }
+    }
+
+    severity
+}
+
+fn main() {
+    let mut input = String::new();
+    io::stdin().read_to_string(&mut input).unwrap();
+
+    println!("Part 1: {}", solve1(&input));
+}
+
+#[test]
+fn part1() {
+    assert_eq!(24, solve1(
+"\
+0: 3
+1: 2
+4: 4
+6: 4
+"
+    ));
+}
n title='2024-09-24 10:13:27 -0400'>2024-09-24Add photos from September 12June McEnroe 2024-09-24Add photos from September 7June McEnroe 2024-09-24Allow not having descriptionsJune McEnroe I'm sorry, I can't keep writing descriptions. It makes posting photos take too long, I often don't know the words for what I'm looking at, and a good description is an entirely different work of art than the photo I took, and I'm just a photographer. It's visual art. 2024-09-23Automatically select the last used lens for a bodyJune McEnroe 2024-09-19Add photos from September 5June McEnroe Had to prefix the folder number onto these file names manually because they must have come out of a different scanner or something. 2024-09-15Add some more film stocks to the listJune McEnroe 2024-09-13Add photos from September 2June McEnroe 2024-09-13Add Fomapan 200 to films listJune McEnroe 2024-09-10Add August 29 picnic photosJune McEnroe 2024-09-08Apply some bold to trips renderingJune McEnroe This seems easier to visually scan. The only other thing I'd like is a nicer date rendering but JavaScript is useless for that. 2024-09-08Render trips hopefully more efficientlyJune McEnroe 2024-09-08Allow removing bodies and lensesJune McEnroe 2024-09-08Limit body width so it looks less silly on desktopJune McEnroe 2024-09-07Handle no film being loadedJune McEnroe 2024-09-07Fancy up the text a littleJune McEnroe