Compare commits
No commits in common. "b522357495aef44d039ea2cf2dbc28f29248da66" and "1277882310430e4914201b9fd9fdea8066f1d98d" have entirely different histories.
b522357495
...
1277882310
|
@ -11,12 +11,6 @@ dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "allocator-api2"
|
|
||||||
version = "0.2.21"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aoc-runner"
|
name = "aoc-runner"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
|
@ -52,7 +46,6 @@ version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aoc-runner",
|
"aoc-runner",
|
||||||
"aoc-runner-derive",
|
"aoc-runner-derive",
|
||||||
"hashbrown",
|
|
||||||
"nom",
|
"nom",
|
||||||
"num",
|
"num",
|
||||||
"regex",
|
"regex",
|
||||||
|
@ -65,29 +58,6 @@ version = "1.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
|
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "equivalent"
|
|
||||||
version = "1.0.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "foldhash"
|
|
||||||
version = "0.1.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hashbrown"
|
|
||||||
version = "0.15.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
|
|
||||||
dependencies = [
|
|
||||||
"allocator-api2",
|
|
||||||
"equivalent",
|
|
||||||
"foldhash",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "1.0.14"
|
version = "1.0.14"
|
||||||
|
|
|
@ -6,7 +6,6 @@ edition = "2021"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
aoc-runner = "0.3.0"
|
aoc-runner = "0.3.0"
|
||||||
aoc-runner-derive = "0.3.0"
|
aoc-runner-derive = "0.3.0"
|
||||||
hashbrown = "0.15.2"
|
|
||||||
nom = "7.1.3"
|
nom = "7.1.3"
|
||||||
num = "0.4.3"
|
num = "0.4.3"
|
||||||
regex = "1.11.1"
|
regex = "1.11.1"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use hashbrown::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
|
|
||||||
use aoc_runner_derive::{aoc, aoc_generator};
|
use aoc_runner_derive::{aoc, aoc_generator};
|
||||||
use num::integer::gcd;
|
use num::integer::gcd;
|
||||||
|
@ -15,9 +15,11 @@ fn parse(input: &str) -> Input {
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.filter(|(_, c)| c != &'.')
|
.filter(|(_, c)| c != &'.')
|
||||||
.for_each(|(x, c)| {
|
.for_each(|(x, c)| {
|
||||||
map.entry(c)
|
if let std::collections::hash_map::Entry::Vacant(e) = map.entry(c) {
|
||||||
.or_insert(Vec::new())
|
e.insert(vec![(x as isize, y as isize)]);
|
||||||
.push((x as isize, y as isize));
|
} else {
|
||||||
|
map.get_mut(&c).unwrap().push((x as isize, y as isize));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
let vec = map.into_values().collect();
|
let vec = map.into_values().collect();
|
||||||
|
@ -48,7 +50,7 @@ fn part1(input: &Input) -> usize {
|
||||||
|
|
||||||
#[aoc(day8, part2)]
|
#[aoc(day8, part2)]
|
||||||
fn part2(input: &Input) -> usize {
|
fn part2(input: &Input) -> usize {
|
||||||
let mut set = HashSet::with_capacity(input.1.len() * input.1.len());
|
let mut set = HashSet::new();
|
||||||
input.1.iter().for_each(|vec| {
|
input.1.iter().for_each(|vec| {
|
||||||
for l in 0..vec.len() {
|
for l in 0..vec.len() {
|
||||||
for r in l + 1..vec.len() {
|
for r in l + 1..vec.len() {
|
||||||
|
@ -56,6 +58,7 @@ fn part2(input: &Input) -> usize {
|
||||||
let a2 = vec[r];
|
let a2 = vec[r];
|
||||||
let s = a1;
|
let s = a1;
|
||||||
let v = (a2.0 - a1.0, a2.1 - a1.1);
|
let v = (a2.0 - a1.0, a2.1 - a1.1);
|
||||||
|
let v = (v.0 / gcd(v.0, v.1), v.1 / gcd(v.0, v.1));
|
||||||
let mut d = 0;
|
let mut d = 0;
|
||||||
loop {
|
loop {
|
||||||
let c = (s.0 + d * v.0, s.1 + d * v.1);
|
let c = (s.0 + d * v.0, s.1 + d * v.1);
|
||||||
|
@ -66,7 +69,7 @@ fn part2(input: &Input) -> usize {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let mut d = -1;
|
let mut d = 0;
|
||||||
loop {
|
loop {
|
||||||
let c = (s.0 + d * v.0, s.1 + d * v.1);
|
let c = (s.0 + d * v.0, s.1 + d * v.1);
|
||||||
d -= 1;
|
d -= 1;
|
||||||
|
@ -79,6 +82,12 @@ fn part2(input: &Input) -> usize {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
// for y in 0..input.0 .1 {
|
||||||
|
// println!();
|
||||||
|
// for x in 0..input.0 .0 {
|
||||||
|
// print!("{}", if set.contains(&(x, y)) { '#' } else { '.' })
|
||||||
|
// }
|
||||||
|
// }
|
||||||
set.len()
|
set.len()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,7 +113,5 @@ mod tests {
|
||||||
)),
|
)),
|
||||||
34
|
34
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(part2(&parse(include_str!("../input/2024/day8.txt"))), 1017);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue