Compare commits

..

2 Commits

Author SHA1 Message Date
9f2b61d668 day 3 in rust also. sneeeeeed 2022-12-06 01:38:05 +00:00
dd4ba849f2 Days 4 and 5 and rust. This is really REALLY shitty 2022-12-06 00:23:42 +00:00
9 changed files with 2096 additions and 0 deletions

300
rust/3/input.txt Normal file
View File

@ -0,0 +1,300 @@
qFdBBvtHHfvRlfvsqldvqjPpQmnQmjnjjjTRTLGRNG
ZCWhhCsJCzSJzSbzgsmPTGNNPPNGjgLTLjgn
WJZsbJMwJcszJcScwhVltFwBFBlqddvFdHDfqq
crtTsGTtqFThGQGCrsjTwdNJwpRdnJJwffRClpSf
PWVBPVHLvHHVgvZWBzmPpnfRSJJRQnSRflRPSNSl
gmzBzDgzmZQWLDLLgVmDrqGhsscrqDMGhcqtqcFr
HsbcdVrsbVbcLfPqqQsqqtPj
mMBFzZRnmFMRBDnDFBGZDGdDqLjtdQtPtgfPfttgtqgq
BZvZZdJMBFdJhSvhbhchcHll
GNRSqRfcNTpfGCcqjfzBpDQPWBzgDpQsPWzW
rrSdnVHlbMdLdBDzgtBtBmQt
rbFwwnLFLFwlMLrFwFhMVLrGNSTfZTRhfTqjGJRRZTCNcf
QWTnQCnWNNWmTnSPQwmqDbcscbpcjPjVPbrjpq
vJhzZNlNNgdzgzJdlGzHHcHDpjsHqrvbVrbvrD
RzRdRlhLgtCwCWSLnN
SFTJFTTwTVVSJBnSTdvNNfWbZCZWNZCNNhBv
srLrcHDcsjtLcLLcrLctjlcvbDNhmWCvNhZWGZZhNvhZmb
rclgtMPrrSgVTgJCng
DbrhDzcDffbzNbZvZWSSqSTNSVWv
gCPltPmCPglFnPFwtGPhGPwTCTdZZWZVRvWqdRqVVdTdvR
hLBhlmlstcffBzrpfj
wFLLmhMfwZLDwmMNRhZwRLDvJgldbJHPdQvcQHHJQPgH
bjrVrTSSJdQHcVll
CGCSsCCBpspBrqbSttpbqWmWZRmfFRZhZMNNLFqFLm
zWGjjBHGjzzTWMjhtDDWtPPlJZPJpvqQrmZTqQQpmr
RFbVLcBVLRcRVcCsCCqvpCZqmplqQJmPrlvQ
FLNRRSSRgScSVLLLNdFdwjHjnftBtGMgMjzHgzjWjj
znVSqnqbqzSbzTHqDDZmlcFcnhDMnDmn
LtjsvdvLJdjfFwRRCCMlChwCpMcclCcZ
LgvjjfjFQVgNTgWq
SJRJRFFCMSsGRMMwtZJRCVTgqgTVgTBCVpjTjmmWlB
ccvnnpnDVqTcBVTV
vPHprdHdpnzHSMsSrMRZJGws
GddGrcGNHnGvnCHddvCSWqTSWsTwTWShbHlhhb
gDPzLRVZgQfpRRFQDDVFDfzhSzsTBqqqnqbhnWTSSlST
QVFfFgRQQgLtgffZRfpFPfntjrcrjCmtCdMMmjMdJJJNtm
jjmNcpGCNmDqqsBfnZnGGGRLsZ
lrmlVWlQQtWllgtbQVrWBnZsJgsRLfZLhZBBBffL
rWMVQtrFlbFlSSMHVSdHHNHdcdDcddzppzzm
bTpjpjcVTLmphbLppJwqzqwJLqqzzzgRLJ
sdHNbrvNHrqPvZZZPRww
bNQCrCNtNsSlhffhVhpVWFCW
lpNnpMMZZDbNbnBjcrbjvScFmbGj
wqhdqVqdscrjdLsv
HQftVqWCfhwqtCCjWwfqzzVPZRJQgMlggZMMMZTNMNTnNRTN
fvvGbFtVmtTwgtMT
WcCcClzPCCcczJJScPWWZzBDmwbhBBHSghgDDMTHMDBD
nWPljWzZWnbcbRsNFjFFdFdVjFsj
NQrcLNmQGRfGLHHLZgbbnpjZJJJndbgnlv
DWtThDWtzzhltWTwjbdpvjbgqjgg
VtSPFWtBPBFSFBWCStshWBmlRfHfMRcfQLQLLlmCrCcN
pbmwqJnqSJVwwDPCjZZzrZfD
QtssBTvNdNvNtQvQGpGhdjPjDjczZDfjhgPPDcgjgr
GltptQpMGNNpRWlWFVFHJFHLWH
ZLLsDGGVhZcQQLhrLshrVFwHnWqJnWMnJJJnqfWfGn
jMlPdTlPlgCgFpngFWFnJfpw
TlTNbdSSTSTmTjPMTCdBPjBMrLDczsZcNrDhRNDRQRLLRVVz
HDLpBqDVVTvwGDDNRT
PlVWjfhsPMMmWtlFNTrhrrvCCCTNNbvw
lsglfgVJmsfMjJfSqSzdZnLgqcnLnp
pfCDJWBpfDffpJLgQJzzVzNrgNgNgNhNzmVr
ZnnGZbGTPZnsnRFdTlbrwdrNzrrmmWwmwVwttH
GbPGRvTnZljWnpqSMMCjqJQSCf
ZgnFgwggznFrfrwfHhNMMr
pctLCLRhPHBLMLWfBL
JJcdJcQCCJmQJppmlgndnFslsVnsvghZ
WpMgTppWGSWWJmJDpJcJJhqm
zZzjZNHvNjPvNsbZLbRLzsPcqhVJSVttdwhwmdRhtdJRVd
sLbvvCZCPSSSbbPfNlQQTQGBllCTnMnWQn
fwbwswddwSbBfDBggMBPDPhHcPWDmhHhmWnWPC
FQFlzLCzQTlrTTzvltFqFrmhPHjnhhnnchcJWcRRmRRq
lpLzlFZzCltrTNlTztQLZfSMGBNdSBVwbBNVSMSbVs
FMmgbTFdgLSgFQdjrRPrQBPDdj
ZqqWRvsfGrrPvvPC
wZzwnqccRwRNNpRSMztSMMFbgzLTFS
qTwBPfTfqQDMDrssHdvtRHccHMjR
gWSZGWzGFhnFFgnhNsRHtRdsVjZcRjHs
jgplhpJJFgnDrrwfqprwDP
CWhMSRfWhVVnRSZnVVdsLQqQMzGqLBvGMQqczv
PHbpNwrjJplttvcclLlQzzDszc
NrJbJrFNNJNPrmwrtbjtNmCfSWfWhSZZfSWCsfShfFVR
VLhRPLGLRPRSStRRLwfGqfmDwbmqbqqDlD
rBSFvppnzTbwDwlDcFWm
MJrnJTMvMsrTsPtshRNPZdSLhL
BZBrRCrnCQBBnZfGqhGGMMRcthMhMG
TLjsCdDCPTvNssjdsPsDgsgqGcPHczchtHczWzPWzzlWhG
gsTpsdNbvNNjNSpsNDTsmCnSVQFmSFwZnQBnmnQQ
llbsNsWrmbrGbWCNtBjcCFBzQFZBCFjF
LdSpwgdqSgzwJdRdLMRHLjQQjHjFHctjHBDTZj
gSppgpSJMhpzwrhblfbhhlWlnW
DwhTvvsJZWsBnDzPpBLbFp
GHtNGRGNdzbMBBtmBt
NljlCSVSHdjGSQRGlCQSCswqfWzhZfTcfzcJvshJ
lmsGNFsDGqCbFQBbffjjwpzptw
hRQdvdrvrvSngWnvnHrTMfzfzRtftzwVTwwpzB
HnSSWrvLJvWJGFDsmFLPDFcQ
bwwpGphpLghpTvpWphvJlFLJqqltjSjVlSStSR
cmszZdDdBZzcNcDCDcNsmNMcqVjMJStFRJltVPVrlVPjVJll
HcdmcCzzzQcHNcsCdpnGnhwGgnRggHvbbR
CfMBbwBGbMbDCFrDvhFFDT
mjzRjjRdSmjPnzFZgnnrTT
cmSsVcHjLHTwMfLBpBpBwM
whqqfZzgHvhSzzVNVDbpDbmbVbNpJD
GcQFntGTCCcCTMCTGBlJsJsDDWpRbWBsJpNS
FnPcrGFFdddMnCnTqgqgqPHfLjLqgSzz
zMSzzjssFdGnszRtNftqqwFHbbZw
RRPLVrgrwHqBqgwt
rPWmLCTCQlCQQmmrWLrQShJshhzdhhJjcSjlzRds
lvgvCDfPqLHppqpCCDJncbntttbBtBBVHjwtrB
TdddszSQsWcngjzVbcVZ
hRWsTRTGQhNRGhRTFSWmlpgfqlvLmplPqvvGgv
LbWFLQdWWPwWSjSHPHRfppHHDRpggR
zmqqNNzlzmnzzNCmVCmtBzpfGsfpBgDgspprcfcfsrRB
qNNVNJtNmmmNzznVJzvCTDZWhvZZjZFbWQQhFhbZSw
DjdHqJVVhHVZjhDHPWtDtZLFBRBFmSRTFSbwmRRTffTTJf
NNznnGlgMQsnQzNclzpfSRSMRmfPMmFRwBwB
vzrcGcNcPPvHvHPt
wLCcmZwWTNtZNdMSMGSCnJGGMB
RFbHsPhVvFPRjlshhrnQnGjQGSdSqJfqnQBM
HhzVlFHhPwzScmSTgL
TNlBhDNvNBFpJgpPPpDQ
jjfCdCZZqsCZsbdqPgFGGMRzSFMqQMRS
jnWPtWssCtWcmZbbtstvnrrvhVBhTNNhBHlBlL
DZwNWPDzPVWbJngrQjrNnrQcMg
GRRfttLBhhvTvmLmFcFcgFFSnjWrnsrG
TLthBWtTRLHqhlLLfmhBqVPDJVdPwzJCPPZHwdDdVd
GGVhrVSMQwQqfVssVvnWFgvgWn
jtlcRBBtQRmpWsjzFCvzWnvF
QPcRbpppDmNDtPPblZMfhZdDwdMrqSSGrq
ZRrdtBdQvQsWnnfWFZsF
bJLcMzNDLbMgwfnGMWFv
lpvhmzNDmDmlNbzbmrVVPrHRCPHQBVCP
rZllQrsRWrlQswccMVbGbVbTdcQQ
NtJCntLSHCjznfLTcGGGqWMdWM
jCtzzSFthhSSSjPJrFDlvWrlDZRpwpRZ
mQmbLjbrLQjLmTtwwWBTTvWjtt
BHSqdHclHHNFlppNqWPwfwDvTfDPPtCw
ddSGMGHcdcMhMZnBbmbZmgGJJg
lvvBzvDnlzjfPnfjnQPlldRbVbRqbqqCgsqqVpQQgVqc
NNFtGNMtTNFmJNGNZtZMwVRTTcsCpVTbbgCbgRhscp
FGNGZMtNLWmmJWGFWJGLSNtPrPnBfDzzvjnDBzpnvDBLnv
fwvQRFQvQqwpwNJrwN
BstDnBjhjBhnshSptpJzWqNppbfr
CsDjCdZcBCDcjnfDHfhnfggZMGlgQVmgMTRmgVGMMl
MwlBVqVlsgnmzwJsvjhWZhGPvjvRRWzG
QNQpQpftHdHHCHGfSpCrQNdSrDRDhchhjvjcPrRRWrPvhZjv
LtLSCTSGfHGdGwswnqsggssTqV
qDDCHjzjznTvWshZQWfnZZ
PFFmmNMMtNMVFtczcFPJNrLhZwQZQsSvvSvWvGQQJQssss
tFzrrPPNNFlzVrpRTpblRDqjTpDC
DWDrrBdpmdpBrCgDthdtfcHsqJsCqscqwfsjzHcq
TNLNFNSTQNQTSnlMcczVJjVzsqLDDfJJ
TFPZQRvvlMSPPtRWDtmDRWrBGr
LWGVZdrvWdpLGWRsjPMsHmdHdHldlj
zJzznChzzzCSfTgMhCPDmlDCbmlsmjDDQj
nSTTJhJtnShNtzwhgNrGRRWZZRvMWMtVrqGp
PbPmtNmBbPlqBvqlDJBT
LpGVDzVpVZqqSTvq
pMnWGLRLRppnGpGndrGPtgDCjMPmbPgCQmPPNN
sqcZcbZZpcZspcCCRMmznWGWdLWhwDRGTTWggT
NjFSJgVHrvfVtrGzWdSznDwLSTLn
jFrBNVVjBFNvHrFHBlBFFpMslPgPcpMPmcQPPZCgpP
frddqsThtsTfTbPcvhsrbsRLpRBNRpmDpGmRGcRNLpGp
QWJHCJwWzlHZQZHQCJJRzRqnLDGRGpnGBRnNDN
CVwHCClJjQgWCZVZQgMwSdthjrqvrSPPhdbqtPhs
TvdphBBhhhCgdLNNJJJLWz
fVcsqRVrPcnJWgDnJN
JlqsRJtssZwqwVtPwltRPsHHbFTwTFbpjHhQjTQbvpTF
cQSnPDDQJGNzwnNpZb
RHDrssVRDHRgsRFHRlrVwzzpNGZlfZdppZdwGNZb
sHCHtDgtCjVVLFChqPMhBCMcSTqB
hdbQbqcCCQcqFbCbVdcWCQQlRMBtGlRHBtBMpHhpHThZMR
LLsSLLfgJPrgPnssnmlZtlZpHGHVGfZVtZpl
PvmvgmvvnzmrSsSLJDqDNzqFDQdDwzWWbV
HNNjnLbpLGHvWJDhdWWPpWDW
lVcSNgcSVclhRlPZPRCDCR
cqmSQrwwrrVSrtQFqVNmFwjQnvjHzBbLLGjfjzHTzvnH
QmvWVppPHQQvbbvmSHSpPzfzwnWMTZFFzwFMCzLnwT
jGBljlNNjgDtGDrNjjtjqqDRnMzRLnFzCFnMfRfMzCnttF
jqNrrGdJcdgLjqDqBrDQbbmhdQQmmpPbphmbVv
ZHQCggVHHRDWvbfjGptVtLvL
nnFwnwrDDMShnhFrFLLLpjvPlPGGtLGb
dcNSMhrrTDCBCsWgCTQW
HqDDLGtDdCnhfDnwnV
PmlJsJTPlbdBTzTnzhnnCCWWzV
lSPjMScggsScgjSMMbqHLFGrRLGHRZZtdrcG
ZVVtNNppdZSdLtCPqnHhqJJFtb
zgwwQBfwmGgSrDfgrrGBggzHCnbJbqbCJFnqhHBhnHHCqJ
rvrzfmlRrgDgmrzfggvwzvdjjcccLjMjVcVcsVLjVSZR
dppcLRHpphchhNhSddjzHzWQWQLtrMsrWQCWCsMZssCZ
JGfBfJJfBqvGVlVbDBwDBDBfZnrQsMQtssMttssDsQMWZncn
qPVwlgPBmjpPhcmS
zGPnzBgPzPnPlHZlDDHnZBNCvrtcjcjmMcFzNcNFmFdc
qQpfsLTTSspqTfJdmdCtMjdtjvJcmr
bfQqqSrswLLrfpLTqprfTnDVDVBBbgHPDHnhDPgDbV
JssTnsdFztZLdNJnNtTsLNZGqlbGFBqrGMHqHBcFBqMFMH
CCgSfgPSvSfhpShSRppCdfrlqGHGGcHmclmqbbqbqlPc
wvVSVjQSSQhRVvfQChvZZsdtJstjLNLZDJnLss
CmfNNNZNqDrnDjMhZM
gdczzGtdFcddtWQgGGMnVhnjJwnrJFDPTwMP
dlvcdzdHtzQSLRSfmhLSqv
ZpFFLcHFZZRRmJVZgD
PzhrtQntzcrjCRJtbtRgBsBRVR
zdzWfCzhQzlhWfWhlvpFNlpSqcMSHHMv
NrrMgMhNQhNjQrtqtPtwVtZpggPw
TfRLndnLFCRFTFbbRDHwpVqqBBwsHwZsfH
TJFRdLlRThrlcvZcvQ
scrwRVjbQvQBzsBC
gMfVqNnVmnCBQDTvdn
SMqhWqVlmWSmqMVRSJjjpcFrcLpJrR
HtSQHQntHsHMrtHnGfHQVVzLvSBSVvVVSFNJzzVN
cmPRmpqlpPmcgTlTpjJNjjVDvDRFNVVBFD
hlmCpmqmpgqpZTlcdQHFQfbHHZttwMQwtr
VpWgbgfwCjbftwVPPpGQFQhzTBQTBGPzqFTS
dbRbDcRrsnsRrLZmLRDZldDZqTNTGqqFFzGGhSTNTFTzNmNT
MlLdHlDDHrHclMMrCwgHCCwWwCbCCjjg
GGNLhfDMVcVrcGsT
jSJQFjHbwPFSvQSHwZFvHSHrqCCrrTsqBwNBrcBNsVTsqq
QjZSjZJZPvNRZJQPnSZbJZRWLfnmgDlmhdhWgWLdMdfmhM
CgGnzPNggCJtNTgTZTPZzZZvvcDcDDdqDFcJssJDHDqvHq
jhhrrLVlmLRRnRflfVbFHHHqdVsDqcvbHVDb
jWfWwrlmRRnQmPzZNGZPBNCQTB
NzDDhwNmhvtrGmNCvWRVbcRRVTcHHcVFTbwV
LgsPlLsQgQdJsLdldtpgFFTMbnFqTcMbHqFcPncq
dgsJsLLLggljrhtGNNtSjvGm
ptzSrZtzhsmmtPrhLFRFnjnnLMsnfLRL
HvwVDHwWWgGDGdHgqVDWDMnRnTjFNTNjfLJvRRRRRR
DwDgWgQbDDDHwBBBWdwQGVHhlhlZZSSmztfcppSBhzZcZp
CWmWRzlMJqWDWqCJbqDlCBBVLMQHVMGrfMVtQZrsLL
SnhPdFFPNZsBBdHtVQ
SSPcFFgnwnSpwvcSjwzCqRzTmJbpJCRBmbbD
wQbqGWWSqwrbGWWWGjbNMJPfgfnnDmPnPNLfjN
tJFztRZCvVRCztZFZRVgmMhmgNLfRfnmDPNPhm
BFCVZzpVFlHCdbQqcTcGlJbbSG
tttfLPZZQZTlZPHHPWgMVvBnjmvjnjgGBQ
FzcNDDDrNzprrrshprhFJtVGVnjtjGvnhvVnnjnjGM
RDqJNszDPfdqPtlT
QCJdMjCQbdBjSbTHDsbWDDwHTP
zlvlmqzqGfgdNzLldrHwwPGpWDrPGZWprr
gfVfRczVqcRzmdcSQMjQSQCSjQCQ
RhhCGhRBShjjRfpwppFTfFHZHZZD
qzdqzlnPPctPdmtPdTZbwQvvwqvHHvZpwZ
nVTVTcsWmWSRhhRVrGVB
GmshRMnzqRGsPNwMwcrrpcVV
CDCbFCLvCgfDSFLslgDpwpLtTwwcPtNNtTTprt
JvSFbSbbFllJlgDvlJbgdRhRdqzBGnzshZnRRRnHBZ
ShJhtcsvvvQbnnsccVTLVTppWqddpVnLWp
NdzPrPZgPMNNrmzpTzpTCjWfzCpzVL
dZgHmZRPPZRlZmrPDtDRccvbtQQbJbRS
wqjLjwhznhBLqLWGfvSlvcmlrJsqrtJTJJ
PwbpFPQDRCDrDJTrTmvs
gbZVFbZHgwHbCdpCRMnffNLhWnnzMdzLLW
RVVGSNTTRlNqHblBNB
JfwJMvLLZwLsMJwWMJfwLHBqzFlvzpBQcqzblFbBqblq
wMCZJsgJCCCnsMHrgLLjSPSVTgShtRjTPhRRmt
lmQSSWdMHHLWgWqD
ZZtVGGGJrJvGVCwfgHNLccmNFFcqtc
vrCGPhvrTPdRBnsRTmmp
dDMDDjzCQjwCCcDgjSLLLsLNlmpplN
FqrHFTFRLCLVFBmS
JhHJhHRThrfPZPvhnTZZbWdwdwDDWtDzJDtbMtCW
ghwDzJRDwHmPthncSPncLLsPcvnv
MWCrNTCHrMVjQQMQcSdnpTLnFFdTcnTc
qbWMfWfNrWVQWfbjVBbqMfwDtqzmhmRRzGhtHhHhRwZh
fmSmnjTjrlzGlTzJdH
BrhRRQMrgQvgFFhQQbwpFvGGdZqZJqpJqHVpJGJLHdLJ
ggbDwQMsvsMQrFMFcWSPSCPmSsPfnnmP
cmNVbMrrrjcHDRcvfW
wQGdFfSThFsLhhHWvDCWDCJRCCjd
LtpStGhqrrpnfnpp
bvcccTqbgvpGndJtgdsgNd
wDQwQhtQhQRmSmjsJndJdBBJBJnlLS
hwhmRrzFVjtwzDmrVFrvPCcCMVPPvfqpCCTVVb
jRrRNPNRWjPRWPRQNjQjThTCzBBzDCFBGzgDFGGQ
dnppLwmwCnvtlqltvtnTGBThGhdFZhgzDzGccD
MvnqpLlMqCqCHMjWPPHMSHSs
NNpNNvpvBdtTrMFFMhSSwzjzchzwhzwL
VVndHqflQZZZgHSLLhjzRSmZRhcR
glGgnqbQlngnWCGJpJprtrtFrdPPGs
WqwRjzGtRzZZRRGjWBJzjwmfMTHGGssTTDsrLmmmQLMD
SNdvSdFlSNNhSPFFcPFclbQQslHmfHTDsTQMLgDTmHQQ
CNcCFvpdnWpjWwJf
PVPnVHcnRncGZqbVzHVPnnLbSMjwrzWMjSwDtWwWtwWhwDWz
pTfsQCshCllpglWWSjBMSQSrMrjM
hvpvppggCpJTvTmshgfsmZRRHqbcLPHZmPLRnmPZ
LQbhVZZmZhZjBdbGmgHqnHTmvqgnnWHr
SzCfDFFNRfsSFFMFfvprvpWzqzgqTwHTvp
CDNDFJgMDSQhjVdPJLQG
plpdLdpjjrrHJJjLrrHLFdbzzCcvzgFgcwggzPMFvvcMhM
GRtSBQNsQlMPRzRlzw
ZSTtsmBlmjLLpnpH
hglGNVSdNSghzSgCBhDFLBMBtFMMFtHtbtLL
frQZccRcqGFmFHrJ
nvfGZwvTwGTfQwvfTwfgnCSlpdnzgzslppCsCV
snTSPbQnTTnQgbmsTJsLfZwjffhpLnGRjpGfjL
dcNWcNHHlNtWHHlCtltWNFNMLZwjpGfpmrZfrFprrRGpwZfp
HmdNWCmDMVvQPDgqJs
GGFtSngQLfnSnQffgPnRgFRGRwmRJvwbBbJDwjvTbjrwhJvJ
WHClslcNNWcqNWlCZdcHsVrThBwBjbhDTDBhrvDZJTwm
NWVqqcHHNpsNcNVdVlhCMlHQQMQQzLfzQPttFGPMLSLgtF

