Compare commits

..

No commits in common. '40922a13cbf805894ad87b32d81019d08320dc1f' and '5d6d91f075e4cebf1406fc950ad200f5671f8898' have entirely different histories.

  1. 1
      .gitignore
  2. 1
      d1/.gitignore
  3. 1
      d2/.gitignore
  4. 7
      d3/Cargo.lock
  5. 8
      d3/Cargo.toml
  6. 44
      d3/src/main.rs

1
.gitignore vendored

@ -1,2 +1 @@
input.txt input.txt
/*/target

1
d1/.gitignore vendored

@ -0,0 +1 @@
/target

1
d2/.gitignore vendored

@ -0,0 +1 @@
/target

7
d3/Cargo.lock generated

@ -1,7 +0,0 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "d3"
version = "0.1.0"

@ -1,8 +0,0 @@
[package]
name = "d3"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

@ -1,44 +0,0 @@
use std::{io::Result, fs::read_to_string, collections::HashSet};
pub fn priority(x: u8) -> u32 {
(match x {
0x61..=0x7a => x - 0x61 + 1,
0x41..=0x5a => x - 0x41 + 27,
_ => unreachable!()
}) as u32
}
fn main() -> Result<()> {
let mut p1_priority: u32 = 0;
let mut p2_priority: u32 = 0;
let mut i = 0;
let mut elves: Vec<HashSet<_>> = Vec::new();
for line in read_to_string("input.txt")?.split("\n") {
if line.is_empty() { continue; }
let bytes = line.as_bytes();
let (first_half, second_half) = bytes.split_at(bytes.len() / 2);
let in_first_half = first_half.iter().copied().collect::<HashSet<_>>();
let in_second_half = second_half.iter().copied().collect::<HashSet<_>>();
let in_both_halves = in_first_half.intersection(&in_second_half).copied().next().unwrap();
p1_priority += priority(in_both_halves);
let items = bytes.iter().copied().collect::<HashSet<_>>();
elves.push(items.clone());
if i == 2 {
let badge = items.iter().filter(|item| elves.iter().filter(|elf| elf.contains(item)).count() == 3).copied().next().unwrap();
p2_priority += priority(badge);
elves.clear();
i = 0;
} else {
i += 1;
}
}
println!("part 1: {}", p1_priority);
println!("part 2: {}", p2_priority);
Ok(())
}
Loading…
Cancel
Save