First three days

This commit is contained in:
Anton Vakhrushev 2022-12-04 10:40:06 +03:00
commit 815f61f16d
Signed by: av
GPG Key ID: 581F7473F7A21FA2
8 changed files with 5242 additions and 0 deletions

2237
01/input Normal file

File diff suppressed because it is too large Load Diff

42
01/task.py Normal file
View File

@ -0,0 +1,42 @@
TEST_INPUT = '''
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000
'''
TEST_ANSWER = 45000
def sum_of_group(group):
return sum((int(x) for x in group.split('\n')))
def solution(input):
groups = input.strip().split('\n\n')
print(groups)
sums = [sum_of_group(g) for g in groups]
print(sums)
top3 = list(sorted(sums))[-3:]
print(top3)
return sum(top3)
print(solution(TEST_INPUT) == TEST_ANSWER)
with open('input', 'r') as f:
i = f.read()
print(solution(i))

2500
02/input-prod Normal file

File diff suppressed because it is too large Load Diff

3
02/input-test Normal file
View File

@ -0,0 +1,3 @@
A Y
B X
C Z

86
02/task.py Normal file
View File

@ -0,0 +1,86 @@
# A for Rock, B for Paper, and C for Scissors
# X for Rock, Y for Paper, and Z for Scissors
# 1 for Rock, 2 for Paper, and 3 for Scissors
# 0 if you lost, 3 if the round was a draw, and 6 if you won
# X means you need to lose, Y means you need to end the round in a draw, and Z means you need to win
SHAPE_MAP = {'A': 'X', 'B': 'Y', 'C': 'Z'}
SHAPE_SCORE = {'X': 1, 'Y': 2, 'Z': 3}
WIN_OUTCOME_SCORE = ['XY', 'YZ', 'ZX']
MAP = {
'X': {
'X': 'Z',
'Y': 'X',
'Z': 'Y'
},
'Y': {
'X': 'X',
'Y': 'Y',
'Z': 'Z',
},
'Z': {
'X': 'Y',
'Y': 'Z',
'Z': 'X',
}
}
def get_outcome_score(x, y):
if x == y:
return 3
if (x + y) in WIN_OUTCOME_SCORE:
return 6
else:
return 0
def get_score_for_line(line):
print(line)
x, y = line.split(' ')
x = SHAPE_MAP[x]
shape_score = SHAPE_SCORE[y]
outcome_score = get_outcome_score(x, y)
print(shape_score, outcome_score)
return shape_score + outcome_score
def solution(input):
lines = input.split('\n')
return sum(get_score_for_line(l) for l in lines if l)
def get_score_for_line_2(line):
print(line)
x, y = line.split(' ')
x = SHAPE_MAP[x]
a, b = x, MAP[y][x]
print(a, b)
shape_score = SHAPE_SCORE[b]
outcome_score = get_outcome_score(a, b)
print(shape_score, outcome_score)
return shape_score + outcome_score
def solution_2(input):
lines = input.split('\n')
return sum(get_score_for_line_2(l) for l in lines if l)
# with open('input-test', 'r') as f:
# assert solution(f.read()) == 15, 'Not pass'
# with open('input-prod', 'r') as f:
# print(solution(f.read()))
with open('input-test', 'r') as f:
assert solution_2(f.read()) == 12, 'Not pass'
with open('input-prod', 'r') as f:
print(solution_2(f.read()))

300
03/input-prod Normal file
View File