27
rust/3/part1.rs Normal file
View File

@ -0,0 +1,27 @@
use std::{
collections::{hash_map::RandomState, HashSet},
fs::File,
io::{BufRead, BufReader},
iter::FromIterator,
};
fn main() -> () {
let input = File::open("input.txt").unwrap();
let buf = BufReader::new(input);
let score: u32 = buf.lines().map(|line| {
let mut firsthalf = line.unwrap();
let secondhalf = firsthalf.split_off(firsthalf.len() / 2);
let set_a = HashSet::<_, RandomState>::from_iter(firsthalf.chars());
let set_b = HashSet::<_, RandomState>::from_iter(secondhalf.chars());
set_a.intersection(&set_b).map(|&char| {
let score: u32 = match char {
'A'..='Z' => char as u32 - 'A' as u32 + 27,
'a'..='z' => char as u32 - 'a' as u32 + 1,
_ => panic!("nigger, that's invalid")
};
score
}).sum::<u32>()
}).sum();
println!("{:?}", score);
}

29
rust/3/part2.rs Normal file
View File

@ -0,0 +1,29 @@
#![feature(iter_array_chunks)]
use std::{
collections::{hash_map::RandomState, HashSet},
fs::File,
io::{BufRead, BufReader},
iter::FromIterator,
};
fn main() -> () {
let input = File::open("input.txt").unwrap();
let buf = BufReader::new(input);
let score: u32 = buf.lines().array_chunks::<3>().map(|lines| {
let intersection = lines.iter().map(|line| {
HashSet::<_, RandomState>::from_iter(line.as_ref().unwrap().chars())
}).reduce(|acc, set| acc.intersection(&set).cloned().collect()).unwrap();
assert!(intersection.len() == 1);
intersection.into_iter().map(|char| {
let score: u32 = match char {
'A'..='Z' => char as u32 - 'A' as u32 + 27,
'a'..='z' => char as u32 - 'a' as u32 + 1,
_ => panic!("nigger, that's invalid")
};
score
}).sum::<u32>()
}).sum();
println!("{:?}", score);
}

