From 59f67f1c645f0618a0b229edebfb7e13d107f13f Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Sat, 5 Dec 2020 10:36:47 -0800 Subject: [PATCH] Day 5 part 1 glenng, recognize binary pattern. --- 2020/src/day5.rs | 46 ++++++++++------------------------------------ 1 file changed, 10 insertions(+), 36 deletions(-) diff --git a/2020/src/day5.rs b/2020/src/day5.rs index 00b1d6a..f388207 100644 --- a/2020/src/day5.rs +++ b/2020/src/day5.rs @@ -105,46 +105,20 @@ fn solution1(seats: &[Seat]) -> u32 { #[aoc(day5, part1, glenng)] fn solution1_glenng(input: &str) -> u32 { - struct State { - r: u32, - r_size: u32, - c: u32, - c_size: u32, - } input .split('\n') .map(|s| { - s.chars().fold( - State { - r: 0, - r_size: 128 / 2, - c: 0, - c_size: 8 / 2, - }, - |s, c| match c { - 'F' => State { - r_size: s.r_size / 2, - ..s - }, - 'B' => State { - r: s.r + s.r_size, - r_size: s.r_size / 2, - ..s - }, - 'L' => State { - c_size: s.c_size / 2, - ..s - }, - 'R' => State { - c: s.c + s.c_size, - c_size: s.c_size / 2, - ..s - }, - _ => panic!(format!("unexpected character '{}'", c)), - }, - ) + s.chars().fold(0, |s, c| match c { + 'F' | 'L' => s << 1, + 'B' | 'R' => s << 1 | 1, + _ => panic!(format!("unexpected character '{}'", c)), + }) + }) + .map(|s| { + let r = s >> 3; + let c = s & 0b111; + r * 8 + c }) - .map(|s| s.r * 8 + s.c) .max() .unwrap() }