@ -0,0 +1,300 @@
wgqJtbJMqZVTwWPZZT
LHcTGHQhzrTzBsZFPHFZWFFs
RnLRClzGzRGLGLGCNRjTMjJfgmffSffMqNgp
WPLgsfLmLgqZvZgSRR
RbwHdbDdQFFFMvvMjbhqhZZS
lzTdldBDszfGcRsr
ZjnhJjMjnbdnbHdFLmmfFLmnCCWFFl
PpNwtRsNsZSsRwCfzQQBfQszCBsC
PpwcqqVZRtbggggjcgJJ
ntczBcVcgnHzgBHnVntcBBFhgsmmmssqWNWNWqLvNhsqTN
bSSGdSDZbGSGdDmLmGTvTGmLFFhm
PlFbDpJDPbPdPbZQZDZlSCDBfMVRwBzBtBQzfzRHVMVRtH
fDVrmmrvcmCcVpfcfGlswpPwsttMpjJMPPjjtP
RgSTdndFLbJqqPssWWjPWjPjHS
FqgzQnTqJRRQqLLhTCDhDCDmcmlvvlhcVm
nnqVtHbfVHZVmtlvmHtZtrFSFTRRFhRccTbrLsLSGr
cCNJQJPJQgjjMQdDrGGsRhTFGFRFSpMS
gzdCwWdjNPgzcJgjwdZtVlHHmvvmZlvffHnz
FFgsgwNwWvggQsMWDwvQQvQcccdcJZDtJGBtVGGGtcVlzt
rjfTrbjpjRSRTbTpzldjjHBtJGBdltJG
RbrPTfpCfmbpmnfRRCvMvQWNBwFFgMsgBL
zzLHgjjjdFHWbGBjjzcbgQRmSvqsSpmRsRSQSmRMWv
ZfJVrwPhZhZlhQQqBSQSNSqM
tnCfrDCltfPzHFFLBgngHz
DCpwrrMhwCrCMVCpGFqpVDnWWTWBtnTWvWfvbbTdFWRv
lmhhcsQPmTtTnnPBTB
QmcjNJsJzHNljZsNqDCGGhwqCqhgDDZV
hLfRnSLfhcndCCPfJJjzJfzt
pHNWwDpGGNJBZjjNNj
gmgwwHpWTpmGDmDTggqHmmDSsnnhvcqScdVVSVcjLrRcnq
CdlTJgnQJVCllNVWTPZBmPPGhGRmghPRGs
wHDrSwtHbmhRvHVZ
DzzwrtVFjLNnMTCTLCWW
SppdsnGpNVnZZZLPMlMPGq
mdcfvTTbBddLJgZJLlcFqJ
fzTvfwjjfzzCbvvjvQjWvNHVNNVWrRtdnVNppNprDp
lmlCGTmNbZlbSFlbNGfnzWfWzCdWWfVdwRCf
jDHtHHvLjQtqrsqpjBBLprRzwfwJfzzhRnczhWQVwzVR
rqpPtpPjDqpqDLtLrPGGFSFgPlNZZSGMPnMZ
pSHShqgSMzVpphFnJMFMBtssdjRJ
PZDbZfmCDgDfDNQPwCflCQNJsjRBRBFsdBWBsJRjsbsFJF
DQvCwwZrPPlffDmQCDwZQPmPhqVTcGhSHSLTpSGhLHzpGghr
gPqgqqmmmPgsqvGmsMCCnfZZfvBpWZhVrrZdHBvH
TSlcttTjRTDlDDTRhZVdrHHpWVnfVrtd
SFJzFzcJjcRJwGGqJMMCwW
gzWNLSjRLzlNqqQMLhvQccGGmcQm
fFrttPdTFTrpVwGpbdVQQp
HnTBGfHTGzWWqCqngn
SddrLdVpjjVSgRBszFswzwlV
mtPMbMqPMvqHHHDTTglBvsFshFFg
bmBHbtPctMtbMNMtbPtPqHmMjpdZdcJGrjSWWZGjJZnjndWj
nljWJHRHGrDcMBbDLZHV
wdvwmhghhbtBMcLtwZ
gvQvvghTfPSmpmQljGFRjQbFGCsJbC
BmphBWmDBBQfpVgQZpjg
rqqGrrrqlnqqHqjNnVDSSSgQQffj
FqLrbsLFsbLbLqHlMrmwwPDcCmMMmJBwDJcC
wZccfslqZPFFjrFbFfQQ
vvTvVWCJJZVBWCSvnVJJrhjQVMjVjzbgMQbjpphh
BBmNWBvZRvSqwsGwssPcmc
LGpnfcnzfzQdNFNHqHJptq
RBNNvZSBRbRCCDJqHrDZqHFZtw
SRNhRsNhWSNWsRRvgjngQnnMTnTgQjGMff
twtZmwqBHtmqnnmlGLfcfvQQ
dgMSPSMdQGclRRdF
pVMrDgThDDlPWPWbBZtZqqttBqjqjT
PPSWCGSzpCCQwNsNPFhTNVbB
vqcgJngqLLcZLvBhNTVlbsvdFF
DDmHgRjHZhHtGfWpQH
sBLbwWWBvsBsqLqStRjcGGRnggjGcntJDn
NCMQPMQPMQNzGGRRgRJRGzcG
dHQNfPCFTQfFfVVNvwwJvSWSqWqrSqdS
prDBnnDpFDprnDPBDQBvpBZttcSqSZSZcScFJSHcZJtz
VhMVdLsjdqVWJSWZZZcHst
hLVdGLfqjGjlfhCfCLjTTmrlpQBPBmvnrgDgpp
SSSTJmmgbGwtmRZHCCZRCH
FWcPQrrWqflzSWpRHZCZHRSt
PSQzzdcQTghdndDJ
cLlrNPvljRhRgTlM
VmDBGnVdmJDnDBndnnVwDRvMgRsTbTzMMsgZghzzsB
SpHvmGnSDJnwvDQqfrCPLpPLCfpF
PppbRCCgpzzQCgCSgZTlNNTWnNNDNlRnGl
hwMhLtBcBdjjNzWzlclcNGTs
FjJFHJwhfwLHMLJLwPmqfQPgVCmQgCmCzC
jTtMqFjMBqBmTntTztBTnTZBRZRLpLJgDgJNhghJrNNhhLJh
DCDdvdGsVDVsflVdQSsfSwhRJlgppgpRpbWLgJbJpgbR
wfSHSsdSVvQSwfwQPQPqHtFDcMzmtjBntqMTqn
HQhQWLCSHCSCjnjQdSJdCSQgTTmZPTVZmqnTpPtnpmRmpp
vDrzhvGzfchvlGvMFMrqVqPgZVVtZtVRgZgm
bcvMfwvDsDfbvfwDbbdhCShWCBLLJWjHsHjj
zLSsJNCjsjLCNLCgGcwBPPdwBwqwqz
WMFZprZDbrddWRVRRDvlPPBcPhhlBqqHPGPhhffg
VdbFvZWWWZZDFTLtCmNntjTnLSnn
JLVhhwRbhVwcLFJFhhJcccqwsvpRlllvpWvZSBSSSRsNWpzl
jgzfPffgZNspgZQS
fjCmDCGnfmTfFqrFnhqbFzqt
SfMRRNHSNNLfRfHcRRsqwdCCsssTqBCvgBLv
llDDWQnFGtQnmtGQDWQFsgdHVBddndHsgqTsCTsg
GzGjpWmWbmQmbpGGmGjHSrZcMfZSRPJPfcMRcb
PDdMdRTRrLDSwzJvfSvJ
FnjQnsqsFTnStvplhhzzFS
TBHHCsgVRRcMHbLR
GcLdGBJvBvLJHccJBvqHpGzDFfzwfzjwhDwrSFpfpDSn
mZZrTTQVmQmlsMPVblZQVZmfCwjzzjChzCCbDSzhFjfnSb
gZlRlZNPlmlgTTPmNRvJWcqrNLdvHWLBcHtH
jWWbBwgwWwwtvvSCtHvgWsMFmscHzTGMmcssGFTTGz
ZrLtpLnlfQJqnfJtpLnZlrqdNNGqcDNNFFTNDzzMMTMsMNMs
LJQrnZnfLZnlrZflJJRVRQbbwBgCtCVjWgjBjjgbPjBB
fqQVfRqSqmpnlLnm
jFcjMJTjhwwggjFtgzCHmCzCmGzGlzpn
wstMFFjWDfQRvmDPSB
PgTFGPgcBZPcHPFBZRjGPgwCnmwCsmSdQdThmMMMQCQS
JbpvWtvfHblWDHJDzmndSdMQnSwCdhMdQD
rfvWlLlbtfJvvLJpqWbbqZRRGPVFNHVFgZNVFBgH
TRMrrGBLMLPtbssTGtBHwZmdQQbdNzzZZNZZdwjd
CVlVhCnclvhWSFFfQrWNrjmpNfwmjZ
rlqFlclChhCvnlDvgVvRRtPtqTGJHRMBRTPPqM
gZzCrQGQdrQvZHPTHWDbTgWPJM
nSpLlcnnVjsSVLLnLSnhLSsJPTTWFsqfbPMFMqJDbfqM
VwwnpwLnlPdQCwPPCC
lRlrnlrsrMlhVsRnVhGPvCFNcPBDBvccrCGr
RZQTzWTRdDNvBDdNcC
TqjZbWRHmlMJgnmsng
scQmLfQBQQvvZfLsmmvDJwpgSNSDDdcJSSwTGD
PHlMbtzCCnlbztMRzlPNNdNwGpDpwgwptNLGpw
rRHnLbhCzbbCHnHjMbzzjzFZmfQqWZQqvmhmfVZmqFBW
fLTQWTMQtjcCGCJCbf
gGsmsVSzmjCFHJCJgg
SPRsSwSvBsPRPsqzwSVqzmhVWtLWhTDNLlTDtLTWGpNMtDLt
mbzRbchRRQzzssLdhLggLddJ
DCqDNNNWvDvjcPLsJcLLdv
cpFCVNnVBHtbfFRtMRFf
PFRcCCPtsDDDtjVspgwmgTNpTgTpspsw
BqqqdJdHdMgSfMmZpZND
vDHJGdLbLzBJdGnDdrBqVtCzWPPhthtPFzzPCFtV
HvhvHdFdvJDfHdZdpfhrmGPljPRrGPPVDGrWWC
NMMsRBMzcRRMMBSzcnbmNGrCVCWrCqPClmPqlG
zLBbwMzQnRSQMThtZFLvpdgHtJfF
DpcJcJPmMcLSHHZCfpnH
BsBFvvqTFlbhgdbBBblfZLCLzfHWfjnjLCnCrh
dTsNgqFvNgsGlZJRtVtMPmtDmG
LdGQqzPGCCjJTJdTLJQJtFcFRSctcrFNFltPFtcc
HphMMbbMdBMHbBhhgHMnhvwFFvtrlSNRNgcRllcvcc
spHMhBnHnnsmWdnsnMBMdVGGmzjzLmZLDQCCCCZjqjTD
DDZMzcTRgDMLzqCffhfWfcWnfj
NsHVVJmswwSSwNPPNjnhqhnCCnhNvjfTnv
rSSddrGSGrlMrpTpQT
bbbfCfrLHMMMWVWC
SqsvNZqQvvqcjNvqZsMMwgFgFplTHQVRFgWH
BSZWWqBZBjmPGJGLbBtf
RNCNfzfRHmzHwSdRdGfzRJPqFcFcDFGccZZqtLtGLtgl
pjhVMhvhbjvPcDJvcZqt
bsQMTsjppmSdTnHSJH
PtLwpSwdSJwQnGvvqtvMhZ
TlFcHlTjVjsDTQnCQhbZGCVVnb
cjljTslTrlzzHDNRfNgLSNBJfBwNfG
HvsZZqqqwWZswWHTmHsvvfhSfBfDffjchfBbhD
MCpnCVpQClRNnlNQVQClfDhScmjBfLhmLDGbBNbS
gmtpJpQQllJnWdZWwJWFwJJT
TzBvBwwdhgRPGHlRHh
NLWttJsrLWttppLpsGlsmVbVGRljGDRgjV
MlllnNFnnQqCdzqq
vptzrJhMMGGMptJPhJGJPvdFTFcSsTBVsczBScTSFFfn
gbRjWgRjCqjZnfHCHnTSVBHF
mRwqNbmqlbbjqRNlLbNrDJntNDGtDhNpGMrpvJ
GPWZLgWqLHHGbgbbGPPmqHqfcjjRHJJBDRBRjBBjMHjwvwQc
dhpFSpzVSSMSlDBvMQ
TndsVNztVTspnsdpshtmZLPCGGNPfgqbWWfDGb
CbqDjjCdClqgrfJvrv
NGNPtGGzzHztPWWnlgJvfBnWBFgp
hGzNHhsmGccwHPHZHcwdCCdbTVRTvSmTCjbLCb
sqnqsHGpJbqnrbshpshHmmmCWZZmWwfTjTjHmfLZ
dPggRgSDDttMFgctgdDtDcDcRWJBmjTWwmRLBLfmwBBjZWTB
PFcVPlJPglbqhhrnnlNz
wZdDNDdPPfhqwWqbsF
VTngRzpnzMLvzTCLlhvDfltqqDttqFqs
mggTVpCDDSNjBmPZrd
cSdqJSTTTJcSJpCdQbqTCPPdjdDtGzwzjDwjwwwwzD
rVvsBBVgsVBhHhfljtgbPgGtWjPtwt
fvHsVZHVnRHpSJJRmbbSLT
lDDPRRjwLGlvVRDRPlwwwPvmpSfhVWSzhqfzqpHpVpVHfqSH
qBnqBNsBBChhCSfZ
nTQbQnNNQJTLvlmTPLqqmG
TTCJhDrmDpRVhvhHfffwzwfz
dmmdmglWcqvHvWsHzB
gdQMZbtlgQlZcMSttCNmVVrLSTTJ
PLZLqhZZzZLBjjjGrrPjMH
CcQcCcfRlWDjdrMrBrHC
WlWFMcFpcRFmsWFcmflqSJzTqzwLvshggsZJwz
LgqRDDDHHGTpgpJrQrQhhhCqrwPw
ZSBWjjFshCFlQDrJ
SjWnnbWtWnsztgGDDbDTGgHHGp
llfvMlvzjzGzGRfvMSGRfSdStrCtQNCZrrFdJJLnNtLZ
shhhshPHsTTqsBHTVTwTwZZnCtQrQnJtQCCJBCCZdZ
TPHTPTHmDnljplfpGfGm
qcNTmvvSvTNrWhRrTdthzW
bDVJphpMMJwJpMHtrrttWsgwtzRW
bFpGJbllPfplVQmnhvvcSmCFqq
GTPJGMQTPQMqZjHTBmnndBVddHrrzNrz
bbcRFgDpptRbffwmzmrvLmcZvmLmLv
WCwgWbpgwtgfpfMlQGPhSPZWTZPl
DsPCswsMPBMwPDCVJPnTPPWFGJNJmbJW
RvvddfvftdtvNzghGSbFnWTntJSttGbG
LNgRddgRlgzcgCDjjjHjcBCwcM
gnVtgBnpwBgShBgcwhJJhjCMMMDmLRjDRMjrDMMMDMqMRF
slsblHPNHlbTNbsPvszHQWbzqrZLMRmFMFmdFmrtDFdMLNZD
bPzfvbfsvvlHtlzPHllHGTlTppCJpgcngcpwnwCGGJnnShwV
cgQRgtzDbHPcgHzQWpTjTLdjjNNpNLsDss
nwccZBmwcJqmJnjsTvmlTSsdlTNs
CCGFCBVrBwwGBhqVnZBrqWMMQzHfQcHzzzPtfztGfg
lhnwnhlbgbngbcfDgJLJQqDdVd
FSrvtMFZVJJJVtcq
jZNNNNjmjSPjFTJmGGzswwzHwHpBsbPblhhW
tnDWHntzDtzQBZLMLzNLDDcRFFjhJBmcFRCTjRchcRvT
sqwsPlbGfSbPGSVbJfpjjhcTFmCRjjvmTTvRdw
lJqSqPVbgGSGrVSqJqflbWZQNDMLHnrQQWNDMtQMQz
lpltwwJqsWVLPtVt
DGHsDdZQzHLSLZcFRrFS
BGsGCnHmMlMwCfwT
nrRNzRMPrrPnNwNzTSFSTNtqZdtMttvQqQmjdjvZpgjZ
GWVhGcGhHhGcffbZGDmmtttQvpdtbpppdj
HGlHBhHGJfJJhCfZzLTTNnNrTnCNwT
jBpCZStjBwWrQCMrhw
TvcHBzHdPPzdvFTzzJlvzdQfThrhhrhfQTWMQfWMqfwf
bzGJJBJcJvdvBPFzddGgjZSbZZngRZNNnnsjRs
dqPqbpPFJfsFfMcNQNNtNmzrNQJn
VVBDWvwZWDLwGlDhLGWWVcmQtSNmLmtSdSSTmrcQQm
lZlhwDCdhhHllvWvjMHbgMpgffMggpPb
SWSFLLFWDSWDNFzmmLMfGlfsdfnJMBfwMGVnBf
vPtgZcctcTQQZRRcgCtZwRfqBVGqnVTBGVnqlsdBJnqV
RcjgwbbgNSbFbhDb
JrRZLrHvjQFPLnnBPQ
DhwbtHbzpcpFTgtQ
zlDwlHlzWSwDqhMMbSJVZVvrCrCZJZNZdJ
fgNCZSDtDfDZTrTfqWghQGzGQshgpGGFQg
RFvLnvFjnVjmLQGPQWLmWh
MdwwVMFbMdRHFbccbCZJtbDJrqqJZNJZCZ
fdZVBMMdfdfBCzhTzMdMCgCrGGrpQJmSmGJGmpJQVpLmqV
RbFnhNsvlDsFHttllGmqGpPLvJpmPJSqLL
tjNsDnNwbNjttNNZTzhMWzcZcMTwMd
DjSSMShjRjPCbDFCdCSDbpBBswfNWZBZZrBVBPNfVmVf
zltLjLqqGlzQntqqGztqcgncZrVrmNfNwWBVrVmrgwrfswsW
qcTqHLlnJzGznLJtHGhMbhjFhMMpFbpbThpp
ZVFZcctFQzsCtbZFnPPHqmqpwmvPmp
NrjGfMgcLLcfdLqpmRwRRqJJmdPw
LMNDgMBGlgGDLMNDGljctVbVWZTTCWChhTttsl
RMGRRhhgzgZMtHdGTtvDwDJFCDvvwdvwqFFv
rfrrjLNmmSnSjVSmNNPPbJVbqvqsqvhvFqCq
flrpnSlrSNfjrNjSphNSWlHRGzTgtQGHQtttBTRBRQHW
tplDDprhbvprvrJDprCpbsvHRfzSzTtzmRqSTznRRBRnSfFF
MVwWjVNVQGfcMnTmRnBm
VQwGLNLjWNWPGjZbsDBppBZhhDvBlZ
RVVrGVVchRZsnzRzBWZb
FQHWWCHwQmWmlqfCHSwJnsbNJnNsvttntBtb
QQSFgqgqLMLPPdWdMVhWDT
cZrMjncTdfJpPJbr
WHNqnQwwCwvlqHtCtHNslNlvLLPDfSVdVPVDVSfVSbftffVf
NCwwwQwllwnvgsvZzgzFZzBzjGGGMM
MvHpfzcTcZzpphhbsDSTStsltqSDtS
PRmnwCrWnWQrmNMRNnlNGbqlbDltdlbDtNtD
CRJnmRVWJfgMLvcz
HPFbHrrwLdVdgbDZqcphCqSZBhLZ
tQRfRRGtvTNNSGTMjjmDCRhmqpBChqhsRDZh
vjSfMzGQNQQnMtNTTWNNjgblFdFHwgdJJHHPwddgnr
BggPRVBPPgfCBmJTjTTqpTNpZBwMbr
lclLLllsQLFlsbMqNrMwTpwpcM
SvbDzSDbWFJfWPPgdnfR
GbpSSbGDNbSSJbDZNZbDppGtMntHLHvHCTLCJMHnRCMLTT
cdwddjBfPsmPPQqQqscnHgRMtngvtjjgCCTMzM
WvwPvWvflBwdQPlNVVhbDGpFhNGhbl
WZRGmRvpCRFTZMQQQMCdddDDcD
lqgqsgvjVtbMDzzbtcDQ
NsNNgjNNjsNhnSvRmnpGRmSTSG
nTgFtDTDDLrFBStdGdcHcbvGSc
QPzfPCMzWCjfMPJhWGlRbRWRWrRRdVVH
zhCrCQCjPrpNNBsNspNnwq
zTJpqFzbTzsWsVbbfLGfSSCDNSBCHfMLHG
rZcvtmhctrvmlPPmmmrhhmBLCHDCCLLDlqMlGMNDMwDC
rRhRhnnQPZhtZcZtdttZgqFWWVjssqQpppWpFpJW
NWPhdWJPWVzVqQrqmSsPbrPP
cZDRjGsffGsCDfffgjGgRQSrTcTmSlTrbnqmSSrlln
fFGCjGCjLDLFRgfDHZvzLVWtvsWWBtzJNWMB
qMVbtnmMMTpCppsR
NffHGrWzWWgDBfTRhChCnSCWcnjT
QrlQBPBrlPHrrQlrHFLqPnLvVvbVmVVJtq
MVMpHMZLVCpMrfWjvWnfrJ
hlblzDDzwlSlGtRhRlSdrfGGWnWWfFPjJjnfqWGF
lmlhBRlDhhhDRRhwDmBpHJmsNCHmCgNHJCJLsc
jvsLgmqLgHvbPPVbNjSCjC
pwTcRpRWLRMLJJFwBBGWcFWNVlDDCSTVttNPblZZCVVDlP
GcdhccpcpRpGRhGmfsHHzLQQHrmsnh
FMmSRgtMltMnVgnmNvlrsJrsZWjspvsZJp
QbdhqwqbNqdHbTdcbcpsrpvjfWfLJLfwJrWp
DQBBQqQGccdTPGqqBNtFGRSMRSFGtnVSnnmM
fPjGrfFrrprprdrbQPZwlcZwZmlJwH
qvNnvWnvWDvSvqNtWSLWStqbcJBQwQJwQZHLBZbcmJbblb
DMtvqSvvDtntCRfwzGCgdzzFjG
TfdZgtmfDgqgvlLFFsFHvcvZ
pphWQMVjQVVBWWjRlHlHnlcLDDhcnF
JQwwWVPBwMJpJwpWwGBWNzrDzSSzfgTPqTSTTtSPgt