1000
rust/4/input.txt Normal file

File diff suppressed because it is too large Load Diff

48
rust/4/part1.rs Normal file
View File

@ -0,0 +1,48 @@
use std::{
fs::File,
io::{BufRead, BufReader},
};
struct Pair {
low: i32,
high: i32,
}
impl Pair {
fn new(input: &str) -> Self {
let tmpvec = input
.split('-')
.map(|val| val.parse::<i32>().unwrap())
.collect::<Vec<_>>();
return Self {
low: tmpvec[0],
high: tmpvec[1],
};
}
fn contains_fully(self: &Self, other: &Self) -> bool {
self.low <= other.low && self.high >= other.high
}
}
fn main() -> () {
let path = "input.txt";
let input = File::open(path).unwrap();
let buf = BufReader::new(input);
let score: i32 = buf
.lines()
.map(|line| {
let line = line.unwrap();
let pairs = line
.split(',')
.map(|pair_str| Pair::new(pair_str))
.collect::<Vec<_>>();
pairs[0].contains_fully(&pairs[1]) || pairs[1].contains_fully(&pairs[0])
})
.map(|b| if b { 1 } else { 0 })
.sum();
println!("{}", score);
}

51
rust/4/part2.rs Normal file
View File

@ -0,0 +1,51 @@
use std::{
fs::File,
io::{BufRead, BufReader},
};
struct Pair {
low: i32,
high: i32,
}
impl Pair {
fn new(input: &str) -> Self {
let tmpvec = input
.split('-')
.map(|val| val.parse::<i32>().unwrap())
.collect::<Vec<_>>();
return Self {
low: tmpvec[0],
high: tmpvec[1],
};
}
fn contains_fully(self: &Self, other: &Self) -> bool {
self.low <= other.low && self.high >= other.high
}
fn contains_partially(self: &Self, other: &Self) -> bool {
self.low <= other.high && self.high >= other.low
}
}
fn main() -> () {
let path = "input.txt";
let input = File::open(path).unwrap();
let buf = BufReader::new(input);
let score: i32 = buf
.lines()
.map(|line| {
let line = line.unwrap();
let pairs = line
.split(',')
.map(|pair_str| Pair::new(pair_str))
.collect::<Vec<_>>();
pairs[0].contains_partially(&pairs[1])
})
.map(|b| if b { 1 } else { 0 })
.sum();
println!("{}", score);
}

