advent-of-code-2022

My solutions for AoC 2022
git clone https://git.sr.ht/~jbauer/advent-of-code-2022
Log | Files | Refs | README | LICENSE

commit cb1be5546961a385df7e06ade4d286e8ca2f6b5e
parent 8556a051d76c6534f5fbad3b9c5f4189881d8784
Author: Jake Bauer <jbauer@paritybit.ca>
Date:   Sat,  3 Dec 2022 13:52:14 -0500

Day 3 challenge complete

Diffstat:
Aday3/input.txt | 300+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aday3/main-bitmap.c | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aday3/main.c | 140+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 522 insertions(+), 0 deletions(-)

diff --git a/day3/input.txt b/day3/input.txt @@ -0,0 +1,300 @@ +NLBLfrNNLvqwbMfDqSjSzzSJjjggcdVs +lTRGPPZnRRHszcsZdSsccZ +CFTTFtFHTtCtDDzrmBtrBD +BJldgBWnRgWNWtllSlWShMcLcVSvVjbVVVvDVVVL +HFGFwqQPQGwHrTFpwmThMbDDVcVmLvvshj +HrpHrGPZZCQrfqlNdtMlzfMltlgn +hQLhBtBtQNQjBjNLvtLjzLJpWbjJdppSwjpCCplllJdj +FGFsmccSPTVPfVVHpJJgwlJwwWJWpCmR +sFPfPFHZTHScnzBttqzvQzqZ +MNTGMTnGWvTwwwnZhNZnWDPPdSjqsSPWjmBCSBWS +RJrtVfRlLrfHgblHJVBjqqFmjCdBJjDmJdSD +tgRftftRcRLftrpHpflHlctVwNNvZNcTwZnznQzwTzmhQwQh +sQPpQpQhnlNsJpJSQphHcZffLfgLHSfHVHHFZZ +zBCvrrWzTwqzcbtbqCbrCCwWLMfVVmmHVfqHFHFgGHLZGmVG +rvvjBzTjrwQRcpjNsRss +RrnNWJJNrplbLJBBWWZstVpmtZftptfmfsMM +GHjnwndzGcqjGgqtfMsvfsMmMvZZ +cQgwHTPjPwGwjdHHTjwccQBDLlWNrLJLNrnWrBRBlS +BBBQJGQslJtcGqfgHpPnfftwqw +RDMLDWLNTLTTNjNgvdqbqRnwqbfwPRzbVHHV +mgdNgdTSMWmSQsQsBQcFSQJr +RqQhRpsdqnvdlPBfzdVlVJPM +SSZsDmSmssGZbJVwPBSzBBMfCf +LFFNGLgLHFWrWHFmLWrLWLrsQshqQnspNcRTjnpTtjRRjh +DshNcgmDVClpCfRs +TnZjTWrtrqtWnGTrbqqTTZZwMpSVRSflRMflMjRCSfpJMSJl +wHbGHrWHWrbnbFtTZcLzLgHzzgcmpNzzzz +hfWQdhQHmPWhqdhQqpdQqWtzvwtCMCRvNCwNzMtNsHsz +lBLnJZLlFBlZjGFbVjjlJRSMzzSszzpGpstSpvMNtN +rVZVgZVgLnjFVlVQDDfhcfmWrQdTfp +zqTrVZvDLGdMMLtcpR +bClsCmQbjFtjljllntsGjGWPdcRWhMppPcpddR +mbggmBtQtlVqVzgrzDzv +LtpnGnGNFtbGntbbQPhTlRpRTzDlcClPCl +mSZHgZMhZVmWPHccllzPzcCP +sZhWvSsBqmBSqmgMqWZjQjfjrLbvGbtNFjvLtb +TvMZMTTzWHNNFPsNbvDG +dhVmwfhcnhRnRfdlGsDNNGqNLFNNTGdq +JTcVVTlThmfmrrWQZHMrpZtJ +zGMBMzPNDNcNZLBzcmLvbHltDbWjbthhqvvHtg +rdJSQSTfQrRnsRfJJQHhWgbhtQblgHWgWH +nTrlpVfSpswsrsTSdnRsfnJJPBZmMBcBZZGmZBmBMmcCNzpC +nfzcnSlRJJScTZTzJZnsNjNrHQqrWBjsBRdWBr +LgHwDLwmMDCphttsqDjNNssBGNsGQB +hvwgwvghPbpggLtmmbCmSfzFfVSlZnncJTPZHSnF +DbsnzDCsBPHDQHFD +GGcWWnrGSjBMrMlhfr +GNpqddqWLqdScWqcVnCswmzJRVzVVbJp +NzPpPBppzjbpCrrQhggqvwwqRwrwQl +SDddnLcDLncghQBWvvgR +tfSLLBmmmDJGFDLJmMMsZZssZzPTzjTpzZzP +RRCrJbSfNrRQjvvHppmpbZvv +llhVGGGMPVTMlTdVzcPVHZmvqpvqZFhHFqmjFrHF +ccGlzPMVwBGfBrLCDJrDLf +VcVGZZVMlncjTqcjsWWf +hzJRtRphQJtBRhzFpdrfrqrFsqswWrmsTmFr +LJHzBQJRhPHpzQWBRzphHRQSMZlnbGMVMVnLMGbDvvbMVl +sVdHFFmhPGVTdFmVFsgPdBBtBZjSpGSvtpBztpGjzt +HCHwlncHfpnjSSpBzz +wWQwlWWlfWcQMfCrfwTRDrHsDmPDgFVTRVsV +qllqNlmglNNdzLDddGGNSHScMHMWPcPSqptQSSHJ +bhhbChVsRjwGRCbZCcSZPpPMMWJSPMtPpW +BhTVBsbrhCTrhfbrCTTTRRfngzrnnLvdzgGvNzdzLNvrLm +nNwNPnjzPsNRHpFDHLLsLVHF +MSBMgMZmWqScCFGWWDFGVvwW +JBghBwTrgchrTbQRjztQPQbfhQ +PPBpBHGfBHGpRRPDLMmnscRLdnzmdw +bMFVTNVTVjbbrCWCsndsDwjDzwmwsnms +QQbJrCCMWCVCVMShHGPQlHhghGlt +dBQMdJQHbWMWHZLRRsmPVJmppJqG +FSrzFnPnGNrlsGps +FvwTnCzDznTwzhtHjZvbdbjQfZgPMv +gJjVQzLgLvPJdMrsDsQtdQrw +hBpmWfSfHCWNfmSppMrDDMwwMbDMlMcbcB +fhphGpfNCpNSNRhGhqPVvjvjjjTzVRPzLr +TsnznnrZsNwGNrbWbSvVgWzVSbgv +mBBFBFQFBhSHggVnmvfW +BJFcRLFFBhLpMNcdNCscZNnqld +vqwQGZNSwNQHQQZNSwvpwMdlnMfBClZBTzBnTfTJCB +sbcrjscccmPmrtFRrtcsPssmVJBfTCldnJJdVzMlBnBJTBlR +tbDmhtdDrPjbDcrDWSHGqQqvHpWSgNHh +VVWSwCpWTVWWwVbbvPJDwvDtwtMttLtH +nfNLcNsfZNnGggZNNqGlMPPDDrlvGHHrtPJMHP +fhgqfznczcjpVRjFLSLz +pvcBCrPrcPBpTccGjrQhQdwMsqdGQddswqhS +FggLnnFzzNFNmstlShMVwQtsgq +RnbzHmNfRHmmnLzRnLDRZHRrCPJBvCWWpcjvJpwWfjwvrc +HfdzzrGfRrQqrGVnznQvgjcjhhlMTlFjchFMVL +swwWWBPNwPwZbvPMFTLjTlgP +BJBJJDZtSrJqnFFfFJ +lqqMSMBMttLMjtHjqjrdBnSfcpfwCTGbCffwCcwbSfTcJf +gVFhVRZgVzJshFZVTbbFfvpcwCTCfbcG +hRWZzRVVZmsWJVRQsQmqqndQrnqnQLqnQqtBlr +SgPhCGGzczlCDVDWrlTL +jvdvFvjqwfdrNfNDlzLzRW +jzjFHnvdtdnmHZttqmbFdFqFsSBJspcgcSPQpsQPBPgpgmSG +qqmQFmrbbWWrtqTVVrgLJTzzNzrJ +nCjMGncHMJvzmmHmVV +DpjPDGwnmDhbwQqZtqqW +JlTTLLMRqlMlJMJgBLLnnCZCFrrrdTGrjPjGFr +vwVpHVHVwvHmQVsFFPZQrjrrrZPNdn +wtvmtwvpmbwVvssPflSBlRBqLMlLJBzSLb +rtrTtBwTsfjZrnqJQplNTcqqlvQT +sHzdWFzSzmGDDRVGVDGHWVhvcLLpNpqJCQqLhClhlcvqpC +VRbmRmRHGdsnggbPMMftZB +LMhtCSSftfTzdCdMhSCdMsQGQbGnbGQQMQggDNgR +FjFHWJwJjRNvQggwnDsm +plBVRRqWRHVHWFTdTthTLCfzflzh +VjVdrHFWPmTjRGSRGq +DMWMZDncQDcfpQzmTQTSQRGTGqNz +WMnsCZJCffDnfCfvnZCPhwVrHBVrBlVHrhswLh +TCZltglCZWQsMhqRHhsrHC +vbbNBbGBmNLzczNmNjrRVbhqHMsVqwHVRwqH +mzBSmzDLvPDPzcLPvGzWWSnsJstWlSsSlddWZJ +nlFJZTlBbFBVZldFnlZlCQvQrsMQzzsCdCLszvLD +hPwgVqSwmRcgSRmWgSwmsfrLPssLvQQfDPDvfMfD +htSwtWHWVRNtWmwgtnJplnbFpBbNTnBTFN +vnhBfSSvRttPJnlctl +frHVDHFwfDLVzVlJMNTHllJHMNlZ +bGGFFbqVLVVbzrFwGfdgFdwvhpCqmBpRqWpBpQpSSpSQSm +RMBMMZBBmmmhZmPjTZhZRPnNQvwWfcSvDfQWBSfdQSNdDc +LHzlVGHqVGzHGzsbCbqglbJddCcvJNDDvdDCJSQvWfwf +HlzrHHgsqbHsVGHqbsGsbbsqFmmjnTTFmnjmRQRPFTFPZtrj +LSLWRMLrLHqqwCBJqCstsG +vbQfPjndQnbcQfmndRwttBNZRsGdsCBJ +bmcnTfbvvPRRRFcmfhjHgzMrSrSMSLzSWgVhML +cqWNtsdsWdlsnBsDJwZJSzFFBZ +RhfvggPfffbVbfPmpMvRRFrZDFFbzDDZZrHwJDbwzb +QhRgvpTVpPgJVGTWWNcTtqNLtG +nppPsSPtPZtFdSWdvFvSnnPscRjjHRTLLjCmRLTmCCscrRcc +wwGqDqfMrGqlhllqhhNwzGNTjCRTmRLTHzJjzBmmRmjCLc +qrblfrVwGwbhwqghfqVhNMhtWSvFdPdQtQdgtWpvWPQWQv +cLJvcccHNcLDwCdRDvjdDR +ttPChbqhZmtWGCtZQwBdsQPQdwwsddQF +WnqbbgGVZCZnnlWhCVtbtVgMMrJLLJNrNcHMJNJTJNMp +vLvWghFhBWqGsVTV +JdpdmbrBmsQGGlVqdw +CJZMHPMZJHmzCnZHHrMjSvcDLDccNSBCDDFDjj +mDgnmRVmqgCSScsVllCj +HLTTMTHZQjZzTzprTGPwtcdlLcllWllWtCSwld +QMHHPzNrQBQGNHzQqbjnBbBbmbfjbqjb +tgPNgzzsSPhjSgbPztSbpDJZRJDTRLTTpRHpNRHZ +crlfGGFlBGBrBcrnFlrFFFCrLpHHJTcLRJJVJvDHtHZRDDRR +tFFtrdmGffnndmzhbWPgzPdsWQPW +JHhvgvzJhBGSLHhgBBSBHzdBflDfllTqLlwLqflfMcctCcfl +RjWQWrnjpjjdNQmmNNWZWpCZtqtDtMwwwcwtcDqcTDqC +PpNPjQspmWpPWRWnVQQpQsWVvvggJBvBSGGdJVhJSJBFdb +FrPTcrCGbcTCChrwNMRDMRvWRdHvzVRVTR +LJmQSmQfJnssmjsHSRFHSHzdVzSFHV +nQtgssgfstjLnmplttgFLLPPpGBrcrchBhCbhhqwPPCC +qFtZtFzstvvPvqttNrCJFWJRFCJFRRWR +ffBBfjQdmdQBfQfmLVQRPRpNNCgPNNRThdWPrr +fQVQlHnBQjBLjlvDqsvPqHMsctSb +rqhJnTTJqTchnTdhncmmgMVqtSBsBspgBtHLLWsBBWpWBHSH +bPldNljGZjNCbFCbwwGDWtBDDtsDtLwt +NjvlvvzQFFQhQqdQnMTM +DJHGghhFhHgsGgThrtrQWBPPJWWCzzzP +lTpffNTdZfrcwlCwCrWz +dmvdvffSSpjTLjFhFMRRbnRbjj +LfSqfmvfWPBPdljNNFVFzVJLNjJz +QZQnQcpMhwhZchQnwbvCCDNDCNpzpFsJpsRsRj +rchgQnvHHhQgvnwHGTffdmdTddTGfWHW +SzZGtmTjgzQCpJwpVqrVzz +NWddPllPDvdbccgcHJLCpClFLLVpFLLVLV +bbdRRWDNdPfgfWPWhdccNddRmBQTSGTTTZnmBQZjmsmnhGst +LgvFffmfVFczCWWmWCSh +MbwbTBDwbZtwBDMhSCGhscWSwVCsSw +QMtdQbqtbZTjVbMtZDMgffnFnJpFvrvFprgvgq +pztdqqzCrpvFqpJQwCvWBRGRWLWcWNBsNNQcNR +HdbjSbVhfhcRscRmNm +MDPffbjbjgFgzCZdFdgt +BmDQZbmmfbmbvhvhbgCsCl +GqVqMHwpGTLHLzwqJlCgsgShhvGvJgGS +LTpzpLFprpfmNrBBlfQP +RjRhBqZbwBbjcwgjPmRtZjZfWFfFznWQNVzQFQQnFzWmMN +vpTPDCdpPSpTSSMzNHzMvFQNNWNM +PDCpLGlGPdrlqRqbqbBhRLqR +PmHZWmJzzzppHfHdHfddDMDLhRbMRgRMNNnPgNMM +TCwBCSSjwqwVqQldTSQTtjVhtbbhbgLLbLLbMggMbDRttc +QBrwFlqCfdzHdvzF +GvgGvgfvlzlHGQWRjGMpjZLjZpGW +DVsqJtnDsJTsTqjpLTdcmWWLpTMp +NNqVhsPrrhqnJNnJNzgBvvjHCCPSjCvQQQ +pqnswpqrrtqrnMsMPMqzVfgGzHBVGVftfBGzGG +QWFQhhmDhJDmJJhhJLcTcfHVvTlTFTfVvgzG +ZDZLddWWSgDCggChRSMPspMjpnqjMPjj +MGwMFLFfssfffcGcDrnCllZtnHQCnDCZWD +dbTvTThtvVVVNWVHClWQzzlQ +TjbgBqTBvBvjRvbqvRmPGMcwSPJPfstSsfMBMf +VtCjjqgwvhCCQdSPJJdGnwwLTT +brrBsmNWlzBpSDcpSWLcWD +SSFsrrrBrCqHVVQFjj +LQQNLgvNDnNPHPDQjtGjnmjttBjVhSmJ +sbWfsMFwdCpdCdwWJVVSltVJlLSlLSft +TFcdMTbpdbwdwgTDQLgDNNrTNz +gfgSsnmnWnhhctcJ +ljjMfwwRTNbRqNlzVzjbtDvPvchvPCccChtJtPVW +GjwpwMpbjMbRMNwqzwpQgQQBfdHfSFrBmQBg +FmcmmTTMdPTGHjtGGnctcN +DgqzTqCgDgpZTrqhSbSpzZfpnHjHlnbtbHBGnGjtQHnlNGWt +zppLhfZTfDqsLMPdMVRwwM +RtsMZJSFRWbRsJbFnFzVBpBqgdRdGzGBpDDj +cTmvrlMQLHLllrhwlmfdQqBpdVpDqGdVpjVzBq +wvTfcHhhmHlhTNLFCnFnNnFnFnMFZJ +grjsjJhhNscgJFgPBnbHwLsRHzHfRLbH +ldMMSSvqtSMGmSSMqLRnlRwbrLlRLRRWwL +VtvDdTGGGCvMDMDTvdjhQjZppPNrJVpZPVFg +wctlscwwBTDnJcLNLHDN +bhhMnhqjzFRjjjPdNDDSvLdJ +MWzMzbrZZZmWQzhWbMhwlspstmnswswllBCgpG +rzmddBcmgFjRzSHHDR +vqpgbnGpqwgbpHtbtRjHTjTfFH +WWqCwvCqCJvCJvwpqvMvnvJMdPgZQQdZcWhBBBrPlLlmdQdm +ZdHTtNPNPSRBbFjjTTsr +WmDhGggmgWWJcZmMhVllzjJCrbjFzbsFFRCj +MMGDmMGGgDGgnWGWpNnvSHStLnwffZtHnw +ddZqRdqjvjZdndlfjwZQQCzmqcHLzzTTHTHzchHTmT +BPVPBBWVLbFFrWgJLpNHcPSHCPSCSCChcCPHTH +VFNbBJrGGJVZGGLwQGnjQL +NllFnzNNnNnNzmrHmDFGLGcccRGjGwHChGwwGh +StMZgPdBgbbBLLvCwCvgGwwj +PsfPtBJMtPZMJPbZVVPPMMDnjDlNlmrnmWnmqzpqmVFm +mGGCppgGWWgmGBzMVzBBBbBS +HnrRdvZvTMtSBtbZ +rHwRrjlrRwrnJrCsCDlLWCqcmCMM +zHhDNmDMNNJHfMNJzjsdvvsvbvjGdCGW +tVwttwwVVFBSFSZqSLjsqLdLCWCvGWcdLs +ZwZgwgpBFGlHgNQmGM +TNqhqvqFNWFrlqFqtDTrhTSTbLfjmjzbwMmMbjzLPDwGLPPP +scVRRQHVQVVHcRHpVgJJCRHMMZGMzCwwLZPZGMMCzLGwZw +dHsnQdHHdnBHspJRsVppFlNTSGGNBWBtTShNTFvG +hdZthMghfbbHCgQgBp +mLjTTjWrTrSCbZsLSbCS +VVPJrjqcWVmrjcmWRWTZTPcWldMNqvhnhMFdvdMhfNdldGNM +sFlsgtZFLFZzSZzpnQrJ +DjRbcjRdBrpRQpMJMJ +jNcfDqqfcDBbmqDFggpFCTpgCNhWWG +LMGGbbpLcpVVbfcpcpdvPVQPmZzJZjqSjSjgZgzqZgzTmm +BrRnBWrtRlhBjmqZCnqJgCSM +FDWWrBHHBBDHhFHttrWFttNpfLppbfcGGsfcGsFfccpcMd +jzHqjHLVqQQlHfzqlbbzqHQscvNsVrvnNZTtvNvvvcrGtv +gJCSRwRpJRtNNSTstnTT +wCMnFgnpCMPnJgpDQbqdQdQQLbzqDHfH +MpqJWmqlNNHmmwwBLLvL +QzFDFfdfQTtSGzTDVMdSFQDwHLBhHLjHjbTbHvLggccwHb +VQfsSDfGftfsdGSDSSQSFssZJCCMlMWWZPWPJMZlRp +lcqqhSsgTMgcqBBZnqZTBJJpdGpGVdRNMJHNGjRJdd +VbfCmPbtttfwwWHdGGrjHPdrRrHN +CffFFmwmDWmtCtvQbSVnTlBSDsqZhVBBSc +gPZTgmwvcnqPzhnW +GJVbDhpjsbWzjfNNNNMj +DFCbrBJsFJpBhbVFJCtvTgmtRTtQQltmwm +BLZgTJPqZzFgCGgCFlFF +ljfcDvNDtHcftNdMCQnCRnhnGjCChG +mVvSdDNDHlmHfNVlSWcSDmtpbpTzppwLPPLPPJLwTwBLPS +FHRzMqvQHvndJnFlNdhZ +fcjWWsjsSmmrgsGgjGcGWsPsnhZddffRdTtNDnZlnDnDThhT +WSPcPsGPSRGCmLcGgpHCzBVqzbQBVpqwwQ +PJzwjrVHzLPrZJHgSsNWbNbmNQtnLSSs +hGhqpTBRRGFFpMpBqGpSNlQQmWlntDbmTQSsml +MpcvMqBRhpFRNCcjwZwPZwJfwjHz +QWJsVCQDbVWbprrWSZWFcmrS +wMwvjRftMLhHfjhdMhRhjtMZrmrmZqBSpBSprvSpTzBTSF +dLNNjhhhVDlNDspN +MNmmtzlQPQmlttlQlHBGFFsHsPnGnFGWgs +CwhhwVZcRVRcCRDWLDFHWWFGss +hwdwdCwCZVSwZcrvhVwCJtbtQtpzmzQHvtpzQmmmpp +CccMdVLJcnCVhCfmjGjlfwwwMwWG +HDSbggDTNbRDHtTgrDpwmnGFfpGgfWfBFmlm +HbDzvQNzHbQLnQddZCcn +jWlqRjWwsqjHHqRDDPMPgpMLpgSMnggC +VQvFfFbdTcfhbcvCpvPrnZgLLpSgLp +PNQVbNTTcbdbfQdbmdVVGfbhBJlHWqGljJqBlqJJlsJJwqqR +WFGnWBTrvtgnjBWsFWggTPlhSfmRSRhZMcSfhZZpRmtZ +CdswHJHNsCbHLVVcZclphwcchfphZZ +LdDCLHsHzbNNNQDsJLNGgPPBvFzjggPrPTrrFB +pGFwwLTPjDcSCPpSdsqtMRMDdVQdVVQz +JBJjZgWgJHvHJgJJbBhNJvgZzsQVRqzdfQQQMMBszRzRzRfV +nlNZWZlJngbvNjgZhNvHhJvprcTclFCcTPSlTCcSpFcLrG +PdHJVCbSJmSVHdLdHbsbsqRwnlDWhZnZccWqDwqDVw +NvMFlGrQTvgpggFNwZhwWWhhqRWRhTqz +gMjvtMpNMrfFrvlffgmdjLLjCmmLHBddLJBS +zNrlzhJGdlHGHplCJQQVbLhRFRbccDSbVDLqRb +WwmwnWjvjmjZPPFFFRDZqVbqqJBS +tmjMJstnWnjvnsTnQMfrQMldrGlCrGfl +MqWfZlpjMPBgffgPNNQnVnnqRsNVLVmR +TcwGCTSvthpzCCTNVnsQVSnRnRQnNn +TbrpDvvCvCwTGDzvzhpzDzljHBZbHWZgHPZJZjJJHfPf +DWNNQQHRpsRWDQPQqHqqgJBCsjjsFFFngBzgjJzl +tMhMwTrTDLMdmMLtMMrbmVbZhJJnnFCCjnlJjjjjBzFBgZ +ttTtDmbfqWcWfqPp +QhvTQqggFsmvjsFTmqZrzzwZrHnwpnplpZ +WCJVGCSLtDPPtHDbHDbdpnrMnMrrpwlZrwpznLpl +VVJbbVfStVHJJVtGmvsfjvssFFTvvsQj +pBCqCqhWjpnWCnffJDjfWzJBZdcvwcPdvJvJcgcrdGdvggrv +tlhbHbmNTbQgbGRvbZGrcg +tVFLQNVlmTmQLQhpzMCBzCpzjjFMnz +qhWHwNqLHrLJjqgHddFchMdnnGnRhMcR +pTzTPVfZQPffNVtVVZfptRGsRbbbbcDsMMZsMZMdRn +CfzPVzCfPBzPBqvWqgBwjNLjjS diff --git a/day3/main-bitmap.c b/day3/main-bitmap.c @@ -0,0 +1,82 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <err.h> + +int +determinePriority(char item) +{ + // Upper case A-Z (returns 27-52) + if (item - 96 < 0) + return item - 38; + // Lower case a-z (returns 1-26) + else + return item - 96; +} + +int +secondPart(FILE *fp) +{ + unsigned long firstRucksack = 0; + unsigned long secondRucksack = 0; + unsigned long thirdRucksack = 0; + int sumOfPriorities = 0; + int lineCounter = 1; + + char *line = NULL; + size_t linesize = 0; + ssize_t linelen = 0; + while ((linelen = getline(&line, &linesize, fp)) != -1) + { + switch (lineCounter) + { + case 1: + lineCounter++; + for (int i = 0; i < linelen-1; i++) + firstRucksack |= ((unsigned long)1 << (determinePriority(line[i])-1)); + break; + case 2: + lineCounter++; + for (int i = 0; i < linelen-1; i++) + secondRucksack |= ((unsigned long)1 << (determinePriority(line[i])-1)); + break; + case 3: + lineCounter++; + for (int i = 0; i < linelen-1; i++) + thirdRucksack |= ((unsigned long)1 << (determinePriority(line[i])-1)); + break; + } + + if (lineCounter > 3) + { + lineCounter = 1; + unsigned long commonItem = firstRucksack & secondRucksack & thirdRucksack; + for (int i = sizeof(unsigned long)*8; i >= 0; i--) + if (commonItem & ((unsigned long)1 << i)) + sumOfPriorities += i + 1; + firstRucksack = 0; + secondRucksack = 0; + thirdRucksack = 0; + } + } + free(line); + if (ferror(fp)) + err(1, "getline"); + return sumOfPriorities; +} + +int +main (void) +{ + FILE *fp = fopen("input.txt", "r"); + if (fp == NULL) + { + err(1, "Failed to open input.txt"); + exit(EXIT_FAILURE); + } + + printf("PART 2: The sum of of the priorities of the badges is: %d\n", secondPart(fp)); + fclose(fp); + + exit(EXIT_SUCCESS); +} diff --git a/day3/main.c b/day3/main.c @@ -0,0 +1,140 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <err.h> + +int +determinePriority(char item) +{ + // Upper case A-Z (returns 27-52) + if (item - 96 < 0) + return item - 38; + // Lower case a-z (returns 1-26) + else + return item - 96; +} + +int +firstPart(FILE* fp) +{ + char firstCompartment[64] = { 0 }; + char secondCompartment[64] = { 0 }; + int sumOfPriorities = 0; + + char *line = NULL; + size_t linesize = 0; + ssize_t linelen = 0; + while ((linelen = getline(&line, &linesize, fp)) != -1) + { + // The line we got includes the newline character at the end + int compartmentSize = (linelen - 1) / 2 ; + + // Split the line into the first and second compartments + strncpy(firstCompartment, line, compartmentSize); + strncpy(secondCompartment, &line[compartmentSize], compartmentSize); + firstCompartment[compartmentSize] = '\0'; + secondCompartment[compartmentSize] = '\0'; + + // I love O(n^2) + for (int i = 0; i < compartmentSize; i++) + { + for (int j = 0; j < compartmentSize; j++) + { + if (firstCompartment[i] == secondCompartment[j]) + { + sumOfPriorities += determinePriority(firstCompartment[i]); + // Break out of both loops + i = compartmentSize; + break; + } + } + } + } + free(line); + if (ferror(fp)) + err(1, "getline"); + return sumOfPriorities; +} + +int +secondPart(FILE *fp) +{ + char firstRucksack[64] = { 0 }; + char secondRucksack[64] = { 0 }; + char thirdRucksack[64] = { 0 }; + int sumOfPriorities = 0; + int lineCounter = 1; + + char *line = NULL; + size_t linesize = 0; + ssize_t linelen = 0; + while ((linelen = getline(&line, &linesize, fp)) != -1) + { + switch (lineCounter) + { + case 1: + lineCounter++; + strncpy(firstRucksack, line, linelen - 1); + firstRucksack[linelen-1] = '\0'; + break; + case 2: + lineCounter++; + strncpy(secondRucksack, line, linelen - 1); + secondRucksack[linelen-1] = '\0'; + break; + case 3: + lineCounter++; + strncpy(thirdRucksack, line, linelen - 1); + thirdRucksack[linelen-1] = '\0'; + break; + } + + // We have the next set of three rucksacks, now we compare + if (lineCounter > 3) + { + lineCounter = 1; + // Friendship ended with O(n^2), now O(n^3) is my best friend + for (size_t i = 0 ; i < strlen(firstRucksack); i++) + { + for (size_t j = 0; j < strlen(secondRucksack); j++) + { + for (size_t k = 0; k < strlen(thirdRucksack); k++) + { + if (firstRucksack[i] == secondRucksack[j] + && firstRucksack[i] == thirdRucksack[k]) + { + sumOfPriorities += determinePriority(firstRucksack[i]); + // Break out of all loops + i = strlen(firstRucksack); + j = strlen(secondRucksack); + break; + } + + } + } + } + } + } + free(line); + if (ferror(fp)) + err(1, "getline"); + return sumOfPriorities; +} + +int +main (void) +{ + FILE *fp = fopen("input.txt", "r"); + if (fp == NULL) + { + err(1, "Failed to open input.txt"); + exit(EXIT_FAILURE); + } + + /* printf("PART 1: The sum of of the priorities of the common item types is: %d\n", firstPart(fp)); */ + /* rewind(fp); */ + printf("PART 2: The sum of of the priorities of the badges is: %d\n", secondPart(fp)); + fclose(fp); + + exit(EXIT_SUCCESS); +}