summaryrefslogtreecommitdiffstats
path: root/src/2021/7/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/2021/7/mod.rs')
-rw-r--r--src/2021/7/mod.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/2021/7/mod.rs b/src/2021/7/mod.rs
new file mode 100644
index 0000000..275173e
--- /dev/null
+++ b/src/2021/7/mod.rs
@@ -0,0 +1,38 @@
+pub fn part1() -> anyhow::Result<i64> {
+ let crabs: Vec<i64> = data_lines!()?
+ .next()
+ .unwrap()?
+ .split(',')
+ .map(|s| s.parse())
+ .collect::<Result<_, _>>()?;
+
+ Ok((0..=crabs.iter().copied().max().unwrap())
+ .map(|start| {
+ crabs.iter().copied().map(|crab| (crab - start).abs()).sum()
+ })
+ .min()
+ .unwrap())
+}
+
+pub fn part2() -> anyhow::Result<i64> {
+ let crabs: Vec<i64> = data_lines!()?
+ .next()
+ .unwrap()?
+ .split(',')
+ .map(|s| s.parse())
+ .collect::<Result<_, _>>()?;
+
+ Ok((0..=crabs.iter().copied().max().unwrap())
+ .map(|start| {
+ crabs
+ .iter()
+ .copied()
+ .map(|crab| {
+ let diff = (crab - start).abs();
+ diff * (diff + 1) / 2
+ })
+ .sum()
+ })
+ .min()
+ .unwrap())
+}