49 lines
1.1 KiB
Rust
49 lines
1.1 KiB
Rust
use std::fs;
|
|
use std::io;
|
|
use std::time::Instant;
|
|
|
|
// Right = up/increase
|
|
// Left = down/decrease
|
|
fn main() -> io::Result<()>
|
|
{
|
|
let start = Instant::now();
|
|
let file_contents: String = fs::read_to_string("large.txt")?;
|
|
let lines: Vec<&str> = file_contents
|
|
.split("\n")
|
|
.collect();
|
|
|
|
let mut position: i32 = 50;
|
|
let mut total1: i32 = 0;
|
|
let mut total2: i32 = 0;
|
|
|
|
println!("The dial starts by pointing at {position}");
|
|
|
|
for index in 0..&lines.len()-1
|
|
{
|
|
let movement = &lines[index][0..1];
|
|
let mut number: i32 = lines[index][1..lines[index].len()].parse().unwrap();
|
|
|
|
if movement == "L" {
|
|
number = -number
|
|
};
|
|
if number < 0 {
|
|
total2 += (100 - position - number) / 100 - (position == 0) as i32
|
|
}
|
|
else {
|
|
total2 += (number+position) / 100
|
|
};
|
|
position = (position + number).rem_euclid(100);
|
|
if position == 0 {
|
|
total1 += 1;
|
|
}
|
|
}
|
|
|
|
let end = start.elapsed();
|
|
println!("part1: {total1}");
|
|
println!("part2: {total2}");
|
|
println!("Took: {:.2?}",end);
|
|
|
|
|
|
Ok(())
|
|
}
|