Compare commits
5 Commits
44e5a16b48
...
main
Author | SHA1 | Date | |
---|---|---|---|
708d5b317e | |||
bcad961d8d | |||
beefa83b7c | |||
dadbc79893 | |||
8c81c2032e |
2250
aoc2022/inputs/day_1.txt
Normal file
2250
aoc2022/inputs/day_1.txt
Normal file
File diff suppressed because it is too large
Load Diff
2500
aoc2022/inputs/day_2.txt
Normal file
2500
aoc2022/inputs/day_2.txt
Normal file
File diff suppressed because it is too large
Load Diff
1
aoc2022/inputs/day_6.txt
Normal file
1
aoc2022/inputs/day_6.txt
Normal file
@ -0,0 +1 @@
|
||||
pnnfhnhshrhmhwwmwzmznmnwmwfmfhfjfcjjtgtbggpdgdjjbjrjsjpjrrmddmgmpmddrhddnfnfzfpfvpfpprhhlffmtffqhhdtdcdsswsdwswmmfvvpdprrnnhhhtffnfbbznbznnvdnnbffjrfrbfrbrgbrrntnggrqqwtqwwgjgsswgwqwtwwsvwvbwvwrwlrlppzfzwfzzpmzzhqqzqlzlglzzmrmwrmwwvmwvvnppjfjttlffhjjjsccbggnffqgfgjjnccmdmzmllvnlnznttlvlttvnvgnvvqvmvqqzrqqcgglzzwtztwwmjmzjjnddsffqrqlrrvsvdvldvvlgvlvccdzczcqcpphggtnthhhtbhtttcjtjcjgcjcbbrhbbfrffgjgdgzddcttczzsccbpcpddcpcggmjgjddtcccthccfrccmdmhmddnwddfldffntnptnpttcptcptpfphhmfmwfwmmlblgbgvbvlltqltldttfcfcclgcllmplmlbbjnjzjnzzttnvvgddshddsqddggsqgqddsggdhghjgjhhgchhdmdjmjddgdhghrrphrrpnnqhhjwwqrrcmmslmmszzpgzpzzrmzmznzllnjnnlnbbdvdsdffbpffcmmnznqqcbbzvvjnjvvwqwgqqpnnzwnzwnzwwwlpwpzzfqzfqqwnqnbnfnqnbqqbggqnqdndrrzzlffbbgqgfgrfrqqsddnqnqjjgssqwqwcqcpcrrqppwpjjfnfpffhphwwmcwwznwznnplptlplnlsnlsldslslsffwtwftwtbtdbbjsjcczwwfllwtlwtlwlvwlwrwppsggvcvrrqcrqqvmqvmmbrrsbsfspspjpnnmpmqmcczgzffqmfmtmpppwzppzrpzrzsrrpqrpqpmpvmpvpttbqtqmtmjttqdqgggcppclcjcpcsppctpplpdpcppcmmdzmzddvhvhnhrrldllcwwbnwnssshlhrhthggtmggbjbjwwbvbttjllvrrfggngvngnmmvzzrrmddmcddztztctfccqpcpcqqvqppqcqdcdhhvhssgfgzgwwzmmnssvwwbqbhbnhnphpqqjcqcddfwfttqjtqtlttglljgjbgjgnnsqqvrvffqvqfqbffljjpffssqdsqstqqqldqqmhmsmsqqwtqwqdqgdgjjfbjffgbbrhhqghgppqgpgmpmmfzfhhfrhffgmfggpzgpzzhtzhhlbhhqbbzvvnvqnntptmmbhbdhdwwmjjcnnmsscqcbbtjtvjvwjvvmsmjmtmpmgghttcztzggpddbfbfgbbdsdrsrrqfqjjqfjjhzhtzzmdzzcgzgdzzmvmmfmjmgjmggmppbdppmzpppvfppzhhfsfwfhhpjpmmrjjpssdccjpjpwjppvdpphcpcjcfjfwjfwfjwfjjqcqcwqqqsmmmbbgdgwwpcwwdfdlflrltlgtthfhfjhhlthtddlgdggsjsrrdpdcppgttphpgpwppmpzmmrjmmvjvgvgfglfgllbqlqhllszzlwwhzzdfdcdtctptwtztfzzmjzjtjtrjrcrnrjjmwmnnbddgvgtgsstjsszmpqdmzgqflrbrspjmtzjcrmlzltmhgblghnwqvwwqwzbpnfrpdpblpjgshfccfbjfsnwvvhnjftsdnsgtzzjtzpmtfdvzrhtqpblhwgmqtgpbfvbdmsnrrrvvbstpsznvbbwgjfqjrhdvwvgptpglpfddhddmtglmjlpwlvfpbtbmgbplbzrlpdlvqzcwhbscpszgfstjpfdvfpmljlngrbgrdnnblzqrfpzsdvblpwbtnhdjclldvwvbwcwzfzbdspgwpfqjfbdbrqcshtlvcrdstnzggbwqnzbrfzbpnrtmvpbvdhcvdsdshgtvhfgdzljflppqbwclnvbhbczvrscjhlbgbfvwdjhnjsgmvwhpfgwbbmnndpnglfrmtfdzvqgfjdqfhgrhvpbqndmqnqccgwswwdsqjnbjtjbjdbqgjnmfbdvlnfwbnrdqgvgzzhmmbbdzfdvvpwhpbwbnzdcdpchrwlhfsjnhhjggvplmqggwjdsvjtpnpnqgldjjdcscrdltssjdrpcrfbgbcjfplhzgwbprfcslhpcngtszrghmwhzdqscbfrhzdwcffzvmjrmcjcstfvhplvrsglgsjnjtrpddsdfqjsndjnfmvdhfgdbzzflqhsrrwmrnlpqzmcddqbqvvzgtlztpgjnddtcnbmqsjlhmcszrmcjvwzpptlfqsmpvgnzvrjdwzpdwqgbmdgdtvjlmfczthjbcgfhbqpnmlbmrwwhfptzlbmfdhssznjcvjbmnjtnvzjhzczlrrdnttmmcbnzhqpplzqwgttwrnwfvmnptgqlfrnzvqpjfgrzwmlcwvtptvcvrlsrdwdgqfvffspmdbnnrqjttpqvhvdpbcrvzptwnhhfsqzchmncvttcdgdnlppcfzpmjpvbvqhlvplwvrmmbbggbwttwmvsqjlllsftprsmtmnzjcqfzblrllzgshfljchrjwjlpvhpbrtrsschzltrblgjnbgdnmwdggjhqggntblnhsvfgsbcblhmctbqzqwmhqnjhpzjfqpjdgwpzhczcftfcpdhvzhzccmwmrfrbqshzmtpqgpbbvfqqbjbmvnlnlwjtzrpmhdlffccrqcfgsjfszbrzrfztntchtmgmbhjgmlsqzcbtqqjzzlghtzzqmlnnvsgsvbbjfgqsqbqmqrdzwpwdgbggpdvhvnlzshhntprjdwhnwfvdjzpqgflwrvwgtmfdmfdztcbtfnjdrvgdwwczdgphnvdgrbdchprqldfjrvcsflcmlcmzqvqgsgnzcgmrhccgcmptcdzhbcdgdtppwztfstzqqzqrdzlnzthggjmpcflmbcmdrrjnnpbpqfmjbzqbtsjjgdlmgncbmgspqqvbrvzrdjscpzjsdtcdvsdwqlmwrngttswnrsbqctvhgfnnwblpcqzdmzpfchplslspmghvgcqntmlrfhgpcbpspvfhnvqvglsqzsnsdzddqpbsjhlclslngbwvvgjhwfcncqsmqwbptzvpzlzslsjjjldjpwpfrdlfbjphqcjtsgqdsdfdjhqgdhcppndwmhmmldvvmblcqcqfqhltbcbvrnghjfmtgqwtwljtczvqlnmgscjhqdhnzwhzvzzqnlsrhqvljqpgpwghfqlhjjrrhvnmnnrbnlhdcjctwtlhmhhmhjvcgzdrzmdjrvqzgnsttjdwglgwlcmbcdnjprgfsbbdzzngbqdrvwwwhbtlnnmzqdjttsrrpvlfdqnfhhtdtvmpcjgdwtbnqmwmtszdqfmbhjsjpqqddzfggwjhbtlnqfgcwbjzdtcpcpzgnrmnvwlpgmwfjlpgppdfrfvvjwsfcdqdnpcpjbqsvhttssgptqjghctrbgntlfjzdrfjccsprsjlrrwrzsmnjsqslmpdtrvhlqbnmgpjthpqdqmnvrtzlhhzzfzbrcclpmpcszhbttgrtcpgcpjwpdbfpfvgspsgtvglwthqcmcvmrfmclwlvjlsptfgmtlrnsvjrnfwzhdcsmgztpzfcvzwdztpppvqpvqfpdrsfnlhrbqwrsqjtwjmhnpwmqmpdgdhbtbpfwnmswffdqffdggrdrpmngvpzplmmwlddnhcvjjzqqfsbbtfmzdwnpvbjrshmllczhgvwwcbcbtfrfnplqjwmjlvpwwgfrtffwddwppsgtnlmpvfnhfzcsgjbqbjmbvpnqppsrvwnlzvcmjqgtbzrdsnrgwbfmrvnflgccrssfvcwgllqqbbcthzmbtnsmbzbcczhtzcvmthttpltrtdmgspctvtpvqbhmnnpnjwmhpqclmjsdrbjwvjbtzcjlqbjsvbgdwqzflnwzcfjwtrhjgfshfmwbjfwpnhjsmtpgbpwlfjjnmdlrhchmnfmgmgcrftmwbzshdwbhndgwtjbrrvbwprqppfmgfmfllpcjgrwdmtzddthsjlgjljv
|
41
aoc2022/src/day_1.rs
Normal file
41
aoc2022/src/day_1.rs
Normal file
@ -0,0 +1,41 @@
|
||||
fn solution_part1(text: String) -> i32 {
|
||||
text.split("\n\n")
|
||||
.map(|e| e.lines().map(|c| c.parse::<i32>().unwrap()).sum())
|
||||
.max()
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
fn solution_part2(text: String) -> i32 {
|
||||
let mut cals = text
|
||||
.split("\n\n")
|
||||
.map(|e| e.lines().map(|c| c.parse::<i32>().unwrap()).sum())
|
||||
.collect::<Vec<i32>>();
|
||||
cals.sort();
|
||||
return cals.iter().rev().take(3).sum();
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::fs;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn basic_example() {
|
||||
let input =
|
||||
"1000\n2000\n3000\n\n4000\n\n5000\n6000\n\n7000\n8000\n9000\n\n10000".to_string();
|
||||
assert_eq!(solution_part1(input), 24000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn answer_part1() {
|
||||
let input = fs::read_to_string("inputs/day_1.txt").unwrap();
|
||||
println!("Answer to part 1 of day 1: {:#?}", solution_part1(input));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn answer_part2() {
|
||||
let input = fs::read_to_string("inputs/day_1.txt").unwrap();
|
||||
println!("Answer to part 2 of day 1: {:#?}", solution_part2(input));
|
||||
}
|
||||
}
|
68
aoc2022/src/day_2.rs
Normal file
68
aoc2022/src/day_2.rs
Normal file
@ -0,0 +1,68 @@
|
||||
fn calc_score(opponent: char, me: char) -> u32 {
|
||||
let mut score = 0;
|
||||
score += match (opponent, me) {
|
||||
('A', 'Z') | ('B', 'X') | ('C', 'Y') => 0,
|
||||
('C', 'X') | ('A', 'Y') | ('B', 'Z') => 6,
|
||||
_ => 3,
|
||||
};
|
||||
|
||||
score += match me {
|
||||
'X' => 1,
|
||||
'Y' => 2,
|
||||
'Z' => 3,
|
||||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
return score;
|
||||
}
|
||||
|
||||
fn find_move(opponent: char, result: char) -> char {
|
||||
match (opponent, result) {
|
||||
(_, 'Y') => char::from_u32(opponent as u32 - 'A' as u32 + 'X' as u32).unwrap(),
|
||||
('B', 'X') | ('C', 'Z') => 'X',
|
||||
('C', 'X') | ('A', 'Z') => 'Y',
|
||||
('A', 'X') | ('B', 'Z') => 'Z',
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
fn solution_part1(text: String) -> u32 {
|
||||
text.lines()
|
||||
.filter(|g| g.len() == 3)
|
||||
.map(|g| {
|
||||
let mut chars = g.chars();
|
||||
calc_score(chars.next().unwrap(), chars.next_back().unwrap())
|
||||
})
|
||||
.sum()
|
||||
}
|
||||
|
||||
fn solution_part2(text: String) -> u32 {
|
||||
text.lines()
|
||||
.filter(|g| g.len() == 3)
|
||||
.map(|g| {
|
||||
let mut chars = g.chars();
|
||||
let opponent = chars.next().unwrap();
|
||||
let me = find_move(opponent, chars.next_back().unwrap());
|
||||
calc_score(opponent, me)
|
||||
})
|
||||
.sum()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::fs;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn answer_part1() {
|
||||
let input = fs::read_to_string("inputs/day_2.txt").unwrap();
|
||||
println!("Answer to part 1 of day 2: {:#?}", solution_part1(input));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn answer_part2() {
|
||||
let input = fs::read_to_string("inputs/day_2.txt").unwrap();
|
||||
println!("Answer to part 2 of day 2: {:#?}", solution_part2(input));
|
||||
}
|
||||
}
|
@ -17,7 +17,7 @@ fn parse_pairs(line: &str) -> (Range, Range) {
|
||||
return (Range::from_str(left), Range::from_str(right));
|
||||
}
|
||||
|
||||
fn solution_part1(input: &str) -> i32 {
|
||||
fn solution_part1(input: String) -> i32 {
|
||||
let mut result: i32 = 0;
|
||||
for line in input.lines() {
|
||||
let (left, right) = parse_pairs(line);
|
||||
@ -28,7 +28,7 @@ fn solution_part1(input: &str) -> i32 {
|
||||
return result;
|
||||
}
|
||||
|
||||
fn solution_part2(input: &str) -> i32 {
|
||||
fn solution_part2(input: String) -> i32 {
|
||||
let mut result: i32 = 0;
|
||||
for line in input.lines() {
|
||||
let (left, right) = parse_pairs(line);
|
||||
@ -52,7 +52,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn basic_example() {
|
||||
let input = "2-4,6-8\n2-3,4-5\n5-7,7-9\n2-8,3-7\n6-6,4-6\n2-6,4-8";
|
||||
let input = "2-4,6-8\n2-3,4-5\n5-7,7-9\n2-8,3-7\n6-6,4-6\n2-6,4-8".to_string();
|
||||
let expected = 2;
|
||||
let result = solution_part1(input);
|
||||
assert_eq!(result, expected);
|
||||
@ -61,18 +61,12 @@ mod tests {
|
||||
#[test]
|
||||
fn answer_part1() {
|
||||
let input = fs::read_to_string("inputs/day_4.txt").unwrap();
|
||||
println!(
|
||||
"Answer to part 1 of day 4: {:#?}",
|
||||
solution_part1(input.as_str())
|
||||
);
|
||||
println!("Answer to part 1 of day 4: {:#?}", solution_part1(input));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn answer_part2() {
|
||||
let input = fs::read_to_string("inputs/day_4.txt").unwrap();
|
||||
println!(
|
||||
"Answer to part 2 of day 4: {:#?}",
|
||||
solution_part2(input.as_str())
|
||||
);
|
||||
println!("Answer to part 2 of day 4: {:#?}", solution_part2(input));
|
||||
}
|
||||
}
|
||||
|
49
aoc2022/src/day_6.rs
Normal file
49
aoc2022/src/day_6.rs
Normal file
@ -0,0 +1,49 @@
|
||||
use std::collections::HashSet;
|
||||
|
||||
fn is_unique_string(chars: &str) -> bool {
|
||||
let mut set: HashSet<char> = HashSet::with_capacity(chars.len());
|
||||
set.extend(chars.chars());
|
||||
return set.len() == chars.len();
|
||||
}
|
||||
|
||||
fn solution(sequence: String, sub_len: usize) -> usize {
|
||||
for i in 0..(sequence.len() - sub_len) {
|
||||
let sub = &sequence[i..i + sub_len];
|
||||
if is_unique_string(sub.try_into().unwrap()) {
|
||||
return i + sub_len;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::fs;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn basic_example() {
|
||||
let input = "bvwbjplbgvbhsrlpgdmjqwftvncz".to_string();
|
||||
assert_eq!(solution(input, 4), 5);
|
||||
let input = "nppdvjthqldpwncqszvftbrmjlhg".to_string();
|
||||
assert_eq!(solution(input, 4), 6);
|
||||
let input = "nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg".to_string();
|
||||
assert_eq!(solution(input, 4), 10);
|
||||
let input = "zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw".to_string();
|
||||
assert_eq!(solution(input, 4), 11);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn answer_part1() {
|
||||
let input = fs::read_to_string("inputs/day_6.txt").unwrap();
|
||||
println!("Answer to part 1 of day 6: {:#?}", solution(input, 4));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn answer_part2() {
|
||||
let input = fs::read_to_string("inputs/day_6.txt").unwrap();
|
||||
println!("Answer to part 2 of day 6: {:#?}", solution(input, 14));
|
||||
}
|
||||
}
|
@ -1,2 +1,5 @@
|
||||
#[allow(dead_code)]
|
||||
#![allow(dead_code)]
|
||||
mod day_1;
|
||||
mod day_2;
|
||||
mod day_4;
|
||||
mod day_6;
|
||||
|
Reference in New Issue
Block a user