From 9754d4ce00ccfcc255c9bbcae870935741cba027 Mon Sep 17 00:00:00 2001 From: Ishan Jain Date: Sat, 3 Dec 2022 10:44:39 +0530 Subject: [PATCH] Added Day 3 part 1 --- inputs/input.txt | 2801 +++++---------------------------------------- inputs/sample.txt | 9 +- src/main.rs | 95 +- 3 files changed, 355 insertions(+), 2550 deletions(-) diff --git a/inputs/input.txt b/inputs/input.txt index d16510d..4ec3148 100644 --- a/inputs/input.txt +++ b/inputs/input.txt @@ -1,2501 +1,302 @@ -B Y -A X -B Y -A Y -A Z -B Y -B Z -C Y -A X -C X -A X -B Y -C Y -B Y -B Z -C X -C Z -A X -B Y -C Z -C Y -B X -B Y -A X -B Z -B Z -B Y -C Z -B X -B Z -C X -B Y -B Y -B Y -B Y -C X -C X -B Z -C X -B Z -C X -B Y -C X -B X -B Z -B Y -C Y -B Y -A X -B Y -B Y -C Y -B Z -B Y -B Z -C Y -B Y -A X -C X -C Y -B Y -A Z -A Z -A X -B Z -A X -A X -B Z -C Y -C Z -B Z -B X -C Y -B Y -C Y -C X -C Z -A X -B X -B Y -B Z -B Y -A X -B Z -B Y -B Z -B Z -B Y -A X -B Y -C X -A X -B Y -C X -A X -C Y -B Y -C Z -A X -B X -C X -B Z -A X -B X -B Y -B Y -B X -B Z -B Y -C Y -B Y -B Y -A X -C Y -C X -B Y -B Y -C Y -B Y -B X -B Z -B Y -B Y -C Y -B Z -B Y -B X -A X -B Z -A X -A X -B X -B Z -B X -B Y -B Y -B Y -B Y -C Y -C X -C Y -B Y -B Z -B X -B Z -C Z -C X -B Z -C X -B Y -C X -C Y -B Z -C X -C X -B Z -B Y -B Y -B Y -B Y -B Y -B Y -A X -A X -B Y -C X -B Y -B Z -B X -B Z -A Z -A X -C X -B X -A X -A X -C Z -A Z -B Y -A X -C X -C Y -C Y -A X -B Y -A X -B Z -C X -B Z -B Y -B Y -A X -C X -C X -B Y -A X -A X -C X -B Z -B Y -A X -A X -B Y -B Y -B Y -B Y -C X -B Z -B Y -B Y -A Y -B Y -B Z -A Y -B Y -C Y -B Z -B Y -B Y -C Z -A X -B Z -C X -C X -B Y -B Z -B X -A X -B X -B Y -B Z -B Z -B Z -B X -B Y -B Y -C Z -A X -C X -B Y -B X -C Y -B Y -B Y -A X -B Z -B Z -B Y -B Y -B Z -B Y -C Y -C Y -B Y -B Y -B Y -A X -A X -C Y -C Z -C Z -A Y -C Y -B Z -B Y -B Y -C Y -A X -B X -A Z -A Y -B Y -C X -B X -B X -A X -B Y -B X -C Y -B Y -B Y -B Y -B Y -B X -B Y -C X -C X -A X -B X -B X -B Y -C Y -B Z -C Y -B X -C X -C Y -B Z -C Z -A Y -B Y -A Z -B Z -C Y -A Z -B Y -C X -B Y -B Z -B Y -A X -B Y -B Y -C Y -C Y -A X -B Y -A X -C Y -B Y -C X -A X -C X -B Z -B X -B Y -B Y -B Y -B Y -B Y -C Y -A Z -C X -B X -B Z -B Y -B Y -B X -B Y -B Z -B Y -C Y -B Y -B Y -B Y -B X -B Y -B X -A Z -B Z -C Y -B Y -B Z -B X -B Z -A X -B Y -A X -B Z -B Z -C Z -B Y -B Y -B X -B Y -B Y -C X -B Z -B Z -B Y -B Z -B Y -B Z -A X -C X -C X -B Y -C Z -B X -B X -B Y -C X -C Y -B Y -C X -C Y -B X -B Z -A X -B Z -B Z -C Y -B Z -C X -B Y -C X -A X -A X -C Z -C X -B Y -C Y -B Z -C X -A X -C Y -B Z -B Y -C X -C Z -B X -A X -B Y -A X -B Y -C X -B Z -C Y -C X -B Z -B Z -B X -C Z -B Y -B Z -C X -B Y -B Y -B Y -C Z -B Y -B X -B X -C Z -B Z -A X -B Y -B Z -B Z -C Y -C Z -A Y -B Y -B Y -A X -B Y -C Z -A X -C X -B Z -C X -B Y -B X -B Y -B Y -C Y -A Z -B Y -C Z -B Z -C Z -B Z -A Y -A X -B Z -B Y -B X -B Y -B X -C X -C X -C X -B Y -C Y -B X -B Y -B X -C Y -A Z -B Z -B Y -B Y -B Y -B Y -C X -C X -A X -B Y -B Z -B Z -C Y -B Y -A X -C Y -C Y -B X -B X -A X -C X -C Y -B Z -A X -B Z -C X -B Y -B Y -C Y -B Y -C Y -A Y -B Y -B Y -B Z -A X -B Y -B Z -C X -B Z -B Z -B Y -B Y -B X -B Y -C Z -B Z -B Y -B Y -A X -B Y -B Y -B Y -B Y -B Y -B Y -C Y -B Z -B Y -C Y -A Z -C Y -B Y -C X -C Y -C Y -B Z -B Z -C Y -C X -B Z -B Y -B X -A X -A X -C X -B Z -C X -B Z -A X -B Y -B Y -C Y -A X -B Y -B Y -A X -A X -A Z -C Z -C X -A X -B Z -B Y -C Y -C Y -C Z -B Y -A X -B X -B Y -C X -C Y -B Z -C Y -B Y -B Y -B Y -B Z -B Z -B Y -B Y -C X -A X -B X -B Y -A X -B Y -B Z -B X -C X -B Y -B Y -B X -B Y -C Y -C Y -B Y -B Y -B Y -A X -C Y -B Y -B X -C Y -A X -B Y -A Y -A Z -B Z -B X -A X -C Y -C Y -B Z -A Y -B X -B Y -A X -C X -B Y -C X -B Z -B Z -C X -B Y -B Z -B Y -B Y -B Z -B Y -B X -B Z -C X -A X -C Y -C Y -B Y -B Z -A X -B X -C Y -A X -A X -A X -C X -B Z -B Y -C Z -B Y -B Y -C X -B Y -A X -A X -B Y -B Z -C X -C X -C X -A X -B X -C Z -C Y -B Y -C X -C X -B Y -B Y -C Z -A Z -A X -B Y -B X -A X -A X -B Y -B X -B Y -C Y -A Y -C X -B Y -B Z -B Y -B Z -C Z -B X -B Y -A X -B Y -B Y -C Z -A X -B Y -B Y -B Y -A X -C Y -A X -B Y -C X -C Y -C X -B Y -B Z -B Y -B Y -C X -C Y -B Y -C X -C Y -B Y -B Z -A X -A Z -B Y -C X -B X -B Y -C X -A X -A X -C Y -C Z -C X -C Y -A Y -C Y -C Z -C X -B Y -C X -A Z -B X -C X -B Y -B Z -B Z -B Y -C Y -B Z -B Y -B Z -A X -C X -B Z -C X -B Z -C X -C Y -C Y -C Y -B X -C Z -B Y -B Z -B Y -C Y -B Y -A X -B Y -C X -A Y -A Z -A X -B Y -C X -B Z -B Z -C X -A X -B Y -A Z -B Y -C X -B Z -B Y -C X -A X -B X -C Y -C Z -C Y -C Y -A X -B X -B Y -C Y -B Y -A X -B Y -B X -B Y -A X -B Y -B X -C Z -B Y -C X -B Y -A X -B X -B Z -B Y -A X -C X -B X -C X -B Y -A X -C X -B Y -A X -B Y -B Y -A X -B Y -B Z -A X -B Y -B X -C Y -B X -B Z -C X -B Y -C Z -B Y -C X -C X -A X -B Y -C Z -B Z -B Y -B Y -B Z -B Y -B X -B X -B Z -C Y -C Z -B Y -A X -B Y -B Y -C X -C X -B Z -A X -B Y -B Y -B Y -C X -B Y -B Y -C Y -B Z -C X -B Z -B X -B Y -C X -C X -A X -C X -B Y -C Y -B Y -C Z -A X -B Z -B Y -B Y -B Y -C X -C Y -B Y -B X -C X -B Y -A X -B Y -C X -A X -A X -C Y -B X -B X -B Z -B Z -B X -C Y -B Y -B Y -B Y -C X -C Y -B Z -B Z -C Z -B Y -B Y -A Z -C Y -C X -B Z -A X -A X -C X -A X -B X -B Y -B Z -B Y -A X -B Z -B Z -B Y -B Y -C Z -A X -C Y -B Y -B Y -B Z -B Y -C X -B Z -A X -B X -A X -B Y -C X -A X -C X -B Y -A X -C X -B Y -A X -B X -A Y -B Y -B Z -C Z -B Y -B Z -C X -B Z -B Y -C X -B Y -B Y -B X -A X -A Y -A X -B Y -B X -C X -B Y -B Y -B Z -C Y -A X -B Z -A X -A X -A X -A X -C Y -B X -C X -C X -A X -B Y -C Y -A X -A X -C Y -C X -C Y -B Y -B Z -A X -B Y -B Y -B Z -B Y -B X -C Y -C X -C Y -C X -B Y -A X -B Y -A X -C Y -C X -C Y -C X -C Y -B Y -B Y -A Z -A X -A X -B Z -A X -B Y -B Y -A X -A X -C Y -C Y -C Y -A X -B X -C X -B Y -A X -B X -B Y -C Y -A X -B X -B Y -B Y -B Y -C X -C X -B Y -B Y -A Z -B Y -A X -B Y -B Y -B Y -B Y -A X -B Z -C X -B Z -B Z -C Y -B Z -A X -A X -B Y -A Y -A X -A Z -C Y -C X -C X -C Z -C X -C Y -B X -B Y -A X -B Y -A X -C X -B Y -A Y -B Y -B X -B Y -A X -B Y -B Z -B Z -B X -B Z -C X -A X -B Y -B Y -B Y -A X -C X -C X -C X -B Y -C Y -A X -B Y -C Y -B X -B Z -A X -B Y -A X -C X -C Y -C Y -B Y -C Y -C X -B Z -B Y -B Y -A X -A X -B Y -B Y -B Z -C X -C X -C Y -C X -C Z -A Z -C X -B Y -A Z -B Y -A X -B Y -C X -B Y -B Y -B Z -C Y -B Y -A Z -A X -A X -C X -A Y -B Y -B Y -A X -A X -B Z -B Z -B Y -C X -C Y -C Z -A Z -B Z -A X -A Z -A X -C Y -C X -A X -A X -C Z -C X -A X -C Y -C X -A X -B Z -B Z -B Y -B Y -B Y -B Y -B Y -C Y -C X -B X -C X -B Y -B Y -A X -B Y -A X -A Y -B Z -B Y -A X -A Y -B X -B Y -C Y -B Y -C X -C Z -B X -B Z -B Y -C Z -B Y -C Y -A X -B Y -B Y -B Y -B Z -C Y -A Z -C X -B Y -B Z -C X -B Y -A X -C Y -B X -C X -A X -B Y -B Y -C X -B X -B Y -B Z -B Y -A X -B Y -B X -A X -A X -A X -B Y -C Y -C X -B Y -A X -A Z -B Z -A X -C X -B Y -B Y -C Y -B Z -B Y -C X -C Y -B Y -C Y -B Y -B Y -C X -A X -A X -A X -B Y -B Y -B Y -C X -A Z -B Y -B Z -B X -B Z -B Y -B Y -C X -A X -B Y -B Y -B X -B X -C X -C X -A X -C Y -B Y -C X -B Y -C Y -C X -B Y -C X -B Y -A X -B Z -C Z -C Y -A X -B Z -A X -C Y -C Y -B Z -B Z -A X -C X -B Y -C Z -B X -B Z -B Y -B Y -B Y -C Y -B Y -C X -A X -B Y -C Y -B Y -A X -B Y -B Y -C X -A X -B X -B X -B Z -C Z -B Y -C Y -C Y -B X -C X -C X -B Z -B Z -C X -C X -B Y -C X -B Y -B Y -B Z -B Y -B X -B Y -C X -C Y -C Y -B Y -A X -B Y -A X -C Y -C Z -C X -C Y -B Y -B Y -B Z -B Z -A Y -C X -B Y -B Z -A Z -B X -C X -B Y -B Z -B Y -C X -A X -B Z -C X -B Z -B Z -B Z -B Y -C X -B Y -B Y -B Y -A Z -B Y -B X -C X -B Y -C Y -A Z -B Z -A X -A X -B Z -A X -B Z -A X -A X -C X -C X -A Z -C X -B Z -B Z -B Y -B X -B Y -B Y -B Z -B Y -C Y -A X -C Y -B X -B Y -B Z -C X -A Z -A X -B Y -A X -A X -C X -A X -B Y -A Z -B Y -C Y -A X -B Y -A X -B Z -A Z -C X -B Z -B Y -B Z -B X -A X -B Z -C X -B X -B Z -B Z -C X -C X -C X -B Y -B Z -C X -B X -B Y -C Y -B Z -A Z -C X -B Z -B Z -B X -C Y -B Z -B Y -A X -B Y -B X -B Y -B Y -B Y -B Y -B Z -A X -B Y -B Y -B Y -B Y -C Y -A Z -C X -B X -A Y -B Y -A X -A X -B Y -A X -C Z -B Z -C Z -B Y -C Y -A X -C Y -C Y -C Y -B Y -C Y -B X -B X -C Y -A X -C Y -C X -C X -B Y -B Z -B X -B Z -B Z -B Y -C Y -B Y -C Y -B Y -B Z -B Y -A X -B Y -C Z -B X -B Y -C Z -C X -B Y -C Y -C X -A X -B Y -A X -B X -B Z -B Y -B Z -C X -B Y -A X -B Z -B Y -B Z -B X -B Z -B Z -A X -A Z -B Y -C Y -A X -B Z -B X -A X -A X -C X -B Y -C X -C Z -B Z -B Z -B Y -C Y -C X -B Y -B Y -A X -B Y -C Z -B Y -B Y -C Y -B X -B Y -B Y -B Z -B X -B Y -B X -B Y -B Z -B Z -B Z -B Z -B Z -C Y -B Y -C Y -A Y -C Y -C Z -A X -B Y -C Y -B Y -A X -C Y -B Z -A X -A X -B Z -C Y -B Y -C X -B Z -B Y -A X -B Y -C X -B Y -B Z -A X -C X -B X -B Y -A Y -C Y -C X -B Z -C Z -B X -B X -C Y -A X -A X -B Y -C Y -C X -C Y -B Z -C X -B Y -B X -B Y -C X -B Z -B Z -B Y -C X -C Z -B Y -B Z -B Z -B Z -A Y -B Y -A X -B Z -C X -C Z -A X -B Y -C X -A X -C Y -C Y -B Y -B Y -B Y -B X -B Y -B Y -C X -A X -B X -B Z -C X -B Y -C X -C Y -B Y -A X -B Y -B Y -A X -B Y -A X -C X -A X -B Y -A Y -A X -B Y -C X -C Y -B Z -A X -B Y -C X -A X -B Z -C Y -A X -C X -B Y -C X -C Z -B Y -B Z -C Z -C Y -B Y -B Y -B Y -B Y -B Y -B Y -A X -A X -B X -A X -C Y -B Z -B Y -B Y -B Y -B Y -C X -B Z -A X -A X -B X -B Y -B Z -B Z -B Y -C X -A X -B Y -B Y -B Y -B Y -A X -B Z -C Z -B Z -B Y -A X -A X -B Z -B Y -B Y -B Y -C X -B Z -B Y -B Y -B Y -B Z -C X -A X -B Z -C X -B Z -A X -A X -A X -C X -C X -B Z -C X -C X -C X -B Y -B Y -C X -A X -C X -C Y -B Z -B Y -B Z -A X -B Y -B Z -B Y -A X -B Z -B Y -B Z -A X -B Y -B X -C Y -C Y -B Y -C Y -C X -B Z -B Z -C Y -A X -B Y -B Y -C Y -C Y -A Z -B Y -B X -C X -B Y -C X -C Z -C X -C X -C Y -A X -C Z -C Z -B Z -B Y -A X -B Y -B Z -B Z -C Y -C Y -B Y -B X -B Z -A X -C X -C X -A X -B Y -C Y -C X -B Y -B Z -A Y -B Y -B Y -B Y -B Y -C Y -B Y -C Y -B Z -C Y -B Y -B Z -B Y -B Y -C X -C X -B Z -B Z -B Z -B Y -B Z -A X -A Y -C X -B Z -A X -A X -A X -C Y -A X -B Y -A Y -B Y -B Y -C X -B Y -B Y -A X -B X -A X -B Y -B Y -B X -A X -B X -B Z -C X -A X -B Y -B Z -C Y -C Z -B Y -C Y -C Z -B X -B Y -C Y -A X -B Y -C Y -C X -B X -C X -A X -C Y -C Z -B Y -A X -C Z -C X -B Y -B Y -C Y -C Z -C Y -A X -A X -C Y -A Y -A Z -A Y -C X -C Y -B Z -B Y -B Y -B Z -A X -C X -C X -B Y -A Z -B Y -B X -B Y -B Y -C Y -C Z -A Y -B Y -B Y -B Y -B Z -B Y -C Y -B X -B Y -C X -A X -B X -B Y -B Y -A X -B Z -C Z -C X -B Y -A X -A X -C Y -B Y -A X -B Y -B Y -C Z -A X -A X -B Z -C Y -B Y -B Y -A X -B Z -A X -C Z -B Y -A Z -B Y -A Z -C Z -B Z -B Y -C Z -B Y -C Y -A X -B Y -B Z -C Y -A X -C Y -C Z -B Z -A Z -B X -A Z -C Z -A X -C X -B Y -B Y -B Y -B Y -B Y -B Y -C X -B X -B Y -C X -B Y -C Y -A X -B Y -C X -A X -B Z -B Y -A X -B Y -C X -C X -B Y -A X -B Y -C X -C X -B Y -B Y -B X -C Y -B X -C X -A X -B Y -A Z -B X -B Z -A Z -A X -B Y -C Y -B Y -B Y -B Y -C Z -A X -B Z -C Y -C Y -C X -A Z -B X -C X -C Z -B Y -B Y -C Y -C X -B Y -C Y -B Y -C Y -B Z -C X -B X -B X -C Y -B Z -B Y -B Y -B Z -B Y -A X -C Y -B Y -B Y -B Z -B Y -C X -B Y -C X -B X -A X -A X -C X -B X -B Y -B X -A X -C X -B X -B Z -B Y -A X -A Y -B Y -C Y -B Y -A Z -B Y -B Y -C Y -A X -C Y -B Z -C X -C X -A X -C Y -C Y -A Y -B Y -B Z -B Y -C X -B X -C Y -C Y -A Y -C Y -B Y -B X -B Y -C Y -B Z -C X -B Y -C Y -B Y -B Y -B Y -A X -C Y -A X -B X -B X -C X -C Y -B Y -A Z -B Y -A X -B Z -B Y -C Z -B Y -C X -C X -C X -C X -B X -C X -B Z -A X -C Z -B Y -A X -C Y -A Z -B Y -C Y -B Y -B Z -A X -B Y -B Y -B Y -A X -B Z -C Y -B Y -B Y -B X -B Y -B Y -A Z -C Y -B X -C X -B Y -B Z -B Y -B Y -C X -B Z -B Y -C Y -B Y -B Y -A X -C X -A X -B Z -A X -C X -B Z -A X -B Z -C Z -A X -B Z -C X -B Y -B Y -B Y -C X -B X -A X -B Y -B Z -C X -B X -B Z -C Y -B X -B Y -C Y -B Y -C X -B Z -A Z -B Y -B Z -C X -B Z -B Y -C Y -C Y -A X -C Y -B Y -A Z -C X -C X -C X -B Y -C X -B X -B Y -B Y -A X -A X -B Z -A X -C Y -C X -B Y -C Z -B Y -B Y -C X -B Z -C Y -A X -B Y -A X -A X -B Y -B Y -B Y -B Z -A Z -B Z -B Y -A X -C X -A X -A Z -C Y -A X -C X -C X -A X -C Z -B Y -B Y -B X -B Y -C X -A X -A X -B Y -A Z -C Z -B Z -B Y -B Y -B Y -C Y -C Y -B Y -A X -B Y -B Y -C Z -B Y -A X -C Z -B Y -C X -B X -B Y -B Z -C X -C Y -B Y -B Z -B Z -A X -A X -B Y -B Y -C Y -C X -C X -A Z -C Z -B Y -B Y -A X -B Y -B Y -A X -C Y -C X -C X -C Y -C Y -B X -B Z -C X -B Y -C Y -B X -B Y -A X -C Z -C Y -C Y -A X -C Z -C X -B Y -B Y -C Y -C X -C X -C X -C Z -C Y -A X -B Y -C X -B Y -B X -C X -B Z -C X -C Z -B Z -B Y -A X -B Z -B X -C Y -B X -B Y -B Z -B Y -A Y -B Y -A X -A X -B Y -A X -C X -C Z -B Z -B Y -B Y -B Y -A X -C Z -B Y -C Z -C X -A X -B Y -A X -B Y -C Y -B Y -A X -B Y -C Z -B Z -A Y -C X -A X -A Z -C X -B X -B Y -B X -C Y -B Y -B Y -C Y -C Y -B Y -A X -B Y -B Y -B Y -C X -C Y -B X -B X -B X -A X -B Z -B Y -C Y -B Y -C X -B X -C X -C X -B Y -C X -B Z -B Z -C X -B Y -B Y -B Z -C X -C Z -B Y -A X -A X -A Y -C X -B Z -B X -B Y -B Y -C X -B Z -A X -C X -A Y -A X -C X -C Z -B Y -B Y -B Z -C X -B Z -B X -A Z -C Z -A X -B Y -A X -B Z -A X -B X -B Z -B Y -B Y -C X -B Y -B Y -A X -B Z -C Y -C X -B Y -C X -A Y -B Y -B Y -B Y -B Z -C Y -B Y -C X -B Y -A Z -C X -B X -A X -C Z -B Y -A X -B Z -B Z -C X -A Y -A X -B Z -B Z -B X -B Z -C Z -C Y -B Y -C X -B X -B Y -A Y -C X -B Z -B Y -C X -B X -C X -A X -B Z +FzQrhQpJtJMFzlpplrTWjTnTTrjVsVvvTnTs +mScqSqqgcfPCqGPZcfGNSvTNsVVNSjNvWSNsNz +fPcPGqgCcHgFzQpJJtHtJH +DZDqqlrjplDHrNCmnBcHBMCRcJzb +RQFLStFvdcBbzdJbJM +PThQtwftTPFvtTPhvtFtfFtpZZllwjRNlsqNqqZjwpGlrZ +pPwtqgwJZPJLgQqSFlqhFFlqMd +DBmCWBBDWTRGvcVRTCCnnfQlFSdlzfhfdMWQfjhhQz +drmBVVCRgprPtrZp +HznjQjvmzDMVrQnMLJMMlfWgPSlJGWWJPl +BdcqqhcdBRpFhhZBthhctdJSJJWfgGFlJCSFgbWPCDJS +NdRTZdNqBwqtthpRBTTRqdtZrsLQVzrrzjzDwDsnmrQrnsrr +HZFZCFzZWszqsRTBZTNMhmthVTmhDppmMQVPpm +wjvSbJddvrvlrvnJSJJvlJmhPlhVPVtGVpQDBVMpphQP +frbrfrcvvnvjfwbcJgrrCBRsCFsNzRgRCHCqssRH +dDFNqNqZqPLNqvqTTvCLSPdZssGHClJQJcRHJGHHcHBcsMsQ +lrjmWgWWrhjgrppQHHMQrsQRJGcBJc +lVlmnwjmdTTSvVFN +FWNFHvQPmLGwwwSHtswwln +RfMJcDdfdcfdddfZjdchrtZmSmCZVtqVnZmrnrtC +JMmJcfjjphcghpgjhRGzGzBBGPFGNBvPTpFL +cVPVwStmmcQPBQPpSCppwhHZNNqHszNBhsNRNjqHzj +MfWdDgvdbnvgMTWgvgZfzmsZJHzNhqjqjRhJ +MDWMWGndMgFDnFLDwQrPPCSrCSVrlmGS +QLZmPdRdWmMsMDWZmsLWWrhMHcHGzHvGzFcvrvzNrc +tplSbLVBlvHHcFNnSr +VqfgwLlCJWmWQTfW +nRWvlvRbtLvdMCPFGL +wrfsJNNGhNzGrTgDMDLgPMLPfq +wcVhJQhwhrrBpmVblBRGSG +HHHcggrZLcQQcQll +GzfzTRTzmmFMwSNSwdSJQtNLNB +TGbmLMFTzVVVTMzmFMfFPMHPZhnjZCpHnhgnZnPWCPZZ +MRwwpVMHRspqVqwmccDlDrcHBBZgBl +jQfQQQjWWFBgmcgDfcZg +hvvSQzSnQQSWWQWSjTZVTRMshwVCssppwV +pvrTvCvtFppCHMMZcdDFdcZM +wLjTQnqljjSnlwjqjRgLcHHHMBDMZhBMHgHcbBDh +mqjqlSNqRqwSRrWCvzGmtfTfzs +TWScDCqCQQVBWDqWHsHswwBgRJzRhhHp +dPttGrvFfGjMjnjvshsJgsJLgghRgH +rFMlGdtjPffNnnrffSNcVCDqQqCQRqQRRN +GmBRbVpPbmJcwggBBgWW +LjsTCNNtddjHqLLgWwccqgfq +nsjNjntNtjHCsDwZmwZZVmmGSvSD +bwDDgNFtMMDbFsMbFwWWVcRcSpcgjgQWhWSp +lfTJJlvdfCffccWppRjRlcSc +RnzGdJJmsMNnMFtM +bsBTFsqqTTmFZTsQBWWznWCRshlJNJlCVh +GjGnDvDjvjPppHwwpwgrPPClJhNVRCzhhzJWlWlhNlvJ +ffdgLrgdLrDjdfHPbbZbttcBbcbLmntn +TNTwwvTTHNtTHNLLVqtqTSZBJnrnhhbrFJjZjnVZgghF +cplWfRlzcWfRCZZhFrGjBfjZjn +pddzDsRpDcclzCQMWBvNSmTTSqdvPPvqwqtT +DQTttwwLtQtVSDMJDRmmSS +ffsWfvrBWrPvwJhPhPSMPMVn +WsvsggFvwNLgHtNQ +llBbVDMTlFVdFDTbVggSVsqZqZZZqqvNJZJRNRWgtv +HhpjcHHvjPsqCsWcNcsq +GfpvnPvwFDTTFFDw +GMmFGMGFFgVwQHQwwM +cJtZNtZTbThcZtcZJJtTZWJPllgNgpPvVgpjHvQpRpHQNg +hWcJZcnhcJznbcBZLqSLDfCmHqnqCLsD +zQpjLpnhnsHTnlQLrMCCHPFrvvCMPcHm +ZfgdSBtNqBwlgSDfZDwtqSFvJCvrPrVvFmwCJFvrmmFV +dfbRNZBqDtgRNBNNNljLLjhGRGGWGLGTRhjz +hhrnfBzhtzZgDgDnBfrfDZsRpMNCNNWjwCCfGQGGNGCGQC +lcdPmHLSPDSdFDpQMLjCQQQCRGpN +lJSSbmPdVdVvdHbvSDFHHPlZqgBnttzgTsssTrqgbZbsTT +FsdsShrgggLDdbSDsgrGrlWHTpfRpTjjfFTzRTRjBWWp +mPvqCmJCqJNnPvPNPCvvLTTVjHjzNWHHTWRBRVTWVz +wJLvqPZmJtccncvZmJqqrghDGQwbdSGdsgGgQgQr +zFwtNJGtNFlpnwHccZjZbcpprsmc +PWQfBWhBgQgTWQRLThBqMSVDSbbDRsVDmsmZsSZDjr +fvQfWBfLqfTqhLhCvNFttJlCwGrrCC +fNrGLNrfNrGjllRRRPmWVL +tbJdcFbSSssZSmmpFcsSbwDWVWBlllVPDnnjBFjDRnBF +ZZJcvZctgNmmvMGhQm +HhhjFRhgrcRTFLvWVJVQWJVHDHQJPP +GwCmwBfGzfSCzCfwtmtzzJVWSVJJZrbWQQQqJJDZVJ +mtfzpGdststtBmfmCwrGRFcTcvjngjFnRcLnpLLn +rrwjdwLgVmVwHrfPCJPQBCBGmPtt +ccNZqbNnMMblNpTlNpnhhBPSJsQhJtJtChPJqS +vTWvNcWNWTFvnnvcgjzDLVQLgHVwWDrW +jNPgbNHbfLJgLzfz +ShvhhFVVDShFVqMSSSvZfffvPLtBBBBJJlpfLJJv +DqhnShhMnZZwCSDCMhChrRnNrNdNQbHNNPmjmdHN +VQVZGQFnzFTSsBfgzgfs +rjlpjtDrtMLZPMtPtpPZPwCsgSHgMHCCmCTWsgBWSBmg +pjvDqLwrlDtwqtqNLvtjpPPwRNbQRncQVQddZhRhJQbJncbG +PsBSqnSdQsFhmmmnppFc +TRhNvrTCvNTHVcfHbJVTpc +rhtWvGWLrjRqdSqqLLqdld +vPhfqPJvrMrnffDDhvpMjdzGMLdLLQpllLGQ +mbmcFSScGbSCcQlzwQQlclsg +BSGVCmCTZWCGGvnvfZHqqrDhHN +GSRfrzGRhzsGChjTBBlqBgjgCTCn +wHQwtDVDHwHHDJcDWJZwzHZBqTnnBFlvjFgBqnljjvBdBZ +JNmVJpVmNtDHJWHrbfPLhbGhrzRbpr +WcWcbzNPbDwBNvWBwRMPQmJZQRQZftRZGP +LhVHFgggTHCFHhfMQQSMMGQRMLLM +qnrqppFVHphqfDsNbzjrzbrN +cwgDrdLSrBrvvhDzCljjTW +VHtVZpspQtMQsVRQppFVQVHtCdPTPTzdjvhTzTTPRvjjvWhn +QQZpMdJsQFJHtMHdScwLwLJGrSScSwqw +ZsjNflGfRfRPrZNRFcffLwJdwcLdDBnwzzzDznVn +CTGvhhTqbtbgTqLJWdDntzWWdnLw +phCMgmQGvvHCvMhbTQQFsNsNFPZSfZjffmNsll +CNpCJHLNhhSSHZPgrFlFFWgpFpmzjj +qQttDVDwQGdQGvqDQfwbcVrrlljjzzmzrVJgrr +nvMDsqqqQvfvsqDnRSZHJPPZHhLHLS +RNNrrPfDNRQwQhjscghMqs +WVZlHvnZqtlLVLvwjwhsggTstMhwTw +vGHWLJlVWlmLVqRCGCFFNfqqGf +MNzqCnvqvqvCVLBvvCVCpVcRssncrPSTWGrPSPdGTcrP +hmHwFmQjFlhtZmHwtZjjddSSGcsdPrrGcQQQRGPW +fHbbFjlhZwmtwhfjmmwmmLbpLqzqvBzLzCvLNRMbNB +tQfLrtQPrrfDSSCVlDfLSrmbBjGvWjjLmWWWpWNNppmv +wdHhRTTndnRThdvnBFGpNBMnpvvp +JdqTHTHHRdqzsJRRzTRHscJdDSGCfDlqQZqlfZrZZCffqSSQ +hQMWLsgGJMMhsCHggQWhgspDWFPzZvPvptDvzvmtdtdF +BrBlrTBrNRbfnjNQlZDztPvpmpppmzvfdd +jQlQlqQVbVcsMgMgChhJVs +MtFMCTWRFRRtCRTTRTMGJddjLdstHvBzBHzHVVpL +lZSDnbDlnZPrbHpzJJsdSVJpBL +nNghhPrlZlgDTFhCfMFJRMQF +RGpPFZPRQZPFRGvpPQPpjvpmhnnCMjhmhgBgVgMVWBVgVM +wLtfNdNHmrNthCBgCbhnngWd +srSfwHfszsNmtswlrqQDGQFDRPJGDvzRppRJ +GVFFGvVWZLFsmssFRNfVvmGGJPpJTTqDBvTpqlpDvqbBtTPl +gQhzzChzrMQhjpzlzWzJpPpBJb +ghgWjcCjMgCHWdQMhdjChCmfwmRRGZZGVHLZHRfmNwVs +DnDVhdnrfSfpcGGjQQGdJddJ +bPWPRbRsRMsHNzDqTZcGBcqZqmmN +HvwPvvzMPwDCChDVwS +vTCCvTfWFDTtRPMvfWFlDFHBqGLpLzbwBgWwqzGqbBbB +cQcSNchSJSZShVJNnZrhSqBpgwGHHtGwqtbwLbqpbr +JNnJVsJscNstNhQsjnVVNlFfMmTMFfCTfjFvfPRPPF +VLFBsgffNFNqRvbz +ChltjTdjDhHpHZvdpjjZhwCpbNrbSzzbrNGMTMMNSMbWWNSN +vQjpttQhHnLsBQVLsQ +mbzQgTzRVVbsVdQgzzVRddmztFGWNGNNWnGtFSGBsrCNWCrC +jfJjvPPwLDcHDPvDDPDppLCWCFBGWntCBnrtFcrFWTGn +wpJPLjvpTTDpwhfgzmVMbqhdhVRgzl +PlcqbWClLmnqZVLq +THwdrrhddhhfJJhwLJhpQnDVnznnmZQQnSpfpD +vrFdvGsGHhhhwHjFGrFGJHdMCCcNgbWMPccRRccMFLNPPP +tbppJqcNtJnZzRJbPFsFPHfZrrshFDjj +GdwgwlLgGCndsDFrhDHHFF +SSlLnmmvqWNqmcqb +ZPFPPTZpZSWzCMMSzPBsFvhtlQvJQQtJhsVs +dmNbmgbrwDNmbcDgwNdcwdLsnhlJlnvtsBJnhVQqqnstLB +bNGfDGgHHVwbwNwVfgmRMzCzzCSHjSRZSZCTRS +dDTffQdqQQLBLnVLLQvL +rrBHZZcgJcrLvNLtLgRLbN +cjjJhrFlhZwFFzwJzmTBBdmTsDPzDsBP +ClGrJJMNCrGQqlcPvWgnDP +ZBvbjHpSwBVVVcWjjjqQ +BLSbbwsHSTBHwmLHHLbBsSTFdrfvCrtmdzfGJzrdzGJddGfh +gljWRwmSjtJWjJtJjgjSZfVSTVVHGZSVHcVchZ +pBzLFQpPsFBGcGBTThfB +pFpQzFLPLpvQFQnLbsqqGddgjbmwRldwtWmlGWwj +PDQDMFQBMfWPvjdLLndLjrmsMj +qZqVzTRRqHtvZGGtVqTTzVjLLsrmJCddnLjrjHsrhdCr +GzwcZtqNzqvNqwzZVGRwSzbpWfFbWPlWFpNDBfQfFNNf +dfRszdzVdsjwdhLwCCqwGllHvPGPwG +SpJtBLFgcGqHQClqZF +JrttrtcTmSSLrmtBTrNgnBJjbNhhbhzRdsVdMhNjhMMhVd +MPFSCfSMqVSBGrtzlvccfQctzbzl +hZNjTHWWTZwshbLvmlWpBzmbmm +dRTTJNDNhjsJqBBMMgrJPVVr +WnVzDMjlDVWwwHgwhmgNhNNsJh +qfvrLNCcbLdvpcvbrPPqCsGhSJGTTBspTshBpTBBms +ZLvvZfrPfPCLbCFFzjVQzRnNNMVzDQ +nllbFTTpTFTBcnCjQPqQdZRQZhCb +tvWszrrztvSmzQQvrDmZRjjjPPDVqPRdZRdCPd +gfzvSsftgQHQHgQl +GVbHRRGRLpdmGWTm +gSPPltPlrlvccFccPlcJNCTpnnmpMCLMMmWfdRmMSS +FzNJRhhvPFRvQwzqjqzBHZZj +PhZSpFBPBFsNmjBVllltBj +JMGLnrrnbfffrdqRqPHnnqLDVTDDjgmRgwtmjDljlDVlwl +LHMqPqPnnqGLWJPMnndrGfSWppzvvFSChFFFvvzQSQZz +RSWWssbvnnCqZnWsRCnssWrTggNhgbNHBgQjhhQBgjNT +mcpzcppzczcDGVcPcDLLGLjmrMNTNtQNHhMHrQBQNTgN +LVpPfcjjWvsFFnFf +MpddpdCpJdJlbdMvBHMnnsHqSRvG +PWvZfFmZrrfmwWwFznBnqRRSGcsBVmVBRG +zjzzhQPQvzjLPQzwffrwrtlTCDtJDlgJLltpTTJlTl +TvTWjjzpznGttFFZccrrPrSZllcB +gNNSqHMqsMHQJHNZCDDCZDqLZdlZBD +SMQNSRNbRRHwhwhsRmtnvWVmmnbGnjmpGn +ccSVQjCQddTsFJcH +gLppBfgfmvCRFdsddTJJgb +WMLMmWGGBZWZLCtvDhlSSDGlwhSPSzSP +TpqVGVHFQGmqSqPZdccNCzzhdwCjNG +fffbbvftMrBMDDcCccCZCjlvhCCd +RLWMnbftDhnMRtfBftRJMtLMgFgHmmpmPmSmmQFPPLHHVTQS +nRvwQSDNcpVJJcJR +qZMjBhjhZMMBzLBGLGrjJbTPVTpbdPPdVbVb +ZZpmFFZlfGqfmmGMzlfmMmnWQDtHtSvnWWNSHSSstFtS +bFDGZjGDbbRSgLtN +CphJVfJWCTBgvfLHNRcwnt +WVhPWBTzzChzhhhBmrpPPCJZDQtdMlrjFQdrFqsjdrQsFG +ZBpVQHHVMMWWdmmLWw +lQhhrjcRttrqbvQLNwdDWzmNSDmStz +QbGqhcbvcsqvCCHnsCZHCnTn +tlWtQTTTJjTQtVnmrbnPWVShVC +MDMGGzsHcwFgGZBqrmmPSnbqVmNVGC +sZFPwHcMZDBRTlvQQJttTQTR +FhVRfGptMGMnZhRFBNRBCCNHHNvTNTRC +zmwrLLSjrbzmNlcvvrHvDPCN +JLwjQdSbjdbSdqJQFGVqFVMgnGHMfGVV +fffZWrJqZSHWTWHqSvrgDhggzRjttsDhpDgs +PGlBLcBBbnnbLLFbGLBjRgjFTFVzshtzpgsppz +TGCPnMPQlGnPmclPlnnQmbmHJvNvfHdqwddwvvZfCNHCfW +ClLwpspTPrTFZCdzFbZdbQ +RRMWfRgWVRMRQBZZScVczVGFbjNb +MfnvMqWmslvDhQPw +hdndSdqsTddBhdcmmNHFDcqHttPF +JjMzzMZQGwZGZJzMzZJQzGJFvPvNPtFmvmNmDvcFtvDHMv +gZwzQwJfGVJQJbGLBsSTSTdTbCWDBSnd +ZZCHZRzMZGRMhMMVVFNThrdd +SgsccSPmmgqssSlqsgcmscSqlhpFdVThjphNrdrhjdwdhFJN +vmttqTcqvLqqmPccmqSBbRWnWzQZZZZBHnQCzHDH +GgPnGdSPBpGsLTBL +rVNJjmwZqtZZshltFTtvRFsL +mqmWrZVqWjrqZMNwPMQQbsddgdsbsgPz +LZLVvjZrggHLJggSZDgrnPnQnRnppVRllntRdPFz +chMCzbqGmhNhhbBCMBdFnpfqFnltRRQnlPpQ +TChmWcMMTmBswJzZZrWrvzgg +gngRNBNRBsNFFBgfgbLLLnqdSLvLTcbLbd +GWtlChlVMllcZSDWSLbdZL +lljjGlhMGrGJpsFdRJfsfzfz +jVTdrnGQcQtTTTFQqBqsgHHFgsqf +ZZLbPLzDzPZCmsgqsBHt +wDzDlPblRDPLPvhvwtdnnhdrnrMGWMVGMThj +spjjpjvjpjmQjrpCMfSlfzrPBl +dHFntHWnnbRVFtnbcqHFzBCCCPzfPMlcCSlgllzc +RLbVWHnnSWtnHFbdbVRdNNtQsjsQTjDLwmGTmTssQwmLGJ +JbJJSLMhRMSLhNqqwFDwFNcFqL +GcpnGnznnpzpzGpffNTNTwTfwdDNNdTFdD +nllnlPGWQWHcGpzzQGGzGvHGJbVVtJSChQVbmtmVJrmrmbRm +GFsFrzwrflmtdtbltG +ggLPDngCJncNLJRDwgnllmJqjWMjhjhjWWmWjj +nBNRNPgpRgDLTgNwfsSHVBQHVHwsZr +WwvnvWvcFtwtSFSF +zBZZZRQSzMBSgSVJGjGTPTGFzCzmmj +fZDrpZZfRfMgSQDDBhgQghDHsnbrcNlWnnLWHLrHsWnllc +ZVncdPPwVPdhZngnqHWHNNvTHvlMvn +fSLjjLSGGBjTTHqvBqrMNT +RSSSDGRtSGZthTTctmtg +rtzrfJbgJHRfGRZLPR +hdVhlllmFlFPLwHmsRGGZP +nTWhRjTBTWlvNQgnJSSbrJtz +JgVTpBpfvgpTDDJFJvTgggtlFlNNMRLNNzNNZRNHMRCLlF +wbPWcSGbGqWDlnNWMMMCLMWZ +wrsGcbrcbcqwDwbcmGvQBQgTTsdVJgJsVdQf +mztrhgJtDrhgcrZmnhbnzbhcMTMPlBCPBGVGTMVGslCCPGDs +FLRQmjjFSQpQwLlPsMsCpvslvPCB +fNLLwSdSwWSWjwmrtczZhhrJzdzh +HHwCwJFmHZttZCfCSffSMHcVDMcPBRPcPRDhPghM +nvQLsTnLslnLvpzGTssnsRPDMhPgVPVgtcVMRPgVQQ +vnsTGWlTLsWTLLvNsGWlsZrwmZCJddjFmtJJNZFftj +hbjSTvSJTfcSwcPSPfTbfHszVVFpGnpJpsHFnHVVls +rtZrcQrRZZQrmZBQlCGppnppHzpVFCGR +WmLqmgNtcLNQWTbPvfPwbbdb +HzZgsdHglHlzdHsFtsNNJSlNcSpjcjlrrNVv +wqqWRPPqwmbcqPjQVvSPJJrVpv +qqBBqmWRhqRLqcBnhzzztgnTdDHnHsFsHn +rJPFVwwsrJwmdVrLWJvvRBWBvbzWlb +nDZcNGNpjTpHncvpZCDnTNZGhlWzQhWbpRRQlQhpWWSWLlQb +CDNntnCCHnvmqPfwtFdVqd +gqBwgBjCswwgqNBNCVDDTVdhlSDTDcZc +HvRRFMzRRRRMpHrtTllfhZHHSShHTf +PmlGLPrppMrrmFFmLMWRjbsjnsjwQNJWnbQjWgBN +pDggpFgRghZjBFPPnPPFrt +cwTfLwBVwCWbLcVTVVvrdndGjMHrnGJtnttdMC +NTVcWNvcBSpgNqspRQlN +DLDgFlDmNZfjfnJZSF +tctvttzvGGzvrHqtVVdwnJGSSnnjjZdWTdwW +zvpcrbpHpqJJsPbPlLlhmhglPQ +pvHHvssFCFZQNCftttdQdd +VgTGTTVGgLjDjlLGzgPVMTNwmcwQmMQfQtmdcmwMJwNm +TPjTDjfGWTLLljgzrWpZZbsqrFqhqbps +ppVLcfcwSLgpSLVLgWwtfshDNDqvWvGvlQZvDNHQHjqq +MPrzmdRrPPrCJFnMnMRRFRPdqqZQNQvjvZDGDlHhQvGNDG +BmBMBBJTMmPBJMMFCCFJRmrsTlVpVbpwLSVwLsgcwTVlVc +SSGzmFRzmRGLgSSmGMJFnvfvJnJVnJQnMl +cBpjHtjwNfcpNZtppHtCMlMPMlJBVlVQlvJPvJ +dNtNZwqWfqtqZWtHttsqHqrRrrdRTLbmmzSLmTGGmbrg +RrrddnrgnRbbgWdGrfnwgQwjDjDpvTpBQTwBPP +MHCStZJzSwvPjWQD +mcJWVHCCLcGLbdcn +PlMsdjPdGMjdPSrSjgddbLbmHHTszHZzpHmsTFvmpzZzmN +ntRJQVRfcQhcQWhnchBJWntTFTTTNTSpFtztmZFDTpDZ +hQfcfCBSwCccVJhSJnrPPGLqPlbPLCrqldgb +vgvWDMZvGpcqgqsP +tSdtjLHLQLHjdFdDddQSQhwlsGqwQlqqqhQsPhGc +tbRjtTLFRvTZDBrMrV + diff --git a/inputs/sample.txt b/inputs/sample.txt index db60e36..f17e726 100644 --- a/inputs/sample.txt +++ b/inputs/sample.txt @@ -1,3 +1,6 @@ -A Y -B X -C Z +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw diff --git a/src/main.rs b/src/main.rs index ada09f6..5ee45f5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,54 +6,15 @@ const INPUTS: [&str; 2] = [ include_str!("../inputs/input.txt"), ]; -fn parse(input: &'static str) -> impl Iterator { - input.trim().lines().map(|set| { - let mut set = set.bytes(); - let (a, b) = (set.next().unwrap(), set.nth(1).unwrap()); +fn parse(input: &'static str) -> impl Iterator { + input.trim().lines().map(|line| { + let l = line.len(); + let (a, b) = line.split_at(l / 2); - let x = match a { - b'A' => Move::Rock, - b'B' => Move::Paper, - b'C' => Move::Scissors, - _ => unreachable!(), - }; - let y = match b { - b'X' => Outcome::X, - b'Y' => Outcome::Y, - b'Z' => Outcome::Z, - _ => unreachable!(), - }; - (x, y) + (a, b) }) } -#[derive(Clone, Copy)] -enum Move { - Rock = 1, - Paper = 2, - Scissors = 3, -} - -#[derive(Clone, Copy)] -enum Outcome { - X = 0, - Y = 3, - Z = 6, -} - -#[inline] -const fn calc_move(d1: Outcome, m1: Move) -> Move { - match (d1, m1) { - (Outcome::X, Move::Rock) => Move::Scissors, - (Outcome::X, Move::Paper) => Move::Rock, - (Outcome::X, Move::Scissors) => Move::Paper, - (Outcome::Y, v) => v, - (Outcome::Z, Move::Rock) => Move::Paper, - (Outcome::Z, Move::Paper) => Move::Scissors, - (Outcome::Z, Move::Scissors) => Move::Rock, - } -} - fn main() { for input in INPUTS.iter() { let output = parse(input); @@ -63,16 +24,56 @@ fn main() { } } -fn solution(input: impl Iterator) -> i32 { +fn solution<'a>(input: impl Iterator) -> usize { let mut score = 0; for (a, b) in input { - score += b as i32; - score += calc_move(b, a) as i32; + let ai = find_items(a); + let bi = find_items(b); + + let mut intersect = [false; 256]; + + for (i, (x, y)) in ai.into_iter().zip(bi.into_iter()).enumerate() { + if x & y { + intersect[i] = true; + } + } + + for (i, v) in intersect.into_iter().enumerate() { + if v { + let c = i as u8 as char; + + let lscore = if ('a'..='z').contains(&c) { + i - 97 + 1 + } else { + i - 65 + 27 + }; + + score += lscore; + } + } } + score } +fn find_items(ip: &str) -> [bool; 256] { + let mut freq = [0; 255]; + let mut out = [false; 256]; + + for c in ip.bytes() { + freq[c as usize] += 1; + } + + for (i, v) in freq.into_iter().enumerate() { + if v >= 1 { + out[i] = true; + } + } + + out +} + #[bench] fn solution_bench(b: &mut test::Bencher) { b.iter(|| {