512
rust/5/input.txt Normal file
View File

@ -0,0 +1,512 @@
[T] [D] [L]
[R] [S] [G] [P] [H]
[G] [H] [W] [R] [L] [P]
[W] [G] [F] [H] [S] [M] [L]
[Q] [V] [B] [J] [H] [N] [R] [N]
[M] [R] [R] [P] [M] [T] [H] [Q] [C]
[F] [F] [Z] [H] [S] [Z] [T] [D] [S]
[P] [H] [P] [Q] [P] [M] [P] [F] [D]
1 2 3 4 5 6 7 8 9
move 3 from 8 to 9
move 2 from 2 to 8
move 5 from 4 to 2
move 7 from 1 to 4
move 3 from 8 to 2
move 3 from 2 to 7
move 1 from 7 to 4
move 3 from 2 to 9
move 4 from 7 to 9
move 1 from 5 to 2
move 2 from 3 to 4
move 5 from 9 to 5
move 6 from 9 to 3
move 5 from 9 to 5
move 1 from 9 to 7
move 2 from 3 to 1
move 7 from 3 to 9
move 2 from 7 to 2
move 5 from 2 to 4
move 1 from 2 to 9
move 2 from 1 to 9
move 7 from 6 to 1
move 2 from 7 to 3
move 2 from 3 to 9
move 1 from 7 to 4
move 1 from 9 to 2
move 3 from 1 to 8
move 2 from 3 to 4
move 5 from 9 to 2
move 1 from 3 to 9
move 8 from 5 to 7
move 1 from 6 to 1
move 15 from 4 to 1
move 4 from 2 to 5
move 5 from 9 to 7
move 1 from 9 to 5
move 5 from 1 to 2
move 3 from 8 to 9
move 1 from 7 to 6
move 11 from 1 to 2
move 7 from 5 to 3
move 4 from 2 to 6
move 7 from 3 to 4
move 3 from 5 to 9
move 2 from 2 to 5
move 5 from 1 to 8
move 2 from 6 to 8
move 3 from 8 to 9
move 9 from 4 to 9
move 9 from 7 to 4
move 2 from 8 to 1
move 1 from 8 to 7
move 6 from 2 to 7
move 5 from 2 to 4
move 5 from 7 to 2
move 2 from 1 to 7
move 2 from 6 to 4
move 7 from 7 to 1
move 3 from 2 to 6
move 1 from 8 to 7
move 2 from 9 to 3
move 2 from 3 to 1
move 1 from 2 to 5
move 4 from 6 to 5
move 2 from 2 to 3
move 3 from 5 to 7
move 1 from 5 to 3
move 9 from 1 to 7
move 2 from 9 to 5
move 13 from 4 to 1
move 5 from 7 to 2
move 3 from 3 to 1
move 2 from 2 to 9
move 1 from 2 to 7
move 5 from 5 to 6
move 2 from 2 to 4
move 5 from 1 to 3
move 9 from 7 to 8
move 2 from 9 to 5
move 3 from 5 to 4
move 5 from 9 to 2
move 10 from 4 to 8
move 1 from 4 to 1
move 2 from 8 to 4
move 4 from 8 to 2
move 3 from 6 to 8
move 7 from 8 to 7
move 10 from 9 to 3
move 7 from 3 to 2
move 11 from 2 to 3
move 13 from 3 to 9
move 1 from 6 to 3
move 1 from 1 to 2
move 1 from 2 to 8
move 3 from 3 to 4
move 1 from 2 to 9
move 1 from 4 to 1
move 10 from 8 to 3
move 11 from 9 to 7
move 1 from 6 to 2
move 14 from 7 to 1
move 2 from 2 to 9
move 4 from 7 to 6
move 1 from 2 to 4
move 3 from 4 to 2
move 4 from 2 to 9
move 10 from 3 to 4
move 3 from 6 to 1
move 5 from 9 to 5
move 5 from 5 to 8
move 1 from 9 to 7
move 2 from 9 to 6
move 1 from 9 to 8
move 2 from 4 to 8
move 1 from 4 to 5
move 2 from 3 to 1
move 2 from 3 to 7
move 27 from 1 to 2
move 2 from 7 to 1
move 9 from 4 to 6
move 9 from 6 to 5
move 5 from 8 to 6
move 26 from 2 to 3
move 1 from 2 to 5
move 1 from 2 to 7
move 1 from 8 to 4
move 1 from 7 to 8
move 24 from 3 to 5
move 1 from 8 to 5
move 1 from 4 to 3
move 1 from 7 to 1
move 1 from 8 to 9
move 7 from 1 to 7
move 8 from 6 to 4
move 4 from 7 to 6
move 1 from 3 to 9
move 2 from 9 to 1
move 3 from 7 to 9
move 8 from 4 to 6
move 3 from 9 to 1
move 1 from 3 to 6
move 1 from 8 to 2
move 10 from 5 to 4
move 1 from 3 to 8
move 13 from 5 to 3
move 1 from 2 to 9
move 1 from 8 to 9
move 1 from 3 to 8
move 1 from 9 to 2
move 3 from 6 to 9
move 7 from 4 to 9
move 4 from 3 to 9
move 2 from 6 to 8
move 2 from 4 to 5
move 10 from 9 to 3
move 1 from 1 to 9
move 1 from 4 to 8
move 1 from 1 to 4
move 1 from 4 to 5
move 4 from 6 to 3
move 1 from 9 to 5
move 1 from 6 to 9
move 2 from 6 to 5
move 1 from 9 to 2
move 1 from 6 to 7
move 18 from 5 to 2
move 22 from 3 to 7
move 19 from 7 to 1
move 3 from 8 to 5
move 4 from 9 to 3
move 2 from 7 to 2
move 1 from 8 to 1
move 19 from 1 to 3
move 2 from 7 to 5
move 13 from 3 to 9
move 4 from 1 to 2
move 3 from 5 to 1
move 11 from 9 to 1
move 11 from 2 to 8
move 3 from 9 to 3
move 3 from 5 to 2
move 2 from 1 to 4
move 5 from 2 to 7
move 12 from 1 to 5
move 2 from 4 to 5
move 9 from 5 to 8
move 1 from 5 to 3
move 4 from 2 to 3
move 2 from 7 to 5
move 6 from 2 to 8
move 17 from 8 to 9
move 2 from 9 to 6
move 2 from 7 to 1
move 15 from 9 to 6
move 2 from 2 to 4
move 9 from 8 to 5
move 2 from 1 to 3
move 12 from 6 to 2
move 2 from 3 to 9
move 5 from 6 to 3
move 4 from 5 to 3
move 11 from 3 to 4
move 2 from 9 to 4
move 6 from 5 to 2
move 13 from 4 to 3
move 1 from 4 to 5
move 1 from 4 to 8
move 18 from 2 to 6
move 2 from 5 to 3
move 1 from 8 to 3
move 1 from 2 to 5
move 1 from 7 to 8
move 28 from 3 to 6
move 2 from 3 to 4
move 3 from 5 to 9
move 2 from 5 to 9
move 3 from 9 to 3
move 5 from 3 to 4
move 1 from 9 to 3
move 1 from 9 to 1
move 1 from 3 to 4
move 45 from 6 to 2
move 1 from 8 to 3
move 2 from 4 to 6
move 5 from 4 to 2
move 1 from 3 to 7
move 3 from 2 to 9
move 1 from 4 to 8
move 3 from 6 to 1
move 42 from 2 to 8
move 2 from 9 to 2
move 4 from 2 to 6
move 2 from 2 to 7
move 1 from 9 to 6
move 2 from 8 to 9
move 4 from 1 to 8
move 1 from 6 to 4
move 1 from 4 to 8
move 1 from 2 to 5
move 3 from 7 to 4
move 39 from 8 to 3
move 7 from 8 to 5
move 8 from 5 to 7
move 35 from 3 to 1
move 4 from 3 to 7
move 10 from 7 to 2
move 2 from 9 to 6
move 3 from 4 to 2
move 1 from 7 to 5
move 1 from 7 to 8
move 1 from 5 to 4
move 12 from 1 to 6
move 1 from 8 to 1
move 1 from 4 to 5
move 14 from 6 to 8
move 9 from 8 to 6
move 5 from 6 to 1
move 11 from 2 to 9
move 1 from 9 to 8
move 6 from 8 to 3
move 6 from 9 to 2
move 8 from 1 to 9
move 3 from 3 to 6
move 7 from 1 to 4
move 1 from 5 to 9
move 8 from 9 to 8
move 7 from 6 to 8
move 1 from 9 to 3
move 3 from 6 to 4
move 3 from 9 to 1
move 4 from 3 to 2
move 1 from 6 to 7
move 1 from 4 to 2
move 13 from 1 to 7
move 6 from 4 to 8
move 1 from 7 to 3
move 1 from 4 to 6
move 1 from 9 to 5
move 1 from 3 to 5
move 19 from 8 to 9
move 1 from 6 to 5
move 6 from 9 to 2
move 2 from 5 to 8
move 1 from 5 to 2
move 4 from 1 to 4
move 8 from 9 to 4
move 3 from 9 to 8
move 2 from 9 to 1
move 6 from 7 to 5
move 12 from 4 to 2
move 6 from 8 to 3
move 1 from 4 to 1
move 1 from 3 to 1
move 13 from 2 to 3
move 4 from 5 to 3
move 1 from 4 to 9
move 1 from 8 to 9
move 12 from 3 to 2
move 1 from 9 to 1
move 2 from 5 to 9
move 3 from 9 to 5
move 1 from 7 to 5
move 3 from 7 to 3
move 1 from 5 to 4
move 1 from 5 to 8
move 9 from 2 to 3
move 2 from 2 to 3
move 3 from 1 to 9
move 1 from 8 to 9
move 3 from 9 to 1
move 9 from 2 to 6
move 1 from 9 to 5
move 6 from 2 to 3
move 2 from 6 to 9
move 3 from 6 to 3
move 1 from 4 to 3
move 2 from 9 to 6
move 2 from 7 to 2
move 2 from 2 to 8
move 24 from 3 to 7
move 2 from 5 to 6
move 2 from 8 to 2
move 7 from 2 to 8
move 8 from 3 to 6
move 2 from 1 to 3
move 1 from 1 to 2
move 1 from 5 to 2
move 15 from 7 to 4
move 9 from 7 to 9
move 7 from 9 to 1
move 5 from 8 to 1
move 4 from 1 to 4
move 19 from 4 to 3
move 22 from 3 to 5
move 1 from 7 to 5
move 9 from 5 to 4
move 6 from 1 to 3
move 6 from 3 to 1
move 4 from 5 to 4
move 1 from 2 to 1
move 1 from 2 to 6
move 4 from 6 to 1
move 1 from 3 to 6
move 3 from 6 to 3
move 2 from 9 to 8
move 2 from 5 to 3
move 2 from 5 to 1
move 10 from 6 to 4
move 4 from 4 to 9
move 7 from 4 to 3
move 2 from 8 to 7
move 4 from 9 to 3
move 5 from 5 to 7
move 1 from 5 to 1
move 1 from 6 to 3
move 1 from 8 to 4
move 1 from 8 to 3
move 13 from 4 to 5
move 1 from 1 to 8
move 6 from 5 to 3
move 1 from 7 to 6
move 5 from 7 to 6
move 9 from 1 to 8
move 1 from 8 to 4
move 1 from 7 to 1
move 1 from 4 to 1
move 5 from 3 to 7
move 3 from 7 to 9
move 1 from 5 to 4
move 6 from 8 to 6
move 1 from 9 to 3
move 2 from 9 to 5
move 7 from 5 to 9
move 1 from 7 to 5
move 2 from 5 to 3
move 10 from 6 to 8
move 2 from 6 to 1
move 1 from 4 to 9
move 1 from 7 to 5
move 8 from 8 to 2
move 1 from 1 to 7
move 1 from 9 to 7
move 1 from 5 to 1
move 3 from 9 to 8
move 7 from 8 to 7
move 6 from 7 to 1
move 1 from 8 to 7
move 4 from 7 to 1
move 16 from 3 to 7
move 4 from 3 to 1
move 5 from 7 to 8
move 16 from 1 to 4
move 9 from 1 to 7
move 1 from 3 to 4
move 15 from 4 to 8
move 1 from 3 to 1
move 2 from 1 to 6
move 2 from 4 to 9
move 17 from 8 to 2
move 6 from 9 to 5
move 8 from 7 to 8
move 2 from 6 to 9
move 4 from 5 to 7
move 2 from 8 to 5
move 1 from 5 to 9
move 11 from 2 to 6
move 4 from 6 to 1
move 5 from 2 to 8
move 2 from 9 to 2
move 1 from 9 to 3
move 3 from 1 to 8
move 1 from 3 to 6
move 7 from 6 to 9
move 2 from 5 to 4
move 6 from 7 to 4
move 4 from 8 to 1
move 1 from 5 to 2
move 1 from 6 to 1
move 7 from 9 to 8
move 2 from 7 to 9
move 9 from 2 to 9
move 5 from 9 to 3
move 3 from 2 to 8
move 4 from 8 to 7
move 9 from 7 to 2
move 3 from 1 to 3
move 14 from 8 to 1
move 2 from 8 to 3
move 1 from 9 to 4
move 3 from 7 to 9
move 8 from 3 to 9
move 2 from 2 to 7
move 12 from 1 to 8
move 4 from 1 to 6
move 2 from 6 to 7
move 1 from 6 to 7
move 9 from 4 to 7
move 9 from 7 to 4
move 1 from 1 to 6
move 2 from 3 to 6
move 2 from 6 to 8
move 12 from 9 to 8
move 2 from 6 to 9
move 2 from 9 to 7
move 1 from 8 to 5
move 5 from 7 to 5
move 1 from 9 to 1
move 3 from 4 to 1
move 5 from 4 to 8
move 4 from 1 to 7
move 1 from 4 to 2
move 19 from 8 to 4
move 2 from 7 to 5
move 14 from 8 to 5
move 2 from 7 to 8
move 3 from 9 to 8
move 19 from 4 to 2
move 9 from 2 to 4
move 2 from 7 to 8
move 15 from 5 to 9
move 15 from 9 to 8
move 1 from 5 to 9
move 11 from 8 to 7
move 4 from 5 to 8
move 1 from 5 to 9
move 2 from 9 to 5
move 2 from 2 to 6
move 14 from 2 to 9
move 12 from 8 to 9
move 3 from 8 to 4
move 7 from 9 to 2
move 4 from 7 to 9
move 1 from 6 to 9
move 1 from 7 to 5
move 1 from 6 to 2
move 3 from 5 to 4
move 19 from 9 to 4
move 1 from 5 to 1
move 1 from 9 to 8
move 1 from 1 to 7
move 1 from 8 to 9
move 4 from 7 to 2
move 3 from 7 to 6
move 18 from 4 to 2
move 17 from 2 to 3
move 2 from 6 to 8
move 17 from 3 to 6
move 13 from 2 to 1
move 2 from 8 to 3
move 2 from 2 to 9
move 6 from 1 to 9
move 1 from 3 to 4
move 1 from 3 to 9
move 8 from 6 to 4
move 20 from 4 to 8
move 3 from 4 to 8
move 15 from 8 to 2
move 11 from 2 to 6
move 2 from 1 to 7
move 7 from 9 to 8
move 6 from 9 to 3
move 1 from 6 to 5

