day 3
							parent
							
								
									c4266bb16c
								
							
						
					
					
						commit
						2dc8abfbc6
					
				| @ -0,0 +1,16 @@ | ||||
| # This file is automatically @generated by Cargo. | ||||
| # It is not intended for manual editing. | ||||
| version = 3 | ||||
| 
 | ||||
| [[package]] | ||||
| name = "day03" | ||||
| version = "0.1.0" | ||||
| dependencies = [ | ||||
|  "rustc-hash", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustc-hash" | ||||
| version = "1.1.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" | ||||
| @ -0,0 +1,9 @@ | ||||
| [package] | ||||
| name = "day03" | ||||
| version = "0.1.0" | ||||
| edition = "2021" | ||||
| 
 | ||||
| # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | ||||
| 
 | ||||
| [dependencies] | ||||
| rustc-hash = "1.1.0" | ||||
| @ -0,0 +1,52 @@ | ||||
| use rustc_hash::FxHashSet; | ||||
| use std::io::{self, BufRead}; | ||||
| 
 | ||||
| const LOWERCASE_ASCII_OFFSET: usize = 64; | ||||
| const UPPERCASE_ASCII_OFFSET: usize = 32; | ||||
| const LOWERCASE_ALPHA_OFFSET: usize = 26; | ||||
| 
 | ||||
| fn main() { | ||||
|     let lines = io::stdin().lock().lines().map(|l| l.unwrap()); | ||||
|     let mut first_half: FxHashSet<char>; | ||||
|     let mut second_half: FxHashSet<char>; | ||||
|     let mut p1_sum = 0usize; | ||||
|     let mut p2_sum = 0usize; | ||||
| 
 | ||||
|     let mut group_set: FxHashSet<char>; | ||||
|     let mut groups: Vec<String> = Vec::new(); | ||||
| 
 | ||||
|     for line in lines { | ||||
|         groups.push(line.clone()); | ||||
|         if groups.len() == 3 { | ||||
|             group_set = groups[0] | ||||
|                 .chars() | ||||
|                 .collect::<FxHashSet<char>>() | ||||
|                 .intersection(&groups[1].chars().collect()) | ||||
|                 .copied() | ||||
|                 .collect::<FxHashSet<char>>() | ||||
|                 .intersection(&groups[2].chars().collect()) | ||||
|                 .copied() | ||||
|                 .collect(); | ||||
|             p2_sum += type_to_priority(group_set.iter().next().unwrap()); | ||||
|             groups.clear(); | ||||
|         } | ||||
| 
 | ||||
|         let (first, second) = line.split_at(line.len() / 2); | ||||
|         first_half = first.chars().collect(); | ||||
|         second_half = second.chars().collect(); | ||||
|         let shared_type = first_half.intersection(&second_half).next().unwrap(); | ||||
|         p1_sum += type_to_priority(shared_type); | ||||
|     } | ||||
|     println!("P1: {}, P2: {}", p1_sum, p2_sum); | ||||
| } | ||||
| 
 | ||||
| fn type_to_priority(ptype: &char) -> usize { | ||||
|     let mut ascii_val = *ptype as usize; | ||||
|     ascii_val -= LOWERCASE_ASCII_OFFSET; | ||||
|     if ascii_val > UPPERCASE_ASCII_OFFSET { | ||||
|         ascii_val -= UPPERCASE_ASCII_OFFSET | ||||
|     } else { | ||||
|         ascii_val += LOWERCASE_ALPHA_OFFSET | ||||
|     } | ||||
|     ascii_val | ||||
| } | ||||
					Loading…
					
					
				
		Reference in New Issue