6
03/input-test Normal file
View File

@ -0,0 +1,6 @@
vJrwpWtwJgWrhcsFMMfFFhFp
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
PmmdzqPrVvPwwTWBwg
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
ttgJtRGJQctTZtZT
CrZsJsPPZsGzwwsLwLmpwMDw

68
03/task.py Normal file
View File

@ -0,0 +1,68 @@
from itertools import islice
def load(name):
with open(name, 'r') as f:
for line in f.readlines():
if line:
yield line.strip()
def priority(x):
letters = '_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
return letters.index(x)
def find_common_item(rucksack):
first = rucksack[:(len(rucksack) // 2)]
second = rucksack[(len(rucksack) // 2):]
intersect = set(first) & set(second)
assert len(intersect) == 1, 'Must be one letter'
return list(intersect)[0]
def solution_1(name):
return sum([
priority(find_common_item(l))
for l in load(name)
])
def batched(iterable, n):
"Batch data into lists of length n. The last batch may be shorter."
# batched('ABCDEFG', 3) --> ABC DEF G
if n < 1:
raise ValueError('n must be at least one')
it = iter(iterable)
while (batch := list(islice(it, n))):
yield batch
def find_common_item_in_group(a, b, c):
intersect = set(a) & set(b) & set(c)
assert len(intersect) == 1
return list(intersect)[0]
def solution_2(name):
return sum([
priority(find_common_item_in_group(*g))
for g
in batched(load(name), 3)
])
# ASSERTS
assert priority('p') == 16
assert priority('L') == 38
assert find_common_item('vJrwpWtwJgWrhcsFMMfFFhFp') == 'p'
assert solution_1('input-test') == 157
assert solution_2('input-test') == 70
# RUN
# print(solution_1('input-prod'))
print(solution_2('input-prod'))