Skip to content

Commit d08bf52

Browse files
committed
refactor(14/2015): simplify, improve readability
1 parent 3f3b123 commit d08bf52

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100
| [Day 11: Corporate Policy](src/solutions/year2015/day11.rs) | ⭐⭐ | 0.543 | 14.384 |
101101
| [Day 12: JSAbacusFramework.io](src/solutions/year2015/day12.rs) | ⭐⭐ | 0.284 | 1.160 |
102102
| [Day 13: Knights of the Dinner Table](src/solutions/year2015/day13.rs) | ⭐⭐ | 7.535 | 15.721 |
103-
| [Day 14: Reindeer Olympics](src/solutions/year2015/day14.rs) | | 0.077 | - |
103+
| [Day 14: Reindeer Olympics](src/solutions/year2015/day14.rs) | | 0.077 | 0.742 |
104104

105105
# TODO
106106

src/solutions/year2015/day14.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ use std::str::FromStr;
66

77
const TIME: u64 = 2503;
88

9+
type PointsMap<'a> = HashMap<&'a Reindeer, u64>;
10+
911
pub struct Day14;
1012

1113
impl Solution for Day14 {
@@ -20,9 +22,8 @@ impl Solution for Day14 {
2022

2123
fn part_two(&self, input: &str) -> String {
2224
let reindeers = self.parse(input);
23-
let points = self.points(&reindeers, TIME);
2425

25-
points
26+
self.points(&reindeers, TIME)
2627
.iter()
2728
.max_by_key(|(_, distance)| *distance)
2829
.unwrap()
@@ -36,8 +37,8 @@ impl Day14 {
3637
input.lines().map(|line| line.parse().unwrap()).collect()
3738
}
3839

39-
fn points<'a>(&self, reindeers: &'a [Reindeer], time: u64) -> HashMap<&'a Reindeer, u64> {
40-
let mut points: HashMap<&Reindeer, u64> = HashMap::new();
40+
fn points<'a>(&self, reindeers: &'a [Reindeer], time: u64) -> PointsMap<'a> {
41+
let mut points: PointsMap = HashMap::new();
4142

4243
for reindeer in reindeers {
4344
points.insert(reindeer, 0);
@@ -67,14 +68,13 @@ struct Reindeer {
6768

6869
impl Reindeer {
6970
fn distance(&self, time: u64) -> u64 {
70-
let segment_time = self.fly_time + self.rest_time;
71-
let full_segments_in_time = time / segment_time;
72-
let base_distance = self.fly_speed * self.fly_time * full_segments_in_time;
73-
let missing_time = time - full_segments_in_time * segment_time;
71+
let cycle_time = self.fly_time + self.rest_time;
72+
let full_cycles = time / cycle_time;
7473

75-
let run_time = missing_time.min(self.fly_time);
74+
let remaining = time % cycle_time;
75+
let fly_time = full_cycles * self.fly_time + remaining.min(self.fly_time);
7676

77-
base_distance + self.fly_speed * run_time
77+
self.fly_speed * fly_time
7878
}
7979
}
8080

0 commit comments

Comments
 (0)