add day03 part1
This commit is contained in:
parent
1e95ecc760
commit
1618d5874f
3 changed files with 1069 additions and 0 deletions
|
@ -18,3 +18,7 @@ path = "src/01.rs"
|
|||
[[bin]]
|
||||
name = "2"
|
||||
path = "src/02.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "3"
|
||||
path = "src/03.rs"
|
||||
|
|
65
src/03.rs
Normal file
65
src/03.rs
Normal file
|
@ -0,0 +1,65 @@
|
|||
use std::iter::repeat;
|
||||
|
||||
static INPUT: &str = include_str!("03.txt");
|
||||
|
||||
fn main() {
|
||||
part1(INPUT);
|
||||
}
|
||||
|
||||
fn part1(input: &str) -> u32 {
|
||||
let len = input
|
||||
.lines()
|
||||
.next()
|
||||
.expect("must have at least one line")
|
||||
.len();
|
||||
|
||||
let mut zeros: Vec<u32> = repeat(0).take(len).collect();
|
||||
let mut ones: Vec<u32> = repeat(0).take(len).collect();
|
||||
input.lines().for_each(|line| {
|
||||
line.chars().enumerate().for_each(|(n, c)| match c {
|
||||
'0' => zeros[n] += 1,
|
||||
'1' => ones[n] += 1,
|
||||
_ => unreachable!("invalid input"),
|
||||
});
|
||||
});
|
||||
|
||||
let gamma = ones.iter().zip(&zeros).fold(
|
||||
0,
|
||||
|acc, (a, b)| if a > b { (acc << 1) + 1 } else { acc << 1 },
|
||||
);
|
||||
let mask = (0..len).fold(0, |mask, _| (mask << 1) + 1);
|
||||
let epsilon = !gamma & mask;
|
||||
|
||||
let result = gamma * epsilon;
|
||||
|
||||
println!("zeros: {:?}", zeros);
|
||||
println!("ones: {:?}", ones);
|
||||
println!("gamma: {}, epsilon: {:x}", gamma, epsilon);
|
||||
println!("result: {}", result);
|
||||
return result;
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
#[test]
|
||||
fn part1() {
|
||||
let result = super::part1(
|
||||
"
|
||||
00100
|
||||
11110
|
||||
10110
|
||||
10111
|
||||
10101
|
||||
01111
|
||||
00111
|
||||
11100
|
||||
10000
|
||||
11001
|
||||
00010
|
||||
01010
|
||||
"
|
||||
.trim(),
|
||||
);
|
||||
assert_eq!(result, 198);
|
||||
}
|
||||
}
|
1000
src/03.txt
Normal file
1000
src/03.txt
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue