Skip to content

Commit 379274e

Browse files
committed
Time execution
1 parent 6c585c7 commit 379274e

File tree

12 files changed

+132
-105
lines changed

12 files changed

+132
-105
lines changed

src/day01.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
use std::collections::HashMap;
2-
use std::fs;
32
use std::iter::zip;
43

5-
pub fn day01(input_path: String) {
6-
let input: String = fs::read_to_string(input_path).unwrap();
4+
pub fn day01(input: &str) -> (usize, usize) {
75
let (mut left, mut right) = parse_input(&input);
86

97
left.sort();
108
right.sort();
119

12-
println!("Part 1: {}", part1(&left, &right));
13-
println!("Part 2: {}", part2(&left, &right));
10+
(part1(&left, &right) as usize, part2(&left, &right) as usize)
1411
}
1512

1613
fn parse_input(input: &str) -> (Vec<u32>, Vec<u32>) {

src/day02.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
use std::collections::{HashMap, HashSet};
2-
use std::fs;
32
use std::hash::Hash;
43

5-
pub fn day02(input_path: String) {
6-
let content = fs::read_to_string(input_path).unwrap();
7-
let input = parse_input(&content);
8-
9-
println!("Part 1 {}", part1(&input));
10-
println!("Part 2 {}", part2(&input));
4+
pub fn day02(input: &str) -> (usize, usize) {
5+
let input = parse_input(input);
6+
(part1(&input), part2(&input))
117
}
128

139
fn parse_input(input: &str) -> Vec<Vec<i32>> {

src/day03.rs

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
1-
use std::fs;
2-
3-
pub fn day03(input_path: String) {
4-
let content = fs::read_to_string(input_path).unwrap();
5-
6-
println!(
7-
"{:?}",
8-
parse_muls(&content).iter().map(|(a, b)| a * b).sum::<u32>()
9-
);
1+
pub fn day03(input: &str) -> (usize, usize) {
2+
(
3+
parse_muls(&input, drop_until_part1)
4+
.iter()
5+
.map(|(a, b)| a * b)
6+
.sum::<u32>() as usize,
7+
parse_muls(&input, drop_until_part2)
8+
.iter()
9+
.map(|(a, b)| a * b)
10+
.sum::<u32>() as usize,
11+
)
1012
}
1113

1214
type ParseState<'a> = (&'a str, bool);
1315

14-
fn parse_muls(data: &str) -> Vec<(u32, u32)> {
16+
fn parse_muls<F>(data: &str, drop_until_start: F) -> Vec<(u32, u32)>
17+
where
18+
F: for<'a> Fn(ParseState<'a>, &str) -> ParseState<'a>,
19+
{
1520
let mut results = Vec::new();
1621
let mut todo: ParseState = (data, true);
1722
while !todo.0.is_empty() {
18-
match parse_next(todo) {
23+
let after_drop = drop_until_start(todo, "mul(");
24+
match parse_next(after_drop) {
1925
Ok((remaining, pair)) => {
2026
results.push(pair);
2127
todo = remaining;
@@ -29,12 +35,11 @@ fn parse_muls(data: &str) -> Vec<(u32, u32)> {
2935
}
3036

3137
fn parse_next(data: ParseState) -> Result<(ParseState, (u32, u32)), ParseState> {
32-
let r1 = drop_until_part2(data, "mul(");
33-
let (r2, num1) = parse_int(r1)?;
34-
let r3 = parse_prefix(r2, ',')?;
35-
let (r4, num2) = parse_int(r3)?;
36-
let r5 = parse_prefix(r4, ')')?;
37-
Ok((r5, if r5.1 { (num1, num2) } else { (0, 0) }))
38+
let (r1, num1) = parse_int(data)?;
39+
let r2 = parse_prefix(r1, ',')?;
40+
let (r3, num2) = parse_int(r2)?;
41+
let r4 = parse_prefix(r3, ')')?;
42+
Ok((r4, if r4.1 { (num1, num2) } else { (0, 0) }))
3843
}
3944

4045
#[allow(dead_code)]

src/day04.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
1-
use std::fs;
2-
3-
pub fn day04(input_path: String) {
4-
let input = fs::read_to_string(input_path).unwrap();
5-
1+
pub fn day04(input: &str) -> (usize, usize) {
62
let data = parse_input(&input);
73

8-
println!("{:?}", part1(&data));
9-
println!("{:?}", part2(&data));
4+
(part1(&data), part2(&data))
105
}
116

127
// parse input into vector-of-vectors for easier transpose etc.

src/day05.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
use std::collections::{HashMap, HashSet};
2-
use std::fs;
32

43
use itertools::Itertools;
54

6-
pub fn day05(input_path: String) {
7-
let input = fs::read_to_string(input_path).unwrap();
8-
5+
pub fn day05(input: &str) -> (usize, usize) {
96
let (rules, pages_list) = parse_input(&input);
107

11-
println!("{:?}", part1(&pages_list, &rules));
12-
println!("{:?}", part2(&pages_list, &rules));
8+
(
9+
part1(&pages_list, &rules) as usize,
10+
part2(&pages_list, &rules) as usize,
11+
)
1312
}
1413

1514
type Graph = HashMap<u32, HashSet<u32>>;

src/day06.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,12 @@ use rayon::prelude::*;
1010
use std::collections::BTreeMap;
1111
use std::collections::HashMap;
1212
use std::collections::HashSet;
13-
use std::fs;
1413
use tailcall::tailcall;
1514

16-
pub fn day06(input_path: String) {
17-
let content = fs::read_to_string(input_path).unwrap();
15+
pub fn day06(input: &str) -> (usize, usize) {
16+
let (field, guard) = read(&input);
1817

19-
let (field, guard) = read(&content);
20-
21-
println!("{:?}", part1(&field, guard));
22-
println!("{:?}", part2(&field, guard));
18+
(part1(&field, guard), part2(&field, guard))
2319
}
2420

2521
fn read(input: &str) -> (Field, Guard) {

src/day07.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
1-
use std::{fs, iter::zip, num::ParseIntError, str::FromStr};
1+
use std::{iter::zip, num::ParseIntError, str::FromStr};
22

33
use itertools::Itertools;
44
use rayon::prelude::*;
55

6-
pub fn day07(input_path: String) {
7-
let content = fs::read_to_string(input_path).unwrap();
6+
pub fn day07(input: &str) -> (usize, usize) {
7+
let equations: Vec<Equation> = input.lines().map(|l| l.parse().unwrap()).collect();
88

9-
let equations: Vec<Equation> = content.lines().map(|l| l.parse().unwrap()).collect();
10-
11-
println!("{:?}", part1(&equations));
12-
println!("{:?}", part2(&equations));
9+
(part1(&equations) as usize, part2(&equations) as usize)
1310
}
1411

1512
#[derive(Debug)]

src/day08.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
use std::{
22
cmp,
33
collections::{HashMap, HashSet},
4-
fs,
54
};
65

76
use itertools::iproduct;
87

9-
pub fn day08(input_path: String) {
10-
let content = fs::read_to_string(input_path).unwrap();
8+
pub fn day08(input: &str) -> (usize, usize) {
9+
let (antennas, corner) = read(&input);
1110

12-
let (antennas, corner) = read(&content);
13-
14-
println!("{:?}", count_antinodes(&antennas, ((0, 0), corner), antinodes_part1));
15-
println!("{:?}", count_antinodes(&antennas, ((0, 0), corner), antinodes_part2));
11+
(
12+
count_antinodes(&antennas, ((0, 0), corner), antinodes_part1),
13+
count_antinodes(&antennas, ((0, 0), corner), antinodes_part2),
14+
)
1615
}
1716

1817
// Positive y-direction is up!
@@ -62,7 +61,7 @@ fn antinodes_part2(antennas: &[Position], bounds: (Position, Position)) -> Vec<P
6261
.filter(|(p1, p2)| p1 != p2)
6362
.flat_map(|((x1, y1), (x2, y2))| {
6463
(0..)
65-
.map(move |i| ((i+1) * x1 - i * x2, (i+ 1) * y1 - i * y2))
64+
.map(move |i| ((i + 1) * x1 - i * x2, (i + 1) * y1 - i * y2))
6665
.take_while(|p| is_inside(*p, bounds))
6766
})
6867
.collect()

src/day09.rs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
1-
use std::fs;
2-
3-
pub fn day09(input_path: String) {
4-
let content = fs::read_to_string(input_path).unwrap();
5-
let numbers = content
1+
pub fn day09(input: &str) -> (usize, usize) {
2+
let numbers = input
63
.trim()
74
.chars()
85
.map(|c| c.to_digit(10).unwrap())
96
.collect::<Vec<_>>();
107

118
let mut disk = make_explicit_disk_map(&numbers);
129
compact_p1(&mut disk);
13-
14-
println!("{:?}", checksum(&disk));
10+
let p1 = checksum(&disk);
1511

1612
let mut disk = make_explicit_disk_map(&numbers);
1713
compact_p2(&mut disk);
18-
println!("{:?}", checksum(&disk));
14+
let p2 = checksum(&disk);
15+
(p1, p2)
1916
}
2017

2118
type ExplicitDiskMap = Vec<Option<usize>>;
@@ -71,11 +68,12 @@ fn compact_p2(disk_map: &mut ExplicitDiskMap) {
7168

7269
let end_of_first_spot = disk_map
7370
.iter()
74-
// ok these scan semantics are surprising (read: ass)
71+
// ok these scan semantics are surprising (read: ass)
7572
.scan(0, |run, c| match c {
7673
Some(_) => {
77-
*run = 0;
78-
Some(0)},
74+
*run = 0;
75+
Some(0)
76+
}
7977
None => {
8078
*run += 1;
8179
Some(*run)

src/day10.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
1-
use std::{collections::HashSet, fs};
1+
use std::collections::HashSet;
22

3-
pub fn day10(input_path: String) {
4-
let content = fs::read_to_string(input_path).unwrap();
3+
pub fn day10(input: &str) -> (usize, usize) {
4+
let map = Map::new(&input);
55

6-
let map = Map::new(&content);
7-
8-
println!("{:?}", part1(&map));
9-
println!("{:?}", part2(&map));
6+
(part1(&map), part2(&map))
107
}
118

129
fn part1(map: &Map) -> usize {

0 commit comments

Comments
 (0)