remove I/O from timed section
This commit is contained in:
parent
fb8ec81683
commit
ca360f7baa
@ -3,7 +3,7 @@ use color_eyre::eyre;
|
|||||||
use crate::lib::ParseLines;
|
use crate::lib::ParseLines;
|
||||||
|
|
||||||
|
|
||||||
fn run(data: &str) -> eyre::Result<()> {
|
pub fn run(data: &str) -> eyre::Result<(i32, i32)> {
|
||||||
let mut single_increases = 0;
|
let mut single_increases = 0;
|
||||||
let mut window_increases = 0;
|
let mut window_increases = 0;
|
||||||
let mut prev = (None, None, None);
|
let mut prev = (None, None, None);
|
||||||
@ -25,7 +25,5 @@ fn run(data: &str) -> eyre::Result<()> {
|
|||||||
prev = (prev.1, prev.2, Some(n));
|
prev = (prev.1, prev.2, Some(n));
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("One: {}", single_increases);
|
Ok((single_increases, window_increases))
|
||||||
println!("Two: {}", window_increases);
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
|
@ -74,13 +74,11 @@ fn part2(commands: &Vec<MoveCmd>) -> i32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn run(data: &str) -> eyre::Result<()> {
|
pub fn run(data: &str) -> eyre::Result<(i32, i32)> {
|
||||||
let mut commands = Vec::new();
|
let mut commands = Vec::new();
|
||||||
for res in data.parse_lines::<MoveCmd>() {
|
for res in data.parse_lines::<MoveCmd>() {
|
||||||
commands.push(res?);
|
commands.push(res?);
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("One: {}", part1(&commands));
|
Ok((part1(&commands), part2(&commands)))
|
||||||
println!("Two: {}", part2(&commands));
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
|
@ -57,13 +57,11 @@ fn part2(numbers: &Vec<u16>) -> u64 {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
pub fn run(data: &str) -> eyre::Result<()> {
|
pub fn run(data: &str) -> eyre::Result<(u64, u64)> {
|
||||||
let mut nums = Vec::new();
|
let mut nums = Vec::new();
|
||||||
for line in data.lines() {
|
for line in data.lines() {
|
||||||
nums.push(u16::from_str_radix(line, 2)?);
|
nums.push(u16::from_str_radix(line, 2)?);
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("One: {}", part1(&nums));
|
Ok((part1(&nums), part2(&nums)))
|
||||||
println!("Two: {}", part2(&nums));
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
@ -111,20 +111,21 @@ impl Board {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn score(&self) -> eyre::Result<usize> {
|
fn score(&self) -> eyre::Result<isize> {
|
||||||
let bingo_time = match self.bingo_time {
|
let bingo_time = match self.bingo_time {
|
||||||
Some(t) => t,
|
Some(t) => t,
|
||||||
None => return Err(eyre!("Cannot find the score of a non-winning board")),
|
None => return Err(eyre!("Cannot find the score of a non-winning board")),
|
||||||
};
|
};
|
||||||
let mut total = 0usize;
|
let mut total = 0;
|
||||||
for row in self.squares {
|
for row in self.squares {
|
||||||
for sq in row {
|
for sq in row {
|
||||||
if sq.draw_time.is_some() && sq.draw_time.unwrap() > bingo_time {
|
if sq.draw_time.is_some() && sq.draw_time.unwrap() > bingo_time {
|
||||||
total += sq.value as usize;
|
total += sq.value as isize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(total * self.bingo_value.unwrap() as usize)
|
let multiplier = self.bingo_value.unwrap() as isize;
|
||||||
|
Ok(total * multiplier)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,9 +191,8 @@ fn part1(boards: &[Board]) -> eyre::Result<Board> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn run(data: &str) -> eyre::Result<()> {
|
pub fn run(data: &str) -> eyre::Result<(isize, isize)> {
|
||||||
let boards = load(data)?;
|
let boards = load(data)?;
|
||||||
let winner = part1(&boards)?;
|
let winner = part1(&boards)?;
|
||||||
println!("One: {}", winner.score()?);
|
Ok((winner.score()?, 0))
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
|
@ -9,20 +9,26 @@ mod day4;
|
|||||||
|
|
||||||
fn main() -> eyre::Result<()> {
|
fn main() -> eyre::Result<()> {
|
||||||
let data = load("data/04.txt")?;
|
let data = load("data/04.txt")?;
|
||||||
|
|
||||||
let start = Instant::now();
|
let start = Instant::now();
|
||||||
day4::run(&data)?;
|
let (one, two) = day4::run(&data)?;
|
||||||
let (dur, unit) = format_ns(start.elapsed().as_nanos());
|
let (dur, unit) = format_ns(start.elapsed().as_nanos());
|
||||||
println!("Completed in {}{}", dur, unit);
|
|
||||||
|
let precision = 2.0 - dur.log10().floor();
|
||||||
|
println!(
|
||||||
|
"One: {0}\nTwo: {1}\nCompleted in {2:.4$}{3}",
|
||||||
|
one, two, dur, unit, precision as usize
|
||||||
|
);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn format_ns(ns: u128) -> (u128, &'static str) {
|
fn format_ns(ns: u128) -> (f64, &'static str) {
|
||||||
const UNITS: [&str; 4] = ["ns", "us", "ms", "s"];
|
const UNITS: [&str; 4] = ["ns", "us", "ms", "s"];
|
||||||
let mut display_n = ns;
|
let mut display_n = ns as f64; //
|
||||||
let mut unit_idx = 0;
|
let mut unit_idx = 0;
|
||||||
while display_n > 1000 && unit_idx < 4 {
|
while display_n > 1000.0 && unit_idx < 4 {
|
||||||
display_n /= 1000;
|
display_n /= 1000.0;
|
||||||
unit_idx += 1
|
unit_idx += 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user