Day 5 part 1 glenng, recognize binary pattern.
This commit is contained in:
parent
89d59a6546
commit
59f67f1c64
@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user