- commit
- 61c9984bc92b31279ef8b1f891f205c579b7f29c
- parent
- f975cb42d3b3c86c9b38d1392279829210be58a5
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2022-12-07 18:03
combine into a single file
Diffstat
R | 2022/01/part1.rs -> 2022/01/solution.rs | 4 | ++-- |
D | 2022/02/part2.rs | 26 | -------------------------- |
R | 2022/02/part1.rs -> 2022/02/solution.rs | 54 | +++++++++++++++++++++++++++++++++++++++--------------- |
D | 2022/03/part1.rs | 31 | ------------------------------- |
R | 2022/03/part2.rs -> 2022/03/solution.rs | 26 | ++++++++++++++++++++++---- |
D | 2022/04/part2.rs | 31 | ------------------------------- |
R | 2022/04/part1.rs -> 2022/04/solution.rs | 22 | ++++++++++++++++++++-- |
D | 2022/05/part1.rs | 43 | ------------------------------------------- |
R | 2022/05/part2.rs -> 2022/05/solution.rs | 32 | +++++++++++++++++++++++--------- |
D | 2022/06/part2.rs | 21 | --------------------- |
R | 2022/06/part1.rs -> 2022/06/solution.rs | 9 | +++++++-- |
R | 2022/07/part1.rs -> 2022/07/solution.rs | 4 | ++-- |
12 files changed, 115 insertions, 188 deletions
diff --git a/2022/01/part1.rs b/2022/01/solution.rs
@@ -20,8 +20,8 @@ fn main() { 20 20 v.sort(); 21 21 22 22 let last = v.last().unwrap();23 -1 print!("{}\n", last);-1 23 println!("part1: {}", last); 24 24 25 25 let sum: i32 = v.iter().rev().take(3).sum();26 -1 print!("{}\n", sum);-1 26 println!("part2: {}", sum); 27 27 }
diff --git a/2022/02/part2.rs b/2022/02/part2.rs
@@ -1,26 +0,0 @@1 -1 #[path = "../lib.rs"] mod lib;2 -13 -1 fn main() {4 -1 let mut score = 0;5 -16 -1 for line in lib::iter_input() {7 -1 let opponent = match line.chars().nth(0) {8 -1 Some('A') => 0,9 -1 Some('B') => 1,10 -1 Some('C') => 2,11 -1 _ => unreachable!(),12 -1 };13 -1 let match_score = match line.chars().nth(2) {14 -1 Some('X') => 0,15 -1 Some('Y') => 1,16 -1 Some('Z') => 2,17 -1 _ => unreachable!(),18 -1 };19 -120 -1 let own = (2 + match_score + opponent) % 3;21 -122 -1 score += (own + 1) + (match_score * 3);23 -1 }24 -125 -1 println!("{}", score);26 -1 }
diff --git a/2022/02/part1.rs b/2022/02/solution.rs
@@ -1,26 +1,50 @@ 1 1 #[path = "../lib.rs"] mod lib; 2 23 -1 fn main() {-1 3 fn parse_abc(c: Option<char>) -> u64 { -1 4 return match c { -1 5 Some('A') => 0, -1 6 Some('B') => 1, -1 7 Some('C') => 2, -1 8 _ => unreachable!(), -1 9 }; -1 10 } -1 11 -1 12 fn parse_xyz(c: Option<char>) -> u64 { -1 13 return match c { -1 14 Some('X') => 0, -1 15 Some('Y') => 1, -1 16 Some('Z') => 2, -1 17 _ => unreachable!(), -1 18 }; -1 19 } -1 20 -1 21 fn part1() -> u64 { 4 22 let mut score = 0; 5 23 6 24 for line in lib::iter_input() {7 -1 let opponent = match line.chars().nth(0) {8 -1 Some('A') => 0,9 -1 Some('B') => 1,10 -1 Some('C') => 2,11 -1 _ => unreachable!(),12 -1 };13 -1 let own = match line.chars().nth(2) {14 -1 Some('X') => 0,15 -1 Some('Y') => 1,16 -1 Some('Z') => 2,17 -1 _ => unreachable!(),18 -1 };19 -1-1 25 let opponent = parse_abc(line.chars().nth(0)); -1 26 let own = parse_xyz(line.chars().nth(2)); 20 27 let match_score = (4 + own - opponent) % 3; -1 28 score += (own + 1) + (match_score * 3); -1 29 } 21 30 -1 31 return score; -1 32 } -1 33 -1 34 fn part2() -> u64 { -1 35 let mut score = 0; -1 36 -1 37 for line in lib::iter_input() { -1 38 let opponent = parse_abc(line.chars().nth(0)); -1 39 let match_score = parse_xyz(line.chars().nth(2)); -1 40 let own = (2 + match_score + opponent) % 3; 22 41 score += (own + 1) + (match_score * 3); 23 42 } 24 4325 -1 println!("{}", score);-1 44 return score; -1 45 } -1 46 -1 47 fn main() { -1 48 println!("part1: {}", part1()); -1 49 println!("part2: {}", part2()); 26 50 }
diff --git a/2022/03/part1.rs b/2022/03/part1.rs
@@ -1,31 +0,0 @@1 -1 #[path = "../lib.rs"] mod lib;2 -13 -1 fn intersect(vec: Vec<String>) -> Option<u8> {4 -1 let base = vec.get(0)?;5 -1 for c in base.chars() {6 -1 if vec[1..].iter().all(|s| s.contains(c)) {7 -1 return Some(c as u8);8 -1 }9 -1 }10 -1 return None;11 -1 }12 -113 -1 fn byte_to_priority(byte: u8) -> u8 {14 -1 if byte >= b'a' {15 -1 return byte - b'a' + 1;16 -1 } else {17 -1 return byte - b'A' + 27;18 -1 }19 -1 }20 -121 -1 fn main() {22 -1 let mut score: u32 = 0;23 -124 -1 for line in lib::iter_input() {25 -1 let (head, tail) = line.split_at(line.len() / 2);26 -1 let common = intersect(vec![head, tail]).unwrap();27 -1 score += byte_to_priority(common) as u32;28 -1 }29 -130 -1 println!("{}", score);31 -1 }
diff --git a/2022/03/part2.rs b/2022/03/solution.rs
@@ -18,18 +18,36 @@ fn byte_to_priority(byte: u8) -> u8 { 18 18 } 19 19 } 20 2021 -1 fn main() {22 -1 let mut score: u32 = 0;-1 21 fn part1() -> u64 { -1 22 let mut score = 0; -1 23 -1 24 for line in lib::iter_input() { -1 25 let (head, tail) = line.split_at(line.len() / 2); -1 26 let vec = vec![head.to_string(), tail.to_string()]; -1 27 let common = intersect(vec).unwrap(); -1 28 score += byte_to_priority(common) as u64; -1 29 } -1 30 -1 31 return score; -1 32 } -1 33 -1 34 fn part2() -> u64 { -1 35 let mut score: u64 = 0; 23 36 let mut vec = vec![]; 24 37 25 38 for line in lib::iter_input() { 26 39 vec.push(line); 27 40 if vec.len() == 3 { 28 41 let common = intersect(vec).unwrap();29 -1 score += byte_to_priority(common) as u32;-1 42 score += byte_to_priority(common) as u64; 30 43 vec = vec![]; 31 44 } 32 45 } 33 4634 -1 println!("{}", score);-1 47 return score; -1 48 } -1 49 -1 50 fn main() { -1 51 println!("part1: {}", part1()); -1 52 println!("part2: {}", part2()); 35 53 }
diff --git a/2022/04/part2.rs b/2022/04/part2.rs
@@ -1,31 +0,0 @@1 -1 #[path = "../lib.rs"] mod lib;2 -13 -1 fn split_once(s: &str, sep: char) -> Option<(&str, &str)> {4 -1 let x = s.find(sep)?;5 -1 return Some((&s[..x], &s[x+1..]));6 -1 }7 -18 -1 fn parse(line: String) -> Option<(u8, u8, u8, u8)> {9 -1 let (a, b) = split_once(&line, ',')?;10 -1 let (a1, a2) = split_once(a, '-')?;11 -1 let (b1, b2) = split_once(b, '-')?;12 -1 return Some((13 -1 a1.parse::<u8>().ok()?,14 -1 a2.parse::<u8>().ok()?,15 -1 b1.parse::<u8>().ok()?,16 -1 b2.parse::<u8>().ok()?,17 -1 ));18 -1 }19 -120 -1 fn main() {21 -1 let mut count = 0;22 -123 -1 for line in lib::iter_input() {24 -1 let (a1, a2, b1, b2) = parse(line).unwrap();25 -1 if a1 <= b2 && a2 >= b1 {26 -1 count += 1;27 -1 }28 -1 }29 -130 -1 println!("{}", count);31 -1 }
diff --git a/2022/04/part1.rs b/2022/04/solution.rs
@@ -17,7 +17,7 @@ fn parse(line: String) -> Option<(u8, u8, u8, u8)> { 17 17 )); 18 18 } 19 1920 -1 fn main() {-1 20 fn part1() -> u64 { 21 21 let mut count = 0; 22 22 23 23 for line in lib::iter_input() { @@ -27,5 +27,23 @@ fn main() { 27 27 } 28 28 } 29 2930 -1 println!("{}", count);-1 30 return count; -1 31 } -1 32 -1 33 fn part2() -> u64 { -1 34 let mut count = 0; -1 35 -1 36 for line in lib::iter_input() { -1 37 let (a1, a2, b1, b2) = parse(line).unwrap(); -1 38 if a1 <= b2 && a2 >= b1 { -1 39 count += 1; -1 40 } -1 41 } -1 42 -1 43 return count; -1 44 } -1 45 -1 46 fn main() { -1 47 println!("part1: {}", part1()); -1 48 println!("part2: {}", part2()); 31 49 }
diff --git a/2022/05/part1.rs b/2022/05/part1.rs
@@ -1,43 +0,0 @@1 -1 #[path = "../lib.rs"] mod lib;2 -13 -1 fn get_int(line: &str, i: usize) -> Option<usize> {4 -1 let s = line.split(' ').nth(i)?;5 -1 return s.parse::<usize>().ok();6 -1 }7 -18 -1 fn main() {9 -1 let mut stacks: Vec<Vec<char>> = vec![];10 -1 let mut init = false;11 -112 -1 for line in lib::iter_input() {13 -1 if !init {14 -1 if line.len() == 0 {15 -1 init = true;16 -1 } else {17 -1 while stacks.len() * 4 < line.len() + 1 {18 -1 stacks.push(vec![]);19 -1 }20 -1 for i in 0..stacks.len() {21 -1 let c = line.chars().nth(i * 4 + 1).unwrap();22 -1 if c != ' ' {23 -1 stacks[i].insert(0, c);24 -1 }25 -1 }26 -1 }27 -1 } else {28 -1 let k = get_int(&line, 1).unwrap();29 -1 let a = get_int(&line, 3).unwrap();30 -1 let b = get_int(&line, 5).unwrap();31 -132 -1 for _ in 0..k {33 -1 let c = stacks[a - 1].pop().unwrap();34 -1 stacks[b - 1].push(c);35 -1 }36 -1 }37 -1 }38 -139 -1 for stack in stacks {40 -1 print!("{}", stack.last().unwrap());41 -1 }42 -1 print!("\n");43 -1 }
diff --git a/2022/05/part2.rs b/2022/05/solution.rs
@@ -5,9 +5,8 @@ fn get_int(line: &str, i: usize) -> Option<usize> { 5 5 return s.parse::<usize>().ok(); 6 6 } 7 78 -1 fn main() {-1 8 fn run(label: &str, reverse: bool) { 9 9 let mut stacks: Vec<Vec<char>> = vec![];10 -1 let mut tmp = vec![];11 10 let mut init = false; 12 11 13 12 for line in lib::iter_input() { @@ -30,20 +29,35 @@ fn main() { 30 29 let a = get_int(&line, 3).unwrap(); 31 30 let b = get_int(&line, 5).unwrap(); 32 3133 -1 for _ in 0..k {34 -1 let c = stacks[a - 1].pop().unwrap();35 -1 tmp.push(c);36 -1 }-1 32 if reverse { -1 33 for _ in 0..k { -1 34 let c = stacks[a - 1].pop().unwrap(); -1 35 stacks[b - 1].push(c); -1 36 } -1 37 } else { -1 38 let mut tmp = vec![]; -1 39 -1 40 for _ in 0..k { -1 41 let c = stacks[a - 1].pop().unwrap(); -1 42 tmp.push(c); -1 43 } 37 4438 -1 while tmp.len() > 0 {39 -1 let c = tmp.pop().unwrap();40 -1 stacks[b - 1].push(c);-1 45 while tmp.len() > 0 { -1 46 let c = tmp.pop().unwrap(); -1 47 stacks[b - 1].push(c); -1 48 } 41 49 } 42 50 } 43 51 } 44 52 -1 53 print!("{}: ", label); 45 54 for stack in stacks { 46 55 print!("{}", stack.last().unwrap()); 47 56 } 48 57 print!("\n"); 49 58 } -1 59 -1 60 fn main() { -1 61 run("part1", true); -1 62 run("part2", false); -1 63 }
diff --git a/2022/06/part2.rs b/2022/06/part2.rs
@@ -1,21 +0,0 @@1 -1 #[path = "../lib.rs"] mod lib;2 -13 -1 fn get_start(chars: &Vec<char>, len: usize) -> Option<usize> {4 -1 for i in 0..chars.len() {5 -1 let max = chars.len().min(i + len);6 -1 let has_repeats = (i..max).any(|a| {7 -1 return ((a + 1)..max).any(|b| chars[a] == chars[b]);8 -1 });9 -1 if !has_repeats {10 -1 return Some(i + len);11 -1 }12 -1 }13 -1 return None14 -1 }15 -116 -1 fn main() {17 -1 for line in lib::iter_input() {18 -1 let chars = line.chars().collect();19 -1 println!("{}", get_start(&chars, 14).unwrap());20 -1 }21 -1 }
diff --git a/2022/06/part1.rs b/2022/06/solution.rs
@@ -13,9 +13,14 @@ fn get_start(chars: &Vec<char>, len: usize) -> Option<usize> { 13 13 return None 14 14 } 15 1516 -1 fn main() {-1 16 fn run(label: &str, len: usize) { 17 17 for line in lib::iter_input() { 18 18 let chars = line.chars().collect();19 -1 println!("{}", get_start(&chars, 4).unwrap());-1 19 println!("{}: {}", label, get_start(&chars, len).unwrap()); 20 20 } 21 21 } -1 22 -1 23 fn main() { -1 24 run("part1", 4); -1 25 run("part1", 14); -1 26 }
diff --git a/2022/07/part1.rs b/2022/07/solution.rs
@@ -32,6 +32,6 @@ fn main() { 32 32 33 33 let free = 70000000 - dirs[""]; 34 3435 -1 println!("{}", dirs.values().filter(|x| **x <= 100000).sum::<u64>());36 -1 println!("{}", dirs.values().filter(|x| free + **x >= 30000000).min().unwrap());-1 35 println!("part1: {}", dirs.values().filter(|x| **x <= 100000).sum::<u64>()); -1 36 println!("part2: {}", dirs.values().filter(|x| free + **x >= 30000000).min().unwrap()); 37 37 }