diff --git a/src/day3/1.rs b/src/day3/1.rs new file mode 100644 index 0000000..e1461a8 --- /dev/null +++ b/src/day3/1.rs @@ -0,0 +1,81 @@ +#![feature(test)] +extern crate test; + +const INPUTS: [&str; 2] = [include_str!("./sample.txt"), include_str!("./input.txt")]; + +fn parse(input: &'static str) -> impl Iterator { + input.trim().lines().map(|line| { + let l = line.len(); + let (a, b) = line.split_at(l / 2); + + (a, b) + }) +} + +fn main() { + for input in INPUTS.iter() { + let output = parse(input); + let score = solution(output); + + println!("{:?}", score); + } +} + +fn solution<'a>(input: impl Iterator) -> usize { + let mut score = 0; + + for (a, b) in input { + 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(|| { + let input = parse(INPUTS[1]); + let result = solution(input); + test::black_box(result); + }) +} diff --git a/src/day3/2.rs b/src/day3/2.rs new file mode 100644 index 0000000..242d054 --- /dev/null +++ b/src/day3/2.rs @@ -0,0 +1,67 @@ +#![feature(test)] +extern crate test; + +const INPUTS: [&str; 2] = [include_str!("./sample.txt"), include_str!("./input.txt")]; + +fn parse(input: &'static str) -> Vec<(&str, &str, &str)> { + let lines: Vec<&str> = input.trim().lines().collect(); + + lines + .chunks(3) + .map(|chunk| (chunk[0], chunk[1], chunk[2])) + .collect() +} + +fn main() { + for input in INPUTS.iter() { + let output = parse(input); + let score = solution(output); + + println!("{:?}", score); + } +} + +fn solution(input: Vec<(&str, &str, &str)>) -> usize { + let mut score = 0; + + for (a, b, c) in input.into_iter() { + let ai = find_items(a); + let bi = find_items(b); + let ci = find_items(c); + + for i in 0..128 { + if ai[i] & bi[i] & ci[i] { + 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; 128] { + let mut out = [false; 128]; + + for c in ip.bytes() { + out[c as usize] = true; + } + + out +} + +#[bench] +fn solution_bench(b: &mut test::Bencher) { + b.iter(|| { + let input = parse(INPUTS[1]); + let result = solution(input); + test::black_box(result); + }) +} diff --git a/src/day3/input.txt b/src/day3/input.txt new file mode 100644 index 0000000..4ec3148 --- /dev/null +++ b/src/day3/input.txt @@ -0,0 +1,302 @@ +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/src/day3/sample.txt b/src/day3/sample.txt new file mode 100644 index 0000000..f17e726 --- /dev/null +++ b/src/day3/sample.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw