summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-12-06 00:19:07 -0500
committerJesse Luehrs <doy@tozt.net>2021-12-06 00:19:07 -0500
commit2045ffeea70f6a131e14547554cfeb934b3df407 (patch)
treea9a59d628b1563ba4b424c96b28f0b9188a06a87
parent2619bdbef6033c787c80e322fa985e478bf341bb (diff)
downloadadvent-of-code-2045ffeea70f6a131e14547554cfeb934b3df407.tar.gz
advent-of-code-2045ffeea70f6a131e14547554cfeb934b3df407.zip
day 6
-rw-r--r--data/2021/6.txt1
-rw-r--r--src/2021/6/mod.rs41
-rw-r--r--src/2021/mod.rs4
3 files changed, 46 insertions, 0 deletions
diff --git a/data/2021/6.txt b/data/2021/6.txt
new file mode 100644
index 0000000..70f9ad7
--- /dev/null
+++ b/data/2021/6.txt
@@ -0,0 +1 @@
+1,4,3,3,1,3,1,1,1,2,1,1,1,4,4,1,5,5,3,1,3,5,2,1,5,2,4,1,4,5,4,1,5,1,5,5,1,1,1,4,1,5,1,1,1,1,1,4,1,2,5,1,4,1,2,1,1,5,1,1,1,1,4,1,5,1,1,2,1,4,5,1,2,1,2,2,1,1,1,1,1,5,5,3,1,1,1,1,1,4,2,4,1,2,1,4,2,3,1,4,5,3,3,2,1,1,5,4,1,1,1,2,1,1,5,4,5,1,3,1,1,1,1,1,1,2,1,3,1,2,1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,4,5,1,3,1,4,4,2,3,4,1,1,1,5,1,1,1,4,1,5,4,3,1,5,1,1,1,1,1,5,4,1,1,1,4,3,1,3,3,1,3,2,1,1,3,1,1,4,5,1,1,1,1,1,3,1,4,1,3,1,5,4,5,1,1,5,1,1,4,1,1,1,3,1,1,4,2,3,1,1,1,1,2,4,1,1,1,1,1,2,3,1,5,5,1,4,1,1,1,1,3,3,1,4,1,2,1,3,1,1,1,3,2,2,1,5,1,1,3,2,1,1,5,1,1,1,1,1,1,1,1,1,1,2,5,1,1,1,1,3,1,1,1,1,1,1,1,1,5,5,1
diff --git a/src/2021/6/mod.rs b/src/2021/6/mod.rs
new file mode 100644
index 0000000..ddf7855
--- /dev/null
+++ b/src/2021/6/mod.rs
@@ -0,0 +1,41 @@
+pub fn part1() -> anyhow::Result<i64> {
+ let mut fishes: Vec<u8> = data_lines!()?
+ .next()
+ .unwrap()?
+ .split(',')
+ .map(|s| s.parse())
+ .collect::<Result<_, _>>()?;
+ for _ in 0..80 {
+ let mut new = 0;
+ for fish in fishes.iter_mut() {
+ if *fish == 0 {
+ *fish = 6;
+ new += 1;
+ } else {
+ *fish -= 1;
+ }
+ }
+ fishes.resize(fishes.len() + new, 8);
+ }
+ Ok(fishes.len().try_into()?)
+}
+
+pub fn part2() -> anyhow::Result<i64> {
+ let fishes: Vec<u8> = data_lines!()?
+ .next()
+ .unwrap()?
+ .split(',')
+ .map(|s| s.parse())
+ .collect::<Result<_, _>>()?;
+ let mut by_age = std::collections::VecDeque::new();
+ by_age.resize(9, 0);
+ for fish in fishes {
+ by_age[fish as usize] += 1;
+ }
+ for _ in 0..256 {
+ let new = by_age.pop_front().unwrap();
+ by_age[6] += new;
+ by_age.push_back(new);
+ }
+ Ok(by_age.iter().sum())
+}
diff --git a/src/2021/mod.rs b/src/2021/mod.rs
index a84c726..f4bc3c5 100644
--- a/src/2021/mod.rs
+++ b/src/2021/mod.rs
@@ -8,6 +8,8 @@ mod day3;
mod day4;
#[path = "5/mod.rs"]
mod day5;
+#[path = "6/mod.rs"]
+mod day6;
// NEXT MOD
pub fn run(day: u8, puzzle: u8) -> anyhow::Result<i64> {
@@ -22,6 +24,8 @@ pub fn run(day: u8, puzzle: u8) -> anyhow::Result<i64> {
(4, 2) => day4::part2(),
(5, 1) => day5::part1(),
(5, 2) => day5::part2(),
+ (6, 1) => day6::part1(),
+ (6, 2) => day6::part2(),
// NEXT PART
_ => Err(anyhow::anyhow!("unknown puzzle {}-{}", day, puzzle)),
}