Compare commits

..

5 Commits

Author SHA1 Message Date
708d5b317e Removed unused whitespace 2022-12-11 13:46:01 +01:00
bcad961d8d Renamed incorrect day 2022-12-11 13:30:15 +01:00
beefa83b7c Added day 1 and day 2 2022 2022-12-11 13:28:42 +01:00
dadbc79893 Added day 6 2022 2022-12-06 20:13:14 +01:00
8c81c2032e Day 4: Removed conversion from String to &str 2022-12-06 20:13:05 +01:00
8 changed files with 4918 additions and 12 deletions

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

File diff suppressed because it is too large Load Diff

1
aoc2022/inputs/day_6.txt Normal file
View File

@ -0,0 +1 @@
pnnfhnhshrhmhwwmwzmznmnwmwfmfhfjfcjjtgtbggpdgdjjbjrjsjpjrrmddmgmpmddrhddnfnfzfpfvpfpprhhlffmtffqhhdtdcdsswsdwswmmfvvpdprrnnhhhtffnfbbznbznnvdnnbffjrfrbfrbrgbrrntnggrqqwtqwwgjgsswgwqwtwwsvwvbwvwrwlrlppzfzwfzzpmzzhqqzqlzlglzzmrmwrmwwvmwvvnppjfjttlffhjjjsccbggnffqgfgjjnccmdmzmllvnlnznttlvlttvnvgnvvqvmvqqzrqqcgglzzwtztwwmjmzjjnddsffqrqlrrvsvdvldvvlgvlvccdzczcqcpphggtnthhhtbhtttcjtjcjgcjcbbrhbbfrffgjgdgzddcttczzsccbpcpddcpcggmjgjddtcccthccfrccmdmhmddnwddfldffntnptnpttcptcptpfphhmfmwfwmmlblgbgvbvlltqltldttfcfcclgcllmplmlbbjnjzjnzzttnvvgddshddsqddggsqgqddsggdhghjgjhhgchhdmdjmjddgdhghrrphrrpnnqhhjwwqrrcmmslmmszzpgzpzzrmzmznzllnjnnlnbbdvdsdffbpffcmmnznqqcbbzvvjnjvvwqwgqqpnnzwnzwnzwwwlpwpzzfqzfqqwnqnbnfnqnbqqbggqnqdndrrzzlffbbgqgfgrfrqqsddnqnqjjgssqwqwcqcpcrrqppwpjjfnfpffhphwwmcwwznwznnplptlplnlsnlsldslslsffwtwftwtbtdbbjsjcczwwfllwtlwtlwlvwlwrwppsggvcvrrqcrqqvmqvmmbrrsbsfspspjpnnmpmqmcczgzffqmfmtmpppwzppzrpzrzsrrpqrpqpmpvmpvpttbqtqmtmjttqdqgggcppclcjcpcsppctpplpdpcppcmmdzmzddvhvhnhrrldllcwwbnwnssshlhrhthggtmggbjbjwwbvbttjllvrrfggngvngnmmvzzrrmddmcddztztctfccqpcpcqqvqppqcqdcdhhvhssgfgzgwwzmmnssvwwbqbhbnhnphpqqjcqcddfwfttqjtqtlttglljgjbgjgnnsqqvrvffqvqfqbffljjpffssqdsqstqqqldqqmhmsmsqqwtqwqdqgdgjjfbjffgbbrhhqghgppqgpgmpmmfzfhhfrhffgmfggpzgpzzhtzhhlbhhqbbzvvnvqnntptmmbhbdhdwwmjjcnnmsscqcbbtjtvjvwjvvmsmjmtmpmgghttcztzggpddbfbfgbbdsdrsrrqfqjjqfjjhzhtzzmdzzcgzgdzzmvmmfmjmgjmggmppbdppmzpppvfppzhhfsfwfhhpjpmmrjjpssdccjpjpwjppvdpphcpcjcfjfwjfwfjwfjjqcqcwqqqsmmmbbgdgwwpcwwdfdlflrltlgtthfhfjhhlthtddlgdggsjsrrdpdcppgttphpgpwppmpzmmrjmmvjvgvgfglfgllbqlqhllszzlwwhzzdfdcdtctptwtztfzzmjzjtjtrjrcrnrjjmwmnnbddgvgtgsstjsszmpqdmzgqflrbrspjmtzjcrmlzltmhgblghnwqvwwqwzbpnfrpdpblpjgshfccfbjfsnwvvhnjftsdnsgtzzjtzpmtfdvzrhtqpblhwgmqtgpbfvbdmsnrrrvvbstpsznvbbwgjfqjrhdvwvgptpglpfddhddmtglmjlpwlvfpbtbmgbplbzrlpdlvqzcwhbscpszgfstjpfdvfpmljlngrbgrdnnblzqrfpzsdvblpwbtnhdjclldvwvbwcwzfzbdspgwpfqjfbdbrqcshtlvcrdstnzggbwqnzbrfzbpnrtmvpbvdhcvdsdshgtvhfgdzljflppqbwclnvbhbczvrscjhlbgbfvwdjhnjsgmvwhpfgwbbmnndpnglfrmtfdzvqgfjdqfhgrhvpbqndmqnqccgwswwdsqjnbjtjbjdbqgjnmfbdvlnfwbnrdqgvgzzhmmbbdzfdvvpwhpbwbnzdcdpchrwlhfsjnhhjggvplmqggwjdsvjtpnpnqgldjjdcscrdltssjdrpcrfbgbcjfplhzgwbprfcslhpcngtszrghmwhzdqscbfrhzdwcffzvmjrmcjcstfvhplvrsglgsjnjtrpddsdfqjsndjnfmvdhfgdbzzflqhsrrwmrnlpqzmcddqbqvvzgtlztpgjnddtcnbmqsjlhmcszrmcjvwzpptlfqsmpvgnzvrjdwzpdwqgbmdgdtvjlmfczthjbcgfhbqpnmlbmrwwhfptzlbmfdhssznjcvjbmnjtnvzjhzczlrrdnttmmcbnzhqpplzqwgttwrnwfvmnptgqlfrnzvqpjfgrzwmlcwvtptvcvrlsrdwdgqfvffspmdbnnrqjttpqvhvdpbcrvzptwnhhfsqzchmncvttcdgdnlppcfzpmjpvbvqhlvplwvrmmbbggbwttwmvsqjlllsftprsmtmnzjcqfzblrllzgshfljchrjwjlpvhpbrtrsschzltrblgjnbgdnmwdggjhqggntblnhsvfgsbcblhmctbqzqwmhqnjhpzjfqpjdgwpzhczcftfcpdhvzhzccmwmrfrbqshzmtpqgpbbvfqqbjbmvnlnlwjtzrpmhdlffccrqcfgsjfszbrzrfztntchtmgmbhjgmlsqzcbtqqjzzlghtzzqmlnnvsgsvbbjfgqsqbqmqrdzwpwdgbggpdvhvnlzshhntprjdwhnwfvdjzpqgflwrvwgtmfdmfdztcbtfnjdrvgdwwczdgphnvdgrbdchprqldfjrvcsflcmlcmzqvqgsgnzcgmrhccgcmptcdzhbcdgdtppwztfstzqqzqrdzlnzthggjmpcflmbcmdrrjnnpbpqfmjbzqbtsjjgdlmgncbmgspqqvbrvzrdjscpzjsdtcdvsdwqlmwrngttswnrsbqctvhgfnnwblpcqzdmzpfchplslspmghvgcqntmlrfhgpcbpspvfhnvqvglsqzsnsdzddqpbsjhlclslngbwvvgjhwfcncqsmqwbptzvpzlzslsjjjldjpwpfrdlfbjphqcjtsgqdsdfdjhqgdhcppndwmhmmldvvmblcqcqfqhltbcbvrnghjfmtgqwtwljtczvqlnmgscjhqdhnzwhzvzzqnlsrhqvljqpgpwghfqlhjjrrhvnmnnrbnlhdcjctwtlhmhhmhjvcgzdrzmdjrvqzgnsttjdwglgwlcmbcdnjprgfsbbdzzngbqdrvwwwhbtlnnmzqdjttsrrpvlfdqnfhhtdtvmpcjgdwtbnqmwmtszdqfmbhjsjpqqddzfggwjhbtlnqfgcwbjzdtcpcpzgnrmnvwlpgmwfjlpgppdfrfvvjwsfcdqdnpcpjbqsvhttssgptqjghctrbgntlfjzdrfjccsprsjlrrwrzsmnjsqslmpdtrvhlqbnmgpjthpqdqmnvrtzlhhzzfzbrcclpmpcszhbttgrtcpgcpjwpdbfpfvgspsgtvglwthqcmcvmrfmclwlvjlsptfgmtlrnsvjrnfwzhdcsmgztpzfcvzwdztpppvqpvqfpdrsfnlhrbqwrsqjtwjmhnpwmqmpdgdhbtbpfwnmswffdqffdggrdrpmngvpzplmmwlddnhcvjjzqqfsbbtfmzdwnpvbjrshmllczhgvwwcbcbtfrfnplqjwmjlvpwwgfrtffwddwppsgtnlmpvfnhfzcsgjbqbjmbvpnqppsrvwnlzvcmjqgtbzrdsnrgwbfmrvnflgccrssfvcwgllqqbbcthzmbtnsmbzbcczhtzcvmthttpltrtdmgspctvtpvqbhmnnpnjwmhpqclmjsdrbjwvjbtzcjlqbjsvbgdwqzflnwzcfjwtrhjgfshfmwbjfwpnhjsmtpgbpwlfjjnmdlrhchmnfmgmgcrftmwbzshdwbhndgwtjbrrvbwprqppfmgfmfllpcjgrwdmtzddthsjlgjljv

41
aoc2022/src/day_1.rs Normal file
View 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
View 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));
}
}

View File

@ -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
View 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));
}
}

View File

@ -1,2 +1,5 @@
#[allow(dead_code)]
#![allow(dead_code)]
mod day_1;
mod day_2;
mod day_4;
mod day_6;