Add (much slower) sort and binary search day 9 part 1
This commit is contained in:
parent
68d161f2f7
commit
1af8eab8c2
@ -87,7 +87,6 @@ fn parse(input: &str) -> Vec<usize> {
|
|||||||
|
|
||||||
fn solution1_impl(nums: &[usize], win_size: usize) -> usize {
|
fn solution1_impl(nums: &[usize], win_size: usize) -> usize {
|
||||||
nums.windows(win_size + 1)
|
nums.windows(win_size + 1)
|
||||||
// TODO(wathiede): try soring and/or hashmap for speed.
|
|
||||||
.skip_while(|chunk| {
|
.skip_while(|chunk| {
|
||||||
let past = &chunk[..win_size];
|
let past = &chunk[..win_size];
|
||||||
let cur = chunk[win_size];
|
let cur = chunk[win_size];
|
||||||
@ -104,11 +103,35 @@ fn solution1_impl(nums: &[usize], win_size: usize) -> usize {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn solution1_impl_sorted(nums: &[usize], win_size: usize) -> usize {
|
||||||
|
nums.windows(win_size + 1)
|
||||||
|
.skip_while(|chunk| {
|
||||||
|
let mut past = (&chunk[..win_size]).clone().to_owned();
|
||||||
|
past.sort_unstable();
|
||||||
|
let cur = chunk[win_size];
|
||||||
|
for p in &past {
|
||||||
|
let diff = if cur > *p { cur - p } else { p - cur };
|
||||||
|
if past.binary_search(&diff).is_ok() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
false
|
||||||
|
})
|
||||||
|
.find_map(|chunk| Some(chunk[win_size]))
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
#[aoc(day9, part1)]
|
#[aoc(day9, part1)]
|
||||||
fn solution1(nums: &[usize]) -> usize {
|
fn solution1(nums: &[usize]) -> usize {
|
||||||
solution1_impl(nums, 25)
|
solution1_impl(nums, 25)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[aoc(day9, part1, sorted)]
|
||||||
|
fn solution1_sorted(nums: &[usize]) -> usize {
|
||||||
|
solution1_impl_sorted(nums, 25)
|
||||||
|
}
|
||||||
|
|
||||||
fn sum_min_max(low: usize, hi: usize, nums: &[usize]) -> usize {
|
fn sum_min_max(low: usize, hi: usize, nums: &[usize]) -> usize {
|
||||||
let (min, max) = nums[low..hi]
|
let (min, max) = nums[low..hi]
|
||||||
.iter()
|
.iter()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user