summary refs log tree commit diff homepage
path: root/2017
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2017-12-24 10:59:42 -0500
committerJune McEnroe <june@causal.agency>2020-11-22 00:14:25 -0500
commitaef4230b15b5459f98e30f102fe9ac62f78f0b48 (patch)
tree23f729fe957ce844ff29ac3ff4cbae945b4cf3fe /2017
parentDay 14 (diff)
downloadaoc-aef4230b15b5459f98e30f102fe9ac62f78f0b48.tar.gz
aoc-aef4230b15b5459f98e30f102fe9ac62f78f0b48.zip
Day 15
Diffstat (limited to '2017')
-rw-r--r--2017/input/day15.txt2
-rw-r--r--2017/src/bin/day15.rs49
2 files changed, 51 insertions, 0 deletions
diff --git a/2017/input/day15.txt b/2017/input/day15.txt
new file mode 100644
index 0000000..fdc2fa8
--- /dev/null
+++ b/2017/input/day15.txt
@@ -0,0 +1,2 @@
+Generator A starts with 883
+Generator B starts with 879
\ No newline at end of file
diff --git a/2017/src/bin/day15.rs b/2017/src/bin/day15.rs
new file mode 100644
index 0000000..dbf041a
--- /dev/null
+++ b/2017/src/bin/day15.rs
@@ -0,0 +1,49 @@
+use std::io::{self, Read};
+
+struct GenA(u64);
+
+impl Iterator for GenA {
+    type Item = u64;
+
+    fn next(&mut self) -> Option<u64> {
+        self.0 = self.0.wrapping_mul(16807) % 2147483647;
+        Some(self.0)
+    }
+}
+
+struct GenB(u64);
+
+impl Iterator for GenB {
+    type Item = u64;
+
+    fn next(&mut self) -> Option<u64> {
+        self.0 = self.0.wrapping_mul(48271) % 2147483647;
+        Some(self.0)
+    }
+}
+
+fn judge(a: u64, b: u64) -> usize {
+    GenA(a).zip(GenB(b))
+        .take(40_000_000)
+        .filter(|&(a, b)| a & 0xFFFF == b & 0xFFFF)
+        .count()
+}
+
+fn solve1(input: &str) -> usize {
+    let mut iter = input.split_whitespace();
+    let a = iter.clone().nth(4).unwrap().parse().unwrap();
+    let b = iter.nth(9).unwrap().parse().unwrap();
+    judge(a, b)
+}
+
+fn main() {
+    let mut input = String::new();
+    io::stdin().read_to_string(&mut input).unwrap();
+
+    println!("Part 1: {}", solve1(input.trim()));
+}
+
+#[test]
+fn part1() {
+    assert_eq!(588, judge(65, 8921));
+}
an Hesse <mail@eworm.de> 2018-09-11ui-log: ban strcpy()Christian Hesse Git upstream bans strcpy() with commit: automatically ban strcpy() c8af66ab8ad7cd78557f0f9f5ef6a52fd46ee6dd Signed-off-by: Christian Hesse <mail@eworm.de> 2018-09-11parsing: ban sprintf()Christian Hesse Git upstream bans sprintf() with commit: banned.h: mark sprintf() as banned cc8fdaee1eeaf05d8dd55ff11f111b815f673c58 Signed-off-by: Christian Hesse <mail@eworm.de> 2018-09-11parsing: ban strncpy()Christian Hesse Git upstream bans strncpy() with commit: banned.h: mark strncpy() as banned e488b7aba743d23b830d239dcc33d9ca0745a9ad Signed-off-by: Christian Hesse <mail@eworm.de> 2018-08-28filters: generate anchor links from markdownChristian Hesse This makes the markdown filter generate anchor links for headings. Signed-off-by: Christian Hesse <mail@eworm.de> Tested-by: jean-christophe manciot <actionmystique@gmail.com> 2018-08-03Bump version.Jason A. Donenfeld Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> 2018-08-03clone: fix directory traversalJason A. Donenfeld This was introduced in the initial version of this code, way back when in 2008. $ curl http://127.0.0.1/cgit/repo/objects/?path=../../../../../../../../../etc/passwd root:x:0:0:root:/root:/bin/sh ... Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Reported-by: Jann Horn <jannh@google.com> 2018-08-03config: record repo.snapshot-prefix in the per-repo configKonstantin Ryabitsev