64
rust/5/part1.rs Normal file
View File

@ -0,0 +1,64 @@
use std::{
fs::File,
io::{BufRead, BufReader},
};
enum State {
Parsing,
Moving,
}
// I hate everything about this
fn main() -> () {
let path = "input.txt";
let input = File::open(path).unwrap();
let buf = BufReader::new(input);
let stack_char_width = 4;
let mut stacks = Vec::<Vec<String>>::new();
let mut state = State::Parsing;
for line in buf.lines() {
let line = line.unwrap();
match state {
State::Parsing => {
if stacks.len() == 0 {
for _ in 0..(line.len() + 1) / stack_char_width {
stacks.push(Vec::new());
}
}
if line != "" {
for i in 0..stacks.len() {
let idx = i * stack_char_width + 1;
let char = &line[idx..idx + 1];
if char != " " {
stacks[i].push(char.to_owned());
}
}
} else {
state = State::Moving;
for stack in &mut stacks {
stack.pop();
stack.reverse();
}
}
}
State::Moving => {
let tokens = line
.split(' ')
.filter_map(|tok| tok.parse::<usize>().ok())
.collect::<Vec<_>>();
for _ in 0..tokens[0] {
let tmp = stacks[tokens[1] - 1].pop().unwrap();
stacks[tokens[2] - 1].push(tmp);
}
}
};
}
println!(
"{}",
stacks.into_iter().fold(String::from(""), |acc, mut stack| {
acc + &stack.pop().unwrap()
})
);
}

