Quest 8: The Art of Connection
- Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
- You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL
Link to participate: https://everybody.codes/


Rust
pub fn solve_part_1(input: &str) -> String { let numbers: Vec<i32> = input.split(",").map(|x| x.parse().unwrap()).collect(); let mut count = 0; for i in 1..numbers.len() { if numbers[i].abs_diff(numbers[i - 1]) == 16 { count += 1; } } count.to_string() } pub fn solve_part_2(input: &str) -> String { let numbers: Vec<i32> = input.split(",").map(|x| x.parse().unwrap()).collect(); let mut lines: Vec<(i32, i32)> = vec![]; for i in 1..numbers.len() { let (a, b) = (numbers[i - 1], numbers[i]); if a > b { lines.push((b, a)); } else { lines.push((a, b)); } } let mut knots = 0; for i in 0..lines.len() { for j in 0..i { let (a, b) = lines[i]; let (c, d) = lines[j]; if a == c || a == d || b == c || b == d { continue; } let c_inside = c > a && c < b; let d_inside = d > a && d < b; if c_inside != d_inside { knots += 1; } } } knots.to_string() } pub fn solve_part_3(input: &str) -> String { let numbers: Vec<i32> = input.split(",").map(|x| x.parse().unwrap()).collect(); let mut lines: Vec<(i32, i32)> = vec![]; for i in 1..numbers.len() { let (a, b) = (numbers[i - 1], numbers[i]); if a > b { lines.push((b, a)); } else { lines.push((a, b)); } } let mut best_cut_threads = i64::MIN; for d in 1..=256 { for c in 1..d { let mut cut_threads = 0; for (a, b) in lines.iter().copied() { if a == c || a == d || b == c || b == d { if a == c && b == d { cut_threads += 1; } continue; } let c_inside = c > a && c < b; let d_inside = d > a && d < b; if c_inside != d_inside { cut_threads += 1; } } if cut_threads > best_cut_threads { best_cut_threads = cut_threads; } } } best_cut_threads.to_string() }