Day 5 part 1 glenng, recognize binary pattern.

This commit is contained in:
Bill Thiede 2020-12-05 10:36:47 -08:00
parent 89d59a6546
commit 59f67f1c64

View File

@ -105,46 +105,20 @@ fn solution1(seats: &[Seat]) -> u32 {
#[aoc(day5, part1, glenng)] #[aoc(day5, part1, glenng)]
fn solution1_glenng(input: &str) -> u32 { fn solution1_glenng(input: &str) -> u32 {
struct State {
r: u32,
r_size: u32,
c: u32,
c_size: u32,
}
input input
.split('\n') .split('\n')
.map(|s| { .map(|s| {
s.chars().fold( s.chars().fold(0, |s, c| match c {
State { 'F' | 'L' => s << 1,
r: 0, 'B' | 'R' => s << 1 | 1,
r_size: 128 / 2, _ => panic!(format!("unexpected character '{}'", c)),
c: 0, })
c_size: 8 / 2, })
}, .map(|s| {
|s, c| match c { let r = s >> 3;
'F' => State { let c = s & 0b111;
r_size: s.r_size / 2, r * 8 + c
..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)),
},
)
}) })
.map(|s| s.r * 8 + s.c)
.max() .max()
.unwrap() .unwrap()
} }