summaryrefslogtreecommitdiff
path: root/2022/Rust/src
diff options
context:
space:
mode:
authoromagdy7 <omar.professional8777@gmail.com>2023-04-09 03:17:14 +0200
committeromagdy7 <omar.professional8777@gmail.com>2023-04-09 03:17:14 +0200
commit2ee707c5e1ef6d41acd2163f332fcd38c07e9be0 (patch)
treefa2ce8fb20167d79e738233bea851c6dcbc7091c /2022/Rust/src
parent05c20dd5c02dd317afec8c96df331960f1814270 (diff)
downloadaoc-2ee707c5e1ef6d41acd2163f332fcd38c07e9be0.tar.xz
aoc-2ee707c5e1ef6d41acd2163f332fcd38c07e9be0.zip
Added the solution for day2 in rust and added some test files
Diffstat (limited to '2022/Rust/src')
-rwxr-xr-x2022/Rust/src/day2.rs116
1 files changed, 116 insertions, 0 deletions
diff --git a/2022/Rust/src/day2.rs b/2022/Rust/src/day2.rs
index 8b13789..adfcb96 100755
--- a/2022/Rust/src/day2.rs
+++ b/2022/Rust/src/day2.rs
@@ -1 +1,117 @@
+// A -> Rock
+// B -> Paper
+// C -> Scissors
+// D -> Rock
+#[derive(Debug)]
+enum Hand {
+ Rock(u32),
+ Paper(u32),
+ Scissors(u32),
+}
+
+impl From<&str> for Hand {
+ fn from(s: &str) -> Self {
+ match s {
+ "A" | "X" => Hand::Rock(1),
+ "B" | "Y" => Hand::Paper(2),
+ "C" | "Z" => Hand::Scissors(3),
+ _ => panic!("Should've been a valid hand"),
+ }
+ }
+}
+
+fn solve_part_one(data: &str) -> u32 {
+ let mut score = 0;
+ for line in data.lines() {
+ let (h1, h2) = line.split_once(" ").unwrap();
+ match Hand::from(h1) {
+ Hand::Rock(_) => match Hand::from(h2) {
+ Hand::Rock(x) => {
+ score += x + 3;
+ }
+ Hand::Paper(x) => {
+ score += x + 6;
+ }
+ Hand::Scissors(x) => {
+ score += x;
+ }
+ },
+ Hand::Paper(_) => match Hand::from(h2) {
+ Hand::Rock(x) => {
+ score += x;
+ }
+ Hand::Paper(x) => {
+ score += x + 3;
+ }
+ Hand::Scissors(x) => {
+ score += x + 6;
+ }
+ },
+ Hand::Scissors(_) => match Hand::from(h2) {
+ Hand::Rock(x) => {
+ score += x + 6;
+ }
+ Hand::Paper(x) => {
+ score += x;
+ }
+ Hand::Scissors(x) => {
+ score += x + 3;
+ }
+ },
+ }
+ }
+ score
+}
+
+fn solve_part_two(data: &str) -> u32 {
+ let mut score = 0;
+ for line in data.lines() {
+ let (h1, h2) = line.split_once(" ").unwrap();
+ match Hand::from(h2) {
+ Hand::Rock(_) => match Hand::from(h1) {
+ Hand::Rock(_) => {
+ score += 3;
+ }
+ Hand::Paper(_) => {
+ score += 1;
+ }
+ Hand::Scissors(_) => {
+ score += 2;
+ }
+ },
+ Hand::Paper(_) => match Hand::from(h1) {
+ Hand::Rock(x) => {
+ score += x + 3;
+ }
+ Hand::Paper(x) => {
+ score += x + 3;
+ }
+ Hand::Scissors(x) => {
+ score += x + 3;
+ }
+ },
+ Hand::Scissors(_) => match Hand::from(h1) {
+ Hand::Rock(_) => {
+ score += 2 + 6;
+ }
+ Hand::Paper(_) => {
+ score += 3 + 6;
+ }
+ Hand::Scissors(_) => {
+ score += 1 + 6;
+ }
+ },
+ }
+ }
+ score
+}
+
+fn main() {
+ let data_test = include_str!("../input/day2.test");
+ let data_prod = include_str!("../input/day2.prod");
+ println!("{}", solve_part_one(data_test));
+ println!("{}", solve_part_one(data_prod));
+ println!("{}", solve_part_two(data_test));
+ println!("{}", solve_part_two(data_prod));
+}