65
rust/5/part2.rs Normal file
View File

@ -0,0 +1,65 @@
use std::{
fs::File,
io::{BufRead, BufReader},
};
enum State {
Parsing,
Moving,
}
fn main() -> () {
let path = "input.txt";
let input = File::open(path).unwrap();
let buf = BufReader::new(input);
let stack_char_width = 4;
let mut stacks = Vec::<Vec<String>>::new();
let mut state = State::Parsing;
for line in buf.lines() {
let line = line.unwrap();
match state {
State::Parsing => {
if stacks.len() == 0 {
for _ in 0..(line.len() + 1) / stack_char_width {
stacks.push(Vec::new());
}
}
if line != "" {
for i in 0..stacks.len() {
let idx = i * stack_char_width + 1;
let char = &line[idx..idx + 1];
if char != " " {
stacks[i].push(char.to_owned());
}
}
} else {
state = State::Moving;
for stack in &mut stacks {
stack.pop();
stack.reverse();
}
}
}
State::Moving => {
let tokens = line
.split(' ')
.filter_map(|tok| tok.parse::<usize>().ok())
.collect::<Vec<_>>();
let mut tmp = Vec::<String>::new();
for _ in 0..tokens[0] {
tmp.push(stacks[tokens[1] - 1].pop().unwrap());
}
tmp.reverse();
stacks[tokens[2] - 1].append(&mut tmp);
}
};
}
println!(
"{}",
stacks.into_iter().fold(String::from(""), |acc, mut stack| {
acc + &stack.pop().unwrap()
})
);
}