1
0
Fork 0

Added day 2 pt 2

This commit is contained in:
Ishan Jain 2021-12-02 10:48:04 +05:30
parent f8ce19bf3c
commit f11678a866
1 changed files with 29 additions and 12 deletions

View File

@ -11,30 +11,45 @@ enum Moves {
fn cmds() -> impl Iterator<Item = Moves> {
INPUT.lines().filter(|&x| !x.is_empty()).map(|x| {
let x: Vec<&str> = x.split_ascii_whitespace().collect();
let mut x = x.split_ascii_whitespace();
match x[0] {
"forward" => Moves::Forward(x[1].parse::<i32>().unwrap()),
"down" => Moves::Down(x[1].parse::<i32>().unwrap()),
"up" => Moves::Up(x[1].parse::<i32>().unwrap()),
let cmd = x.next();
let val = x.next().map(|x| x.parse::<i32>()).unwrap().unwrap();
match cmd {
Some("forward") => Moves::Forward(val),
Some("down") => Moves::Down(val),
Some("up") => Moves::Up(val),
_ => unreachable!(),
}
})
}
struct Ship {
aim: i32,
vert_pos: i32,
hor_pos: i32,
}
fn solution(moves: impl Iterator<Item = Moves>) -> i32 {
let mut vertical = 0;
let mut horizontal = 0;
let mut ship = Ship {
aim: 0,
hor_pos: 0,
vert_pos: 0,
};
for mmove in moves {
match mmove {
Moves::Forward(v) => horizontal += v,
Moves::Down(v) => vertical += v,
Moves::Up(v) => vertical -= v,
Moves::Forward(v) => {
ship.hor_pos += v;
ship.vert_pos += ship.aim * v;
}
Moves::Down(v) => ship.aim += v,
Moves::Up(v) => ship.aim -= v,
}
}
vertical * horizontal
ship.hor_pos * ship.vert_pos
}
fn main() {
@ -46,6 +61,8 @@ fn main() {
#[bench]
fn solution_bench(b: &mut test::Bencher) {
b.iter(|| {
// Not ideal since we want to benchmark the function
// _excluding_ the time it takes to go through the input
let moves = cmds();
let v = solution(moves);
test::black_box(v);
@ -54,5 +71,5 @@ fn solution_bench(b: &mut test::Bencher) {
#[test]
fn solution_test() {
assert_eq!(solution(cmds()), 1429);
assert_eq!(solution(cmds()), 1463827010);
}