summaryrefslogtreecommitdiff
path: root/src/bin/day1.rs
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2022-08-27 20:43:03 +0200
committerReiner Herrmann <reiner@reiner-h.de>2022-08-27 20:43:03 +0200
commit95ed2adcaddc583dbf4274618d647fcb462e1a4b (patch)
tree01507855d61748d2902b68c8529258b67b9230bc /src/bin/day1.rs
parentdbfce1313881b089d2d6a991f462e1abb49678bb (diff)
day1
Diffstat (limited to 'src/bin/day1.rs')
-rw-r--r--src/bin/day1.rs58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/bin/day1.rs b/src/bin/day1.rs
new file mode 100644
index 0000000..436016e
--- /dev/null
+++ b/src/bin/day1.rs
@@ -0,0 +1,58 @@
+fn main() {
+ let input = advent::read_file(1);
+ println!("1a: {}", find_floor(&input));
+ println!("1b: {}", find_basement(&input));
+}
+
+fn find_floor(input: &str) -> i32 {
+ let mut pos = 0;
+ for c in input.chars() {
+ match c {
+ '(' => pos += 1,
+ ')' => pos -= 1,
+ _ => break,
+ }
+ }
+ pos
+}
+
+fn find_basement(input: &str) -> i32 {
+ let mut count = 1;
+ let mut pos = 0;
+ for c in input.chars() {
+ match c {
+ '(' => pos += 1,
+ ')' => pos -= 1,
+ _ => break,
+ }
+ if pos < 0 {
+ return count;
+ }
+ count += 1;
+ }
+ panic!("never reached basement");
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_floor() {
+ assert_eq!(find_floor("(())"), 0);
+ assert_eq!(find_floor("()()"), 0);
+ assert_eq!(find_floor("((("), 3);
+ assert_eq!(find_floor("(()(()("), 3);
+ assert_eq!(find_floor("))((((("), 3);
+ assert_eq!(find_floor("())"), -1);
+ assert_eq!(find_floor("))("), -1);
+ assert_eq!(find_floor(")))"), -3);
+ assert_eq!(find_floor(")())())"), -3);
+ }
+
+ #[test]
+ fn test_basement() {
+ assert_eq!(find_basement(")"), 1);
+ assert_eq!(find_basement("()())"), 5);
+ }
+}