chore: setup folders for aoc 2024
This commit is contained in:
92 files changed
+72
-1
No files matched your search
@@ -0,0 +1,4 @@
|
||||
1abc2
|
||||
pqr3stu8vwx
|
||||
a1b2c3d4e5f
|
||||
treb7uchet
|
||||
@@ -0,0 +1,7 @@
|
||||
two1nine
|
||||
eightwothree
|
||||
abcone2threexyz
|
||||
xtwone3four
|
||||
4nineeightseven2
|
||||
zoneight234
|
||||
7pqrstsixteen
|
||||
@@ -0,0 +1,1000 @@
|
||||
xt36five77
|
||||
two8five6zfrtjj
|
||||
eightthree8fiveqjgsdzgnnineeight
|
||||
7chmvlhnpfive
|
||||
1tcrgthmeight5mssseight
|
||||
eightoneqxspfzjk4zpfour
|
||||
fdbtmkhdfzrck9kxckbnft
|
||||
9six9
|
||||
goneightczdzjk18589
|
||||
41two3eightfscdmqjhdhtvsixld
|
||||
t8929
|
||||
fourtwoxsxqqmqf3sixfoursixmmjhdlx
|
||||
bcbsfd14cjg
|
||||
95three6threendpqpjmbpcblone
|
||||
tdmvthreeonefive8574
|
||||
5eight82sixtwonev
|
||||
ninemg2shhmsqh
|
||||
thmlz4
|
||||
xtxjmm2tbbntrmdqxpkdjgh1vzjvtvg7nine
|
||||
vf19fourddfsvmzeight9
|
||||
mmg6fivegcthdonesix1eight
|
||||
7rzzdknxtbxdchsdfrkfivenjtbrjj
|
||||
2sdzxhxp
|
||||
vzvkjvngfjsxmponep9jppnqnbt8jtwo
|
||||
85fourfivetwo6xvhfxone9
|
||||
fivecgtwotwo3oneighth
|
||||
pbmninesixzcqs5
|
||||
ztlhxfmr4mcjnd3two
|
||||
nfr27zdxchz
|
||||
sgljlqlcxsnjgppxgqxppqszzgbp7
|
||||
five78eightthree
|
||||
mleightwo68
|
||||
threemnnbjncqq68fourmjdfqzqxbdqvfftggf
|
||||
twofive35llpqrhptnv
|
||||
pslmgrznfzt823sevennx55
|
||||
72fivesevenvnxpkoneightgdm
|
||||
1sixfdjtgxbflfkvv
|
||||
77three9
|
||||
five6skbsrr
|
||||
fjvlsthreeffzbjlsm2
|
||||
6dpkrlbxfdv5nine1499
|
||||
jvt9one28nine29
|
||||
57pbgvccprdgnine49three
|
||||
qmthreekcsttzmgd1nineone7dvhsjg
|
||||
eightqpfhvqnpbbrbmsz76
|
||||
vvqjsevenfourhmdn45
|
||||
2eightxgkdtdkfbtcjgrlthreefivekm2
|
||||
rfpklsh1threenine
|
||||
nrhbjqpxssmqbkdbzg2
|
||||
556ghndxkrg9
|
||||
3six8
|
||||
zhkkgqllq9eightninebspgktnh1krfbzdcthreekzxzgszgpd
|
||||
933five
|
||||
sixsix5qmbqd
|
||||
7sevenxckssckcrqnpmfiverqtcdclnkzpztt
|
||||
5eightpdsvjknine813tnz
|
||||
k81one
|
||||
6threegsx48
|
||||
three3xbqvcfgjjfsixfiveone779
|
||||
threenjtlxnonexqhv1
|
||||
5ninefourtwofsqdbchtpkfiveninencsdrnvnbf
|
||||
vdveightsixthree1
|
||||
2mrxnnqngfmshdz
|
||||
qfourmjpltwolblkzlkdfr41vmskjgrqkv
|
||||
8hbjcnseighttwoseven
|
||||
28lvggdhbjgqth
|
||||
nineshpzfshzm68ttlqbqxxrvdxrkvdkbcnfdkrhcqpqrfmpxtwo
|
||||
9hhfninefourfiveczdbrn1
|
||||
2dpzvd39eightwohjc
|
||||
3zrhnzvq79fourxgldtbthree5
|
||||
two1716
|
||||
bgkfjkeightsevenf9gclhlprxlk3
|
||||
nbf2rdglrfourthree86xfpqckg
|
||||
hslr84mkdcqpl3qtszqfngthreeonenine
|
||||
7bhgqcphnb2fpjrbvrlstvghqbkfive1
|
||||
6lkfdcddkbsevenxsixseven2fsg2eightwos
|
||||
3xjprzkdsckltdone
|
||||
1qbkshbrcddjtjz4jhrdmpnrq3mmfive
|
||||
27five3sevenfourjhhv
|
||||
5fivevhkttflkone4
|
||||
5jcthxvhglfourkjrhfour
|
||||
3lbgzfkljfzkf3
|
||||
9tmpczsvskqqtveight1
|
||||
kfrjhgsixfive9three1
|
||||
onesixpdf8onethree1
|
||||
onesixnine5
|
||||
1lscknhb
|
||||
fourhrnmcfgpzffhdtbdcpdbxqh3
|
||||
twoffcbgcjnsix667
|
||||
sevenfc14
|
||||
8kzzrbz2threecclhhjn1l
|
||||
kqqpzbbqkchmkdl46twothree453
|
||||
8two3jqxmnz
|
||||
eightpszqltlncjpfrdfzffltnthree4
|
||||
eight8eightsixdcgqnbvt1lbhlchdzkf8j
|
||||
64nine
|
||||
3twofivetwosevenfour9
|
||||
lhlntlsixtwojqhsevenone74
|
||||
2242eight865p
|
||||
dnhfbgzcvsx5krv26
|
||||
szdnjvh9
|
||||
hrzczjbfphxvjqs8one19five2six
|
||||
lvvkjjvgcjbkhbdnf6ninesqgqhthseventbkzhjbnrb
|
||||
crmcpjhfmgeighteight316
|
||||
vmfqlrnjjnv7fourkqbsfsnnqxfqsixthreesix
|
||||
7sevensj9919one
|
||||
hrvtbr2lqkkhn25three318
|
||||
rngggthlrfoursix2twopv
|
||||
3srcpjlqt43eighthscbffksixfoursix
|
||||
885sixbftpfive
|
||||
qpfkxbqfph9sevenc2
|
||||
9zrtbhztseven
|
||||
5bcgdvdtzjjbseven41nineeight
|
||||
two3szknm
|
||||
klfivethreenine2qdpbp4eightwoqf
|
||||
1b
|
||||
8llkrslcbcsfivecqclmfrxbkzfive
|
||||
twoseven1
|
||||
six3ninefivehtxjqjgv6onepkfgjcczft5
|
||||
oneskjsh5jmnhsxhfoureightfourcml
|
||||
thjptkn9rpjkbkvgm2
|
||||
glpbbfjgfivep1696xhcprcqxone
|
||||
5fivegnsbzt8gtxvhfmt46
|
||||
fivefoursevenjkxqlcx7onenine
|
||||
lfourghzdksztjmfour4threepdnfsz6
|
||||
two7one
|
||||
1onesixdzh
|
||||
7ftphkqlonesxsrlgkczjthreefive3nine
|
||||
62ninefivefkbmhvlltfourtwo2one
|
||||
rgoneighttwortjczm24seven
|
||||
chqxcv3fdqnjngqkkkrvlcgtdfdsvztx
|
||||
three2dvfpsgjfgs16fmvninefourfrvg
|
||||
five4bgbfrj52
|
||||
98sixsevenfourzdsfjddbmbrffkt1two
|
||||
nine9xhkcmmvb81onehsmxclb
|
||||
6146four
|
||||
slmhsix4hhtrdfdjpk2fiveonec
|
||||
1oneightd
|
||||
86sevendgdbnrvgjnmtxrmqtt
|
||||
six56three2hslccxbnzpmbrctd4
|
||||
seven8nine3fiveddvpdjgqrjtwovhbdmtz
|
||||
five32
|
||||
769three1
|
||||
mdcmrbj19
|
||||
threethreevc6bknnspdvbfzsevenghqnkxnhfxjf
|
||||
sevensevenzvqkvvgzn12two9bfzfpxjhfslqs
|
||||
8mmqrvzklbfivenineeightwohnp
|
||||
zngczscnv8threesevenfourtwo
|
||||
695eight8szhqcklnc1
|
||||
sevenjvnfbbnnine9ninefour64two
|
||||
four5threelqtwoxhvhjnkgz2
|
||||
ztnzbgmtdtwonineeight3
|
||||
twosxfour6xsshbnhsixsix1
|
||||
threesevendmfivesevendxhsdhsevenqnrvfrgpfl5
|
||||
71dbpsk4
|
||||
eightxqzh1clmrdljnxh
|
||||
jqjthreetwo3
|
||||
23sixhsvmstwofive
|
||||
mhvttrxpllkfpxzcfvjtpkfsgd21jtrcrgp
|
||||
1lcqlznsbdzksklm38frfhdpt
|
||||
8vjtzvxvfive
|
||||
9xbcgqhdclrzdnzspllpfrqhnxztftninethree1
|
||||
seven5two
|
||||
fourj5ldxlnine
|
||||
sixtwosix73jjtrvt
|
||||
9qqbmccrg8xdgcqmnine84
|
||||
fivedmsdlsfour2rmjxqthxfcsgkqgsxxqbtwonesj
|
||||
one631p
|
||||
6x2
|
||||
93nptkkseightkkgnsnqkpfourone
|
||||
173
|
||||
eighteightvzvxr2pqknnccxqkznc
|
||||
ftbsixnine4
|
||||
fiverpz9ldmbrqhg
|
||||
7pzbjtnqcfour4319eightcxpgl
|
||||
tchdxgqsqeight8ftllckrz1
|
||||
kz2five
|
||||
scgflstwo6zzdxdcs
|
||||
535svzdxtwo4
|
||||
7fourone2
|
||||
kqczhqqttf74seven
|
||||
ninesixnttqqzmdg264
|
||||
sevenfourthree2one9
|
||||
eight1rnnsppqbjzv7jknltmlb2
|
||||
6eighteight5cljzvzdtqq8sqftf
|
||||
ninebnpxdqs1
|
||||
seven2nineeight
|
||||
hjnnqsnfftjstkrlknvlqlkfsdbgz8
|
||||
rcbhxcfmkc3ptnt2
|
||||
threesix378twostfsjjvmnseven
|
||||
hllssqjbc41
|
||||
six9zbkrrvmxngjone5xqjbxcrkhzr
|
||||
nineone57
|
||||
3pls
|
||||
sfcdbhkdrpkdrtxtvlkqfiveqvbxhvm8
|
||||
fourthreemeight7nine9
|
||||
five5fivesfnxfour
|
||||
h3two2sixgkninetwo1
|
||||
53ccblnvbqhjxgbxrs1tk
|
||||
twotwofxvcmsld2zbjlqzvgzkqvnthfvsftwo1
|
||||
eightninevdxxdglskbfzz8sevenfour8
|
||||
flhjjt6seveneightlqpfvnpxvthreesix
|
||||
threefiveonegpcjjvv6fourseven
|
||||
9pbxlqdkprzcxp
|
||||
cblkxjmpgrfk5
|
||||
qbntftctnine5five3bsevenbskhvtm
|
||||
7eightsix3threehzn
|
||||
5nhndlxkthreeseventwocdvnhzrcszhd
|
||||
six5onekbctwo
|
||||
fivezhtlpveightvdfltnxpvrzmczdzb9q
|
||||
nine9xsfq8vtdpmcfgm2
|
||||
onesl8mqzgdrstwofour
|
||||
4onedqtrcc58ghlgxqjlbv
|
||||
132zvtptdrqt
|
||||
ftwone1tkzzthvdsevenseventtgvqnbzf
|
||||
prxrsfvdbt73zblz6four84seven
|
||||
onefive1xllptjtwothreehsdlgrmjssfgk
|
||||
twofiveeight781mgjxgzlmgkv
|
||||
483fbgsx5
|
||||
four82onefour
|
||||
229683five
|
||||
2onevncxhvscnbtngbzlbbpdnnntr
|
||||
275cpjnine
|
||||
j4threefour7dzqleight
|
||||
ddgmsvmfz7brjdxt5
|
||||
sevenfzjtxjtbmj8fivefive6
|
||||
tqprcctwofive8sixzmgvphmdsmjtwocbpqc
|
||||
sevenseven4fourbcscfcprcr5647
|
||||
tghsix8
|
||||
two83six9sfp99
|
||||
fourthreefive3seventwo
|
||||
7threepx
|
||||
oneeight69sixgdzbbmlsh
|
||||
23onelrdvbzljtcdjqckntwo7
|
||||
six8onefivepgs
|
||||
83gnxnjgvdr2four5nine6
|
||||
lgfcvptthreesixthreeeightthree23
|
||||
seven8gsqznnpb3
|
||||
dqr478fivezxtwo
|
||||
4cgkjbl261
|
||||
pnjeight84twodnhh4
|
||||
zeightwozhxshspt45
|
||||
8rzkpmzlvszvdvonesixeight
|
||||
twotwothreeseven95threethree
|
||||
sixbr293sixthreesixnine
|
||||
3sixsixthree9
|
||||
q17ninenineseven8
|
||||
jmhbhqjxvc72qsrhzzpnljeight775
|
||||
456jnrtpfseven
|
||||
gjcbnbdkt94dsjrgdq1
|
||||
five56g6
|
||||
rvjq8dkngcfjdd
|
||||
twofive43
|
||||
sixzz9threektkqmfq4gkxxzbg
|
||||
2four7four
|
||||
four3eightsvmnfive6
|
||||
ninelvxcxdrxk1mvhtptlpqvff
|
||||
qrbtlxbkdrjzkznqp6
|
||||
z2xdrtqzzrbt9five3five5
|
||||
twoeightsevenfive83
|
||||
73lzgb1
|
||||
oneseventwotwothreemr4dfkjlgshjzvlxqqoneightvvr
|
||||
5twonvhrbtgfxdlvxrgnpkeightzjpd1
|
||||
twotwo6rdfc
|
||||
six84sevenfschptts1fg7
|
||||
8kzqv
|
||||
hnbjfivettpzkb8six
|
||||
nine8zcrzgqntworxnj2three5
|
||||
1qbjtsqqrttwones
|
||||
gnjmvqrhnsfive5prbzfsjteightqgfcx2one
|
||||
fivefour8btcrpntwo6oneeight
|
||||
kfxbxn4283kcjpkbskshjdss9
|
||||
3threethreeh
|
||||
bmzjktnnrl8fcmmbtgzkj
|
||||
vhnine84seventwonine
|
||||
gq639rhqlbzp21qbseven
|
||||
6rnineptdmntjsix6cnhhbcn
|
||||
sixscrdone3mhgnmflzxftwonvkxvrftqcxzcfhdgxlvreightwos
|
||||
6nine6gngneightlvqmmjjtdkrklqbthffhtwothree
|
||||
bsn4rrgvrjdddhdfsvsffbqnrsbvtfive
|
||||
twozflqcsix53jcsc5twohdeightwofb
|
||||
73rx
|
||||
xldqxlmfcdrnthree47tz6
|
||||
foursix6ksrzponeonepdbfpjzspp88
|
||||
czvdzccj9nine7
|
||||
92one
|
||||
9one8three
|
||||
onevfzkmmcrtwotwo2five
|
||||
8eighttwo6xpfxtvvpx
|
||||
83four9
|
||||
3fourdmtqtvqthree2ztvvdjzmfc
|
||||
8fourpb7jjlcbkxkxfthree44
|
||||
9cchfourltlxpbjpdrdplrqgrqpk1
|
||||
fiveeightxlxmr5
|
||||
bgrczrdsfrcfrpkprdncbkd55qnhjnzkbpninekbmgnlqgmxfqgndc
|
||||
6jhcjhb57sfive8oner
|
||||
six6twofive3ckthree3
|
||||
xfxkfourtwokqcpvhzjjzsrxjm6
|
||||
four85
|
||||
p3foureight3rl
|
||||
f6four2eight295
|
||||
1onevonelslgmbq
|
||||
pzj6pmjone94
|
||||
bkmcjnllrmcfpmqckl3fivenljfgeightvrjfb
|
||||
kgsczqtwo8qnjhtpfltonepvfive
|
||||
fourfive5pfnlnjqd
|
||||
vgrsfxtkcxfstsevennine89
|
||||
njkblck4phphvmq7
|
||||
ghflplsgkljsfk5
|
||||
rtbm32lntjflptp435twosmtb
|
||||
45four
|
||||
fiveone41pqgcjt
|
||||
threesdnllrxbxmhtcmjvdktqqkzs1
|
||||
5one14zmxblkh3
|
||||
4mzzqpmsfour5pnzonerdseven
|
||||
9bhcxsnxdv7
|
||||
twoxxjnsxxjxfnrtnknseven29c
|
||||
four54gkcrncmjtpvfbdqr
|
||||
mmvgl8onekzq
|
||||
tprfvqnine54rqjkchkxtcrk6gxjgbfqpxg1
|
||||
threeghtxbhkkrvxxcrvslhnvczxnine5four4
|
||||
bkrkeight4jvjvmnine
|
||||
sevensevenmphmhvhtjxcdcrcgbdvlmcr6mczlh
|
||||
eight74seveneight5eight4one
|
||||
bspq9fiveklkbeighttwo
|
||||
51four
|
||||
sevent79zngvzhhlxjrnrbkvnine
|
||||
six3threepsjhtfoureight9
|
||||
44mvfhcthpbv
|
||||
3fourmrdzqlvb63hrzhqxc
|
||||
7fivesixcnxfourpfour
|
||||
csix4
|
||||
qqtjk43
|
||||
eightnhqpxttth9ddbfjpqjmfour83three
|
||||
slx6fdm9bspmbxdqjfmkhr
|
||||
stlxrvseven1gnmnqrnlthreenine
|
||||
56zjfdrb
|
||||
sbcxqp8
|
||||
7eightsix9eightseventwo
|
||||
7twosixfour
|
||||
1eight6
|
||||
twor59eightfourkpsix
|
||||
571fivefdpntmjqgnineftpjtkh5
|
||||
two7nsdz
|
||||
pmf5twoseven4prgqz
|
||||
7vfmvlgtvkbxnq
|
||||
eightstdrhhtctthree61fourbmcvhmxtkdhcltxpr7
|
||||
fdjcssixninetdgtbkgj4snzpqlninehvvkthree
|
||||
122pqtcthreesixeight8
|
||||
hfztkh2ksjnj43nine
|
||||
sdlnm59onekdbdrdksixktk37
|
||||
4mf114
|
||||
8foursixninetwoxbcnq
|
||||
vbhspqrkvcvpfour68xncb3kdbr
|
||||
eight841
|
||||
2fdr7fivehtnvbk7nine34
|
||||
eightsixone1qzp4nxzrslmzrsix
|
||||
two3zdjntkkcmdpheightfive
|
||||
44one
|
||||
17txlqkttvtzhzkjeightcqtpqzxlktxm
|
||||
two8xcvpzppmzntzr
|
||||
pbqeightwoncjsvrlzrkspcnqsrrfivefour5
|
||||
9foursix1onevflhjngtthree
|
||||
gp3qjmnsksn3nineeight4
|
||||
39fdsdqonefleightwopsp
|
||||
2dfzsfssnpbzfour
|
||||
stzzclzgskgbztvrfqgbrms6
|
||||
5zpq81threegdg
|
||||
6three9ninethreeeightsevenninehhgqhxfhlv
|
||||
1tqftcgtwo
|
||||
zpkrjxfpzf5jmpqvxrgp6threexbjlzclxpneightscbrsgnine
|
||||
two4bmlztrzn1
|
||||
seven9klmsfmjtjr7sph
|
||||
sixsix4
|
||||
stldx46three15four98
|
||||
gthb7nine
|
||||
lninethreebrzzntwo4
|
||||
6fvhgpqj5sevencgmm
|
||||
75two7qktbnpcxtk
|
||||
fbkzzsixgshhmzdgt9
|
||||
xfivenineseven1dtzsfive78
|
||||
four3ptvfmkkhzjsix
|
||||
j9txxgmsvxx
|
||||
seven9lmxhzthbnbbxjmbqkpsntbfourone
|
||||
712fourlqknine4
|
||||
xlpnrk64qnjjvszbtkgktbn
|
||||
lznpdmrcxmzhsjqkc2cjm3zcx
|
||||
615sevensix
|
||||
phgjnmqfsqgjtqvzhpc3234qpkpjmxbfr
|
||||
tnrtmcdljzq1three62
|
||||
bcndkzgzp5sixhflsix3lgc
|
||||
dqgmbkxlv4onetwo
|
||||
freightwomsix916zrcsjgkktprb91
|
||||
fourbcmprdvkbl9vxzfkcjfsqdlbndmrsq
|
||||
sevenninezpblthreesix2threeqrcdpjqjgm5
|
||||
5jnnine
|
||||
j9fivesix1zhplxlvxsninefour
|
||||
dm68htnmqdsnzjvqrrj
|
||||
8four9pfvjjhrbzmlvhvtseven
|
||||
two256six6qdpldblvleight
|
||||
ninecprgdrmc2eight91mggqdvhcf
|
||||
sqbccsh81t
|
||||
1twovfhbngpggbgff8eight
|
||||
bxdstkqnbhkvt2three2fg29
|
||||
one7threehxcttwosixfourpx
|
||||
brnine1nineone
|
||||
6fffrqfjprmdx6sixseven
|
||||
7four4fourx8sixfour
|
||||
951seveneightnine
|
||||
fivefoursix5tg6dpdxrckdh
|
||||
829schqjxjdxncs6
|
||||
seven1twockldvjsbeight
|
||||
csjv58dshcsdrkgsixrdl
|
||||
nineeightstjnxcgzbxrldsevenfour857
|
||||
oneqpndxmthreemnmlnqnffv7
|
||||
twotwo8qkdfcxvd253bhd
|
||||
sevenfour3
|
||||
t2sevenfgmjjrg63fourrvlz
|
||||
4six9fivelbkzffrvsoneightxsj
|
||||
nkkdsbp7kkjchhfckqqxfourthree9
|
||||
7eightone4fiveninevxtrmbhfbrone
|
||||
onemjzfsvsbh2vmsxdmcncjlnvtsqszv
|
||||
eight26
|
||||
sixseven7four
|
||||
cpkzctmhpmpgtwoqfeight79
|
||||
vplxpx9tndmcpsone2
|
||||
eightone2bqlmdmf
|
||||
8sevenfivetwod5one
|
||||
fxmhpcdckl5czfcmeight
|
||||
9216gdptpmninetkfjszftzdfive
|
||||
ninefivemrvmdt5nshfxgg5
|
||||
9qclonefive91
|
||||
six28ninethreefive8two
|
||||
76five
|
||||
njdtpktmsqvbfourv9mmonesix
|
||||
5qxckljjpninedstsfdthreevfrsmtn3
|
||||
tzrrbjlbq7eight
|
||||
bzl5
|
||||
3eightsrnlmlvhtwo
|
||||
vthqnine1zfive2six6four
|
||||
cseight1oneone
|
||||
mgnkflp4grkdrrrtfzmjkbtblfivebgcrmgggxjgkm3
|
||||
5three1vfrseveneight
|
||||
seven42seven178
|
||||
8bnrrzbbvghcqdbtwo
|
||||
fivegxdzcmbzsix6sktwo2dp5
|
||||
xqdtmb2sevenxpvdlfsqqkgfxqjqq8468
|
||||
rscsljnnkd2seven
|
||||
mzeightwo49ngtzr
|
||||
threesk3four3five
|
||||
7shzxkjkgrt71
|
||||
nxcnnmkqgv1mdmxtkjtwo9bhbbfive
|
||||
kdxmcg578six7nxqqbm4ddsxzxmtkq
|
||||
8rjdkmqfivevpfthbjkbt9mnine
|
||||
5pxfive
|
||||
hgnfjtwofive2fxxeightmx
|
||||
pxpqvld69
|
||||
onesixtxmxttxqfour1rxfrvsgdsveight
|
||||
95nine9onetwo
|
||||
48ftnmcxrmxc2vqsgrsqskzs
|
||||
one4threeseventhree86
|
||||
one9ninensqxone5zqfvmpd6eightwozgb
|
||||
527two3croneeight
|
||||
sixzdzfour291eight
|
||||
5vzlblhll42hnrrrjj
|
||||
xzdkkpseven9one1vlsixfour
|
||||
4tbzbrthree
|
||||
8hceighthtd
|
||||
9four4
|
||||
eighteight7eight6hfthree
|
||||
6fourbbx1
|
||||
5onepfzgneightsixxb
|
||||
xzrjpnfvxr61
|
||||
two1ninenine6pbhkzzgjq6
|
||||
sdltwonecbbffldnfdlkh131ggkrqqg
|
||||
kxrzqltp3vfh39
|
||||
nine79djhzhhgxvglg
|
||||
5four1one833
|
||||
1twosevenseven3three
|
||||
4nineseven
|
||||
three42kzqllpf
|
||||
zkxflrctvsevengkpnqkrrj2
|
||||
6oneleight9ncnmxbrnkf
|
||||
qthreenine4vpbzzzfnine
|
||||
792
|
||||
hjmn85vtfjgtqv
|
||||
one3sblncblnvf
|
||||
ssxxddpqbdznrczqgsix64three4
|
||||
2four4fourtbeighttmm
|
||||
fournineeightfive1twofkjcsrklpxlsdvxnt7
|
||||
lrlzz8eightmpspsk3nineseveneightnine
|
||||
v4
|
||||
eight9gfzone
|
||||
jscpppmpnfkhcxlj1pbtbltmj6one5
|
||||
8nqrmzrbvzrnine
|
||||
two34m73twoklqqdlcrrh1
|
||||
7fourtmpxnf
|
||||
twocpbznkqnqsixt86
|
||||
81sevenfsdldftgzvnhhhf
|
||||
ggntprxxqrpknineeight8fourlmvsr5
|
||||
sevenztwoseventfour7eight
|
||||
fkcbvhmqqk1sevenseventwoseventhree
|
||||
three6ltvtkkhgdpsixsixsltgdngvrttwokz
|
||||
2fourv
|
||||
c29fsczzfiveqmrfivejbglcqhl6
|
||||
4two3
|
||||
nine2kphnrztjltxgq1sevenone
|
||||
lpbcgone8
|
||||
vcznvhllrbfx4275
|
||||
fhlsdjmppnrgqhqqxt921
|
||||
4four2sqzzcvh
|
||||
19nbcvlmhlkqfshhckzkzpqbxfour
|
||||
seven19
|
||||
6xprmkgfgntwo4bqk
|
||||
threexf5threefive4
|
||||
3fqone
|
||||
5g2x68cfghcmtwo8
|
||||
1fourq
|
||||
pflnjchgnine25one5eightxvjkkxb3
|
||||
twontnqpcqc17
|
||||
cxdmgmvmfssevenone6onezdmnltchtnfour
|
||||
cpcthreeb76zlglhtkdxrlxjsevenzmvd
|
||||
sixbhjbcpfjeightjcdthzccpzeight1kknxfck
|
||||
bhkplfzcdqdfsffcone3seven
|
||||
ninethreeqnxmgmjct2
|
||||
ninexjlfivelqznkhngnsvnqhqsqdglsix78
|
||||
9zbqrkmvvnine
|
||||
1ninehqtmlsd6zjmbgbhjm8
|
||||
fourvmht91nine551
|
||||
8eightmfgjteight4one
|
||||
6eight1lhfhmqvjsixjpdgnjrzzbtbcgb
|
||||
lxptvkmftqffksixtpfnvkxzvkldfpeightnhncz6
|
||||
lnsvgtjs2nbsqbkjs
|
||||
8twohtdv32
|
||||
9cbdbvvmninekzbrfchsseven1
|
||||
8onethree7
|
||||
hk7fourxvqdqmnsdnine
|
||||
hxbjdsk1vkjbsqn6six3nine7four
|
||||
485
|
||||
5four1kmbcxhjseven
|
||||
2hjfhtmfg3sixonetwo3five
|
||||
dvfk7sixninethree
|
||||
onesix827
|
||||
87seventhree
|
||||
twosix16lfdfkxbmbcfive
|
||||
1mssxhvgvmxfoursbjdnbrts27rllfm17
|
||||
rrvpckn9fourgvrhhzppncrqqml7keightwop
|
||||
knvmsveightxpbmxptkjbtmzzn3pzbl
|
||||
47eight1
|
||||
815vd5gnbgone
|
||||
xbclfszchvone21
|
||||
7ttwofourthreehjhpjmtwogrng4
|
||||
twothreeoneseven9qd66
|
||||
9dhbgmqgr7threekfhzkqqg
|
||||
fivekvxpqrkkffc6mjrpksfcqfln9
|
||||
63two97
|
||||
txbn163qkbddlcgdznine9
|
||||
dztphkcfnnninekjqdb89one
|
||||
mqvtrtz9
|
||||
7hcnmcs
|
||||
foursix7nine
|
||||
sevenstm9gfjvjcnmjnnhbgmrkgkccsflm
|
||||
two2jgfqdmlkdndmsp1rqlrqonel
|
||||
eight2qfive1oneqjnine
|
||||
mtnxzx7tthreeshdxpcrhrk
|
||||
vzdgktfcq1xtfxqzzfdpng693btkcqhxpsmczbxq
|
||||
zbvgtnzmlghvhnklhmhjnxckone4six
|
||||
98eight2seven3hhbxgvnhbg
|
||||
seventwo7seventhree5ltlptmhjp
|
||||
1rf75fivegx
|
||||
2nineonemlhxmhdt7six3
|
||||
nine6sevenlzndhbnpkxdhdtcqpzgvkskvjkhphpqnxl
|
||||
qnqpnlxcjr3phkkpnccxr2sixrslhrtf2
|
||||
12mrkvqsjdcc47six
|
||||
onehhdveight35jgnmgvqgxdr
|
||||
hgoneight5
|
||||
m9eight384eight1
|
||||
1p6
|
||||
3sixnine41seventhree4
|
||||
5dvssdf
|
||||
blchhcfourgzvssbhqdxdbxt14zvbknhnll7
|
||||
7twotgqrxddm5
|
||||
btlkbgbtwotwo5
|
||||
five63ninesnqx
|
||||
fivemkvjpslfoursixfivepjvtx4
|
||||
74threeeighteight6cpbxbqgzh
|
||||
twoeight7bh
|
||||
rgtwo7fnck7
|
||||
five4sixnvjtcmx12one
|
||||
ghqgdfour33
|
||||
tjpdztkfour666dxgzjzlgnz
|
||||
ninegnqrqpbrz8seven7sevenhfbone
|
||||
npzlpklnvgone6nrjcpz8
|
||||
2seven6m8
|
||||
seven3fivegqvxgrjcnine2xppl
|
||||
nbmvdgk9grz4
|
||||
four291
|
||||
tdnfgkzkxbfpkpcthreenineoneone1
|
||||
7nineflqptxmdjgttpll
|
||||
one1jnhcvthree1
|
||||
foureightkxfcqlkp2fclpr8bzxtfbl8grdsntkrst
|
||||
six16fivezqbchmjbb
|
||||
zjhkd5two8
|
||||
745shv
|
||||
l64dqvsixthreethree
|
||||
rffrrmjsfj2jblgqnl7gjfcqtszfour7
|
||||
fcqcmchhc7t
|
||||
twofour834ninefpvbvps
|
||||
gmhhjr94svpddnmxvd98threerlljccvq
|
||||
ninetwosevenb71three
|
||||
eight4xllkpmjkrp4bv
|
||||
zhvzsfourrkflmjpjhfourfjbd32jkvrpzqg
|
||||
2frgbkngmsix9stldncmsczh
|
||||
eight9three42grlbfps85
|
||||
1lrshxpgxlsnrlfjlxk2
|
||||
jfhmhcml8mvbfkxhmoneeight9
|
||||
five8sevenlzvpzpsbjfourseven1fkcfdf
|
||||
4vmldcjpbbsnfourseven4three
|
||||
mfchhbqk7bdlrqhone2fiveone
|
||||
hnncfrgmnkg5six
|
||||
dbone55seven
|
||||
geightwoonevhxbqbpfkx6two67
|
||||
sixcrnq1hnrsttfxvjeighteighttwoone
|
||||
fiveonetwo7six
|
||||
9nqrmt5n9fkpbhd7
|
||||
two1fivesixtsrq
|
||||
684
|
||||
ckbxntxfhthreefour7sixseventwo
|
||||
stdhzqdpnxnine6tn7kjxftfbksevennhfxznjxgchm
|
||||
8czxhfptlknjlhn5clhzdfgntx741
|
||||
3nine64vvgsfour61pzb
|
||||
rloneight7lfrfqqb8fivefour3
|
||||
vnhbtkbqone4sixsevennmrgmmptvreight4
|
||||
bdvjp354992jgfhzzvhv
|
||||
fourp1
|
||||
five7oneseven
|
||||
oneone954threefivesixsfr
|
||||
sixfivevmzlzdfjvq5
|
||||
4bs
|
||||
threetwo64ccks3
|
||||
onetxqh3ljpnkr9onegsmkq
|
||||
five24seven6threethreezfqzgzjztgntkcfzt
|
||||
3fourv2
|
||||
eightoneeight6qseven47seven
|
||||
559ninexcdkqvszsq1
|
||||
95sixthreetwo8fourthreesix
|
||||
ksxtrn1gqxthvxjltfivejpmgvz8
|
||||
ninezdkfvgceightnine7sevenfiveeight1
|
||||
h43zktkckcjrg5nmzjkrzmjqsix3
|
||||
44pqlgmmzvgzpslmnccdjlvq
|
||||
4threefoursix87
|
||||
92gnjfsxzlcn71qzcbvq6nhmgsvmbrvvjzqlndhl
|
||||
hkmjkc9fourpbgjlvqxhbhnzvmlnfrqsixsixksix
|
||||
mspbpsgzn31ninesix
|
||||
7xqtttthreegr4fourrbflxfznfs5three
|
||||
rtpknqgsix7sixthreethree1one
|
||||
qqlqh8seven
|
||||
six11eightkh73one
|
||||
eight9mjzpmhcr999fourfive
|
||||
fzeightwo7smqq
|
||||
7dzzxnttq
|
||||
4vfk9
|
||||
ninermjmpprxmsdgrpgzmmqtjxkpfour5kscxs
|
||||
h5lnhnrqhvltpsns
|
||||
twosfdsxcjjhg871755
|
||||
1one5
|
||||
933zdzz1five2
|
||||
4zxh9j
|
||||
bnlmdd9
|
||||
nine4xchhpgnfjtwohggvlkkxthznnf7four
|
||||
3foursixhmsddvmqkgpjvone34
|
||||
bjfxjlseventhreeninesevenfivethree9
|
||||
qhqgxtjvslnvbvjsixjplmfq8
|
||||
8ffjpthreerzkdjkjjzxvqkspsevenfive
|
||||
3three4two1
|
||||
fiveldkk7ninesevenmfnjfjmdgeightprjrq
|
||||
4rqbz6eight3lbgbpgcveightthreefive
|
||||
sixdsmvltdv2six3fourxtkzsvjdbvqfmthree
|
||||
3one2xgzvczlxvfdpjqgninefourfourzft
|
||||
sixcnfznvcb8four
|
||||
3threethree
|
||||
trzqdpslthree8
|
||||
3fivefourninefivethreefive8nine
|
||||
1sevensevennineninezmghprscjskqppgmh
|
||||
6zfoneqkxhxmtwofour3four9
|
||||
twosix6dxftmjgclkkmzxmkglmqvsrtjcp
|
||||
ninejkbk8v5fivefivethree
|
||||
9twoneqv
|
||||
1cq51lklfoureight2
|
||||
8sixfournine3one
|
||||
5plgtszkt6856six
|
||||
qoneqjph11hgvhhkglsreight1pkxrltrzm
|
||||
nine25mlxmkmcg4xlrntfsrrxmlhdtzt1
|
||||
fivetfdzmsq2
|
||||
pdhnkbjrj5fiverjpgmntqkpmx
|
||||
fourvgc1msdnxrbpbcjfive
|
||||
14tbcfmjl3sevenvj
|
||||
ninezrcfqvg9
|
||||
5eighteightkkvtsbrkjlthreegspdm
|
||||
99four5two9
|
||||
pvlvjvhmg5krzl149sixtknbgfsgvf
|
||||
44tvzgpz1
|
||||
8threenmhmptmshpcsix
|
||||
5rdjmjnmkcd
|
||||
ctwo6
|
||||
two1dhtmsdtsds
|
||||
ndjd4sbzm5fourseven82
|
||||
rfqsxkdhcr1twotwo
|
||||
4qrt5threetwosevenffjdvtzhgfd
|
||||
6421
|
||||
sjgfshzjg5four
|
||||
threeqpvpvdhgjhpgqxsrhhp5dqjqlr
|
||||
five7ncchvpcfmglmfzstrmvhfnqndzrmvb5
|
||||
fvnfmcrh684bjq63dxnnlznrn
|
||||
threedccxvrtbj62bfqfzlpxms8five
|
||||
893shxkgpvpfour36nine7
|
||||
dtoneightbrmthree6
|
||||
6seven58nine1mgqqtzfsszlrgghmlknx
|
||||
four64
|
||||
five5dklfour4
|
||||
lgv2eightvcp
|
||||
pnfkrfnncv3lgqlrznone
|
||||
sgcthreegxrnfkpb731
|
||||
8twothreetnxlmjtwoneb
|
||||
txkrmcklpdhclrklxz41lhddmkp
|
||||
rqndtwosixq8
|
||||
btbndntqsllxc6vzfrdqm2sixfiveeight
|
||||
rhvfourp1seven5cxcc
|
||||
jlzzqkvfxqltgbnj1
|
||||
24szksixthreeone62
|
||||
2fourfpmjltjnqvgrgxxbggtseven6qms
|
||||
78prqkfbf6sevenfivesixeight
|
||||
drtwoszsevenckqrxfseven3sixseven
|
||||
zbsj6four
|
||||
hrcxgvdbd6
|
||||
six9three4onefournnsxgvjtrdthree
|
||||
441
|
||||
fjnjksnvgjznxflonetwovcnmvhdgjfggfvxmmg2hppfcgjqv2
|
||||
kjszbvrcqznbf4eight5four
|
||||
twolmbrdmx8kpltmqznslfsixsix
|
||||
6bjrfthk8
|
||||
gmzzsthreensrx3
|
||||
sevenz63xlscxeight
|
||||
fivehmrcphp7nine53
|
||||
fivepmqvjqllgthree5vkpn94nine
|
||||
seventhree9sbklvfvpsixr6
|
||||
one56six
|
||||
pfivetmqrbqxccpxsbcc87five8
|
||||
mtmnvlhfsix75ppk9rrqzbbplmbseven
|
||||
547mmntlxflkztkkftxkrrk
|
||||
5four9threelcqlsrlvg2
|
||||
gglpjhvjnnnrcbj3n55
|
||||
xgdbjcrxdf5jjdfrrkzkdzpjkrlstwogbzcjq
|
||||
cfmgxkjcfq9bkcpkrpltp
|
||||
fcqkjhqgpkthree4sixthree84frmfqqkrs
|
||||
onetwosveight68ftgjft3four
|
||||
jvlmg2eight3bdptwo4sixseven
|
||||
three1bhdkfnvt
|
||||
6eight12fiveseven
|
||||
onedbxgcqnltfour35
|
||||
sxtwone5336psninexnrjsxsix
|
||||
four79one47jvmmhhggcthreecgkxhnlm
|
||||
17eight2fivetzcfmrlxvd
|
||||
rxlhkjlm778oneone
|
||||
8one1one499nine
|
||||
six2fqd
|
||||
9smpkfchhzn8seventrpbvcssscseven
|
||||
nbmqctcldmnvnbnzns9twofive2three
|
||||
1five1two
|
||||
89brvbgnine
|
||||
vcbrztfjzn4
|
||||
4fvmlvxjd
|
||||
lsixoneplt7two9
|
||||
kphbsssvsnjgjnvqjcbh2nkmfeightseven
|
||||
three4xsrmfldqgpqxbpsevenfour
|
||||
rzd8xzmcdch
|
||||
bjffone41xzone
|
||||
xkmhqhgr2lxpv4jnsrnfour
|
||||
31cplcztdkhsix
|
||||
6tkzzqqckvdlkxrfourrveightwoch
|
||||
26vkvbdvggfcsjccrkzbh
|
||||
3nr
|
||||
ninefourklmqgsix3cvnr
|
||||
mlnzksvhnvvbxpsfnspl6hpqkdmg
|
||||
btwone1jpgjdmgbfive
|
||||
817sixqtvhxpfglj5kzmbtwofive
|
||||
1tworcsevennine
|
||||
xseven69six11
|
||||
four3sevenjmgqzf3two
|
||||
mbrfzsj2
|
||||
8xgsdninefourseven
|
||||
six14snscgfnconeeight4
|
||||
seven4fivefoureightfive1
|
||||
threegjgdnqvhqlbdv24fivexdvpdthree
|
||||
9ldkmtzghbtwohqzzntwofive
|
||||
fourxh8
|
||||
eightfkxhflcone3xscqdqqkrk
|
||||
qzlbtgc2sevens7
|
||||
rfjgmfbjt185hztszz111
|
||||
pxsixssnfgtfour9
|
||||
zxflhgjnmbgfdqtzs4twojzxbrsix
|
||||
7cc153fivel8
|
||||
bzoneightlrvmnrh98
|
||||
threetwogd6bhdkrjhxt2three
|
||||
hlrscbd8rvppfclqdtseven
|
||||
twofivelbjh3gbnbdbpthtgpqjmxjlmzjq9zqll
|
||||
2fczpbhqjqfgzvzzkqgmsevenone58three
|
||||
fourzvmlt3sggpjzssljc8twoeighttwo
|
||||
ninescglkgftppbm187
|
||||
five1vll26two
|
||||
czghbj5827
|
||||
nine7threerngqxk
|
||||
four5bjbhfglffourseveneightfourj8
|
||||
djqrxfive4five8
|
||||
3xzhpqc6six
|
||||
1htdxrgtrhvpgz
|
||||
5bkxxsccdftjmhkfjqvjzjnine
|
||||
pxpdfdnnpqzspxd9xrpvrxhnsix9four3
|
||||
gtxlzxdninexxhseven5
|
||||
xcdkvdg7nineeightsdjvkhzgmone
|
||||
zrnrrpxdfcnine2qgjxzfxcqgghbdk9
|
||||
twozrckqbppsixhh7pmrmnktnrb7five
|
||||
tdxpjz2kccgqzcslm8sixsixtwo
|
||||
8tgcb32
|
||||
eight391gxm99five8
|
||||
one3fivegrpjr4trqxj5eighteight
|
||||
7eightzsnndnine8fourgphhbhxn
|
||||
7five8seven6mhkksix
|
||||
8jvccfldpqfourgltcqbkpkfourtwohbvnnine2
|
||||
rrvmvtvbrmsgnstbghfl28
|
||||
66fourninekjzfzrj
|
||||
seventwoninethree3plvfoureight5
|
||||
fmpzrfpqqbfivenine7
|
||||
nrkbbdqdthree1fkbfivefourqlksbfdsjtthplhjhlvgh
|
||||
176seven
|
||||
3fourfiveseven681
|
||||
five88rzxk3mqgtkvgpdx
|
||||
pgttnnvnhtl4rljpqjzhphmkztwokdqspbth
|
||||
54eightgngggmdmnxgd
|
||||
d6jnkq78cgvkrgseven
|
||||
sixeight7eight1dmvvprm
|
||||
72twotwo2kntsrccqkmzbn4
|
||||
snctbphhl2jgpghbvhg
|
||||
one5xxvhfive6twozmlxddppmb
|
||||
145eight5jcpmqhkpgrdbvlzl3
|
||||
two4vtlfddtzrzlmkgx15
|
||||
2fourseven9pxqzdf3
|
||||
6ninec3
|
||||
ninefsix54
|
||||
sevenbzgrdbbvfmbkvb8
|
||||
vntfxdprf91rmgvxlxhntsztmggjr1
|
||||
six4spdffrjfthree595four
|
||||
pxfftjkdnninexkjvskrtpmjkhnncflz26
|
||||
dkjmxmhpc7eight7
|
||||
hsbdfeight9hhrjcn8twothreehjpnbhslcc
|
||||
437kzcqvsmxkknfour
|
||||
8twoone54sixvmlcjdnrgnqbmlrvdtnh
|
||||
one587
|
||||
4kxxsrcseven33dcvbbgkbcd4fourfour
|
||||
nine56
|
||||
oneeightpz4rqbrcdvjbx55
|
||||
threefive33ninexrlj
|
||||
3bxjdxlmlgs
|
||||
gqmkpqpppfour9fouroneeightseven
|
||||
492
|
||||
one398threetwo6dseven
|
||||
j8vlfrninebdgnineljtvbeight
|
||||
nnnhx28sixtwo
|
||||
fiverbgztggr6ktrsfvbtqlbtdshqjxjhj
|
||||
qmdjfthzfour318hrffjj
|
||||
977dpssrfgfxfxkk6
|
||||
rvklzfdfour3twofour8five
|
||||
czbjbfdcbs1rgkfscgntmhksixhqgbrmzvzrg
|
||||
3xqlbqbcxnfq
|
||||
six29
|
||||
jhnfthree7
|
||||
five1821
|
||||
578blhpbtrjthree83qtflsj
|
||||
fgzqnrvfcqkfrdmgkndmrxfctgvsbfive2eight5
|
||||
feight8eight
|
||||
3qmfbdztrgpb5
|
||||
ck5three14lzmffcljxcr
|
||||
3twoqgjqlvjeight5nddhpflj1
|
||||
vvdsttjjjgnrzgfournkkhp622onesix
|
||||
two7seven6
|
||||
7941
|
||||
28two7
|
||||
ninejhxnjctz3jtxmlmjg
|
||||
vmjpxvqg24pzjfsxvcg5seven2
|
||||
xpqbffpvmn5
|
||||
32eightseventhreekqdgtcxgjxvv1seven
|
||||
2eight3tllbkklghb7
|
||||
sevenfour1
|
||||
tjsjfldclvqq1sxcl
|
||||
mrdqvsxk15jbxstdph
|
||||
9fivefivebbtcvhqjjdvvqeight
|
||||
fourdtbkzvhrbvzqnnzghnpv1231
|
||||
bz34five1
|
||||
six26two2
|
||||
bczkffnrtmsrctwoninelbnxoneeight2
|
||||
sevenstvffmtkqqxg57hthreeeight
|
||||
4fivesevenrdfcdrxd4
|
||||
bbbrjsjrmn8px
|
||||
317vncvpdrh91threetwosix
|
||||
9sevenzpfivethreefivenineseven7
|
||||
twodsnvkbvfbtwo62tt6
|
||||
threesctkeight3vdjrnflh9nckgmzhdf4
|
||||
eightsixtwo39skhnzf
|
||||
foursix6
|
||||
3sixzp5fdzjv
|
||||
ntwone9xzspfhrthreehsgpqdone62
|
||||
five9597tgrfbl9
|
||||
six4rvrcbbjzfdcgctsxjxmjrpc4thmmj8
|
||||
3sixmdglgdj2zzrkgsdgk2
|
||||
cbfxpgftninekthreexvmhxmkx1fourf
|
||||
76twoone
|
||||
7six32two1fivefspjtdsix
|
||||
nrcntbgdtjsevenztsmsgfmfour9thslsmhgnk2three
|
||||
21ltslbrnineseven7
|
||||
41
|
||||
sevencdsnmzkspseven49
|
||||
jbzkthreebjgvhfhcftwojbzdbmcdlff29
|
||||
sevengjlph11fivexhzdrs
|
||||
fzkznzxgbsfq4
|
||||
gvpqjgrfdbdtrpqseven11mmjpkz5
|
||||
ksfjpnchqzqone15eightsixfivenine
|
||||
2skjmpvdfoursixtwones
|
||||
dmtzhqfivethree3eighteightoneseven
|
||||
one6fourrrrtkkjvr
|
||||
229spkrxlg
|
||||
4xjqzfourdtmq
|
||||
mkv5six
|
||||
8jdzlpqvc89two
|
||||
2foursix69k
|
||||
xbqrmktzfive4
|
||||
five9rjrvcpfbseightfkmlgbvqkbqj
|
||||
qnmkvkmckfxqmdtwosevendj6sevensixfive
|
||||
mkdvknghvsgzrbbjqngbsqeight6mjxfivenineq
|
||||
6two97mxm
|
||||
two26jjqjs
|
||||
1scslcns
|
||||
pckdk4onesevenpnxq8lxxbzvftcbeightl
|
||||
qczvprdbeight3twosixsevenfivenbzj
|
||||
462mfgmhfseven4vmv
|
||||
gqsrhltninethreedbkrjdfivetwo1
|
||||
ppsix99nine8qvhbnn48
|
||||
nine35fxlxqfctwonezf
|
||||
four2twofive1
|
||||
847dsgonethree1vkmhmtv
|
||||
8gnfbqmzszxdfkv5five
|
||||
22kvqd
|
||||
five1sevenl59
|
||||
kgshxdjdfjqzthhplhjqxbjpbxggtz1
|
||||
fourbzbzvtfj8twoone6629
|
||||
hn28six1
|
||||
xqxknfivevxhljqpsixtwo3
|
||||
hsconethree1fourthree
|
||||
three5gnlgcthree36rkvlpkcvronefour
|
||||
rvjqkndonenine3hbrtlzhcbfbkcfive
|
||||
hhrmnbnct6rdxxtkxkcrbdfg5
|
||||
6xsqkbthreerjgbzfhb
|
||||
sixnlxzmblfzx5cspjqthree
|
||||
4twondrxjb
|
||||
4three6b
|
||||
4four3three16
|
||||
eight3hshdzptsq6twosfour3
|
||||
eight37twotrxvpxk2ksbldctj
|
||||
fourseven8fkmtqzdbfourseven
|
||||
6vngvcmplx
|
||||
jhr6gfplmzpr2fourfive
|
||||
eightnine49twoeight2nfndmmb
|
||||
three7threej4xnffjtnckltwo
|
||||
onegzlnjsgzlg82mkbfhtmhfour
|
||||
85vnseight5fivevcqrgvgrtp
|
||||
47chxx6pkrdxvmrvvfxbl5
|
||||
34ctkstrjxsnfourseven
|
||||
two9zcrghthreethree
|
||||
veight37
|
||||
two44nine449
|
||||
58eight98cspxfhftvx
|
||||
cxpththree7pbmhhmkfzfvthree
|
||||
8nine2hbmdnvbthree
|
||||
1four6ncdvzqjqhx1
|
||||
1bgqspl958lrj
|
||||
7nvmqrnthreejbzgnzvzpgkr69
|
||||
7576threesix
|
||||
twoc83pt
|
||||
fourkdnsvcq9sevendmhsdgt54threej
|
||||
zrjts8sixsix237flm
|
||||
8eightrndfour
|
||||
two9jsix5gcxf
|
||||
fivefour7nineseven1qtcdqbp1four
|
||||
fourzvkqhdninetwoftscrmsd64nxsgx
|
||||
q1tdsskthree
|
||||
mkhttggvjh9ctzffdqdjnheightninegmxqxhqrfqgbgzt
|
||||
ninep2fourf
|
||||
fiveeight2zxjpzffvdsevenjhjvjfiveone
|
||||
15737seven
|
||||
pdrss6oneone4fournine
|
||||
7b
|
||||
@@ -0,0 +1,102 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
sum int
|
||||
sum2 int
|
||||
}
|
||||
|
||||
func (r result) String() string {
|
||||
return fmt.Sprintln("result pt1:", r.sum, "\nresult pt2:", r.sum2)
|
||||
}
|
||||
|
||||
var numbers = []string{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
result := &result{}
|
||||
|
||||
for scan.Scan() {
|
||||
var first, last int
|
||||
var first2, last2 int
|
||||
|
||||
text := scan.Text()
|
||||
|
||||
slice := make([]rune, 5)
|
||||
for i := range text {
|
||||
copy(slice, []rune(text[i:]))
|
||||
|
||||
switch {
|
||||
case slice[0] >= '0' && slice[0] <= '9':
|
||||
if first == 0 {
|
||||
first = int(slice[0] - '0')
|
||||
}
|
||||
if first2 == 0 {
|
||||
first2 = int(slice[0] - '0')
|
||||
}
|
||||
default:
|
||||
if first2 != 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
for i, s := range numbers {
|
||||
if strings.HasPrefix(string(slice), s) {
|
||||
first2 = i
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
if first != 0 && first2 != 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
text = string(aoc.Reverse([]rune(text)))
|
||||
|
||||
for i := range text {
|
||||
copy(slice, []rune(text[i:]))
|
||||
slice = aoc.Reverse(slice)
|
||||
|
||||
switch {
|
||||
case slice[4] >= '0' && slice[4] <= '9':
|
||||
if last == 0 {
|
||||
last = int(slice[4] - '0')
|
||||
}
|
||||
if last2 == 0 {
|
||||
last2 = int(slice[4] - '0')
|
||||
}
|
||||
default:
|
||||
if last2 != 0 {
|
||||
continue
|
||||
}
|
||||
for i, s := range numbers {
|
||||
if strings.HasSuffix(string(slice), s) {
|
||||
last2 = i
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if last != 0 && last2 != 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
result.sum += first*10 + last
|
||||
result.sum2 += first2*10 + last2
|
||||
}
|
||||
if err := scan.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example1.txt
|
||||
var example1 []byte
|
||||
|
||||
//go:embed example2.txt
|
||||
var example2 []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample1(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example1))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.sum, 142)
|
||||
}
|
||||
|
||||
func TestExample2(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example2))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.sum2, 281)
|
||||
}
|
||||
func TestInput(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.sum, 54573)
|
||||
is.Equal(result.sum2, 54591)
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
|
||||
Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
|
||||
Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
|
||||
Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
|
||||
Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green
|
||||
@@ -0,0 +1,100 @@
|
||||
Game 1: 1 green, 6 red, 4 blue; 2 blue, 6 green, 7 red; 3 red, 4 blue, 6 green; 3 green; 3 blue, 2 green, 1 red
|
||||
Game 2: 2 blue, 4 red, 7 green; 17 red, 3 blue, 2 green; 3 green, 14 red, 1 blue
|
||||
Game 3: 12 blue, 3 red, 1 green; 8 blue, 9 red; 1 blue, 1 green, 9 red; 4 blue, 1 green, 9 red
|
||||
Game 4: 2 red, 10 green, 5 blue; 11 blue, 4 green; 6 green, 7 blue, 2 red; 4 blue, 9 green; 6 green, 1 red, 5 blue
|
||||
Game 5: 10 green, 5 blue, 5 red; 10 blue, 13 green; 2 red, 12 blue; 9 green, 9 red
|
||||
Game 6: 2 red, 3 green; 1 blue, 15 red, 2 green; 1 green, 7 red
|
||||
Game 7: 16 blue, 4 green, 9 red; 6 red, 2 blue, 12 green; 2 red, 5 green, 14 blue; 11 blue, 13 red; 10 blue, 3 red, 17 green; 1 green, 12 blue
|
||||
Game 8: 14 red, 12 green, 1 blue; 5 blue, 7 green, 12 red; 8 green, 1 red, 8 blue; 8 blue, 2 green, 15 red; 9 blue, 12 red, 10 green; 4 blue, 15 red, 1 green
|
||||
Game 9: 2 red, 7 green, 5 blue; 1 red, 5 blue, 13 green; 5 blue
|
||||
Game 10: 4 red, 1 green, 4 blue; 7 green, 8 blue, 4 red; 9 green, 3 red, 8 blue; 5 red, 2 green, 7 blue
|
||||
Game 11: 4 green, 1 blue, 1 red; 3 green, 3 red, 1 blue; 3 green, 1 red, 1 blue
|
||||
Game 12: 7 red, 6 green, 12 blue; 6 blue, 8 green, 3 red; 12 green, 5 blue, 4 red; 3 red, 16 blue, 8 green; 12 red, 11 green, 6 blue
|
||||
Game 13: 2 green, 5 red, 12 blue; 8 green, 12 red, 4 blue; 6 blue, 7 green, 13 red
|
||||
Game 14: 1 blue, 7 green, 5 red; 1 blue, 8 green, 6 red; 3 green, 1 blue, 4 red
|
||||
Game 15: 11 red, 8 blue, 1 green; 11 red, 1 green; 3 green, 8 red, 2 blue; 4 blue, 11 red, 1 green; 5 blue, 5 red, 2 green
|
||||
Game 16: 18 green, 4 blue, 2 red; 5 blue, 11 green, 10 red; 8 red, 2 blue, 14 green; 8 red, 7 blue, 1 green; 3 red, 5 blue, 17 green; 6 blue, 5 green, 11 red
|
||||
Game 17: 3 blue, 3 red, 7 green; 4 blue, 1 red, 2 green; 5 blue, 3 green, 3 red
|
||||
Game 18: 2 blue, 2 red, 1 green; 4 blue, 2 red, 7 green; 10 blue, 4 red, 3 green; 5 blue, 3 red, 2 green; 4 green, 3 red, 4 blue; 3 green, 5 red, 5 blue
|
||||
Game 19: 2 red, 1 green, 1 blue; 8 red, 8 blue, 10 green; 16 green, 5 blue, 2 red; 4 red, 9 green
|
||||
Game 20: 12 red, 1 blue, 1 green; 4 blue, 2 green, 2 red; 3 blue; 5 red, 8 green; 14 red, 4 blue, 6 green
|
||||
Game 21: 9 red, 7 green, 1 blue; 5 green, 17 red, 11 blue; 14 red, 7 blue, 10 green; 7 green, 7 red, 10 blue; 6 blue, 6 green, 17 red; 16 red, 13 green, 7 blue
|
||||
Game 22: 4 blue, 1 red; 1 green, 8 blue; 1 green; 6 blue, 1 red
|
||||
Game 23: 13 red, 7 blue, 1 green; 4 green, 2 blue, 7 red; 4 green, 10 blue, 12 red
|
||||
Game 24: 9 green, 10 blue; 2 blue, 4 green, 4 red; 9 green, 1 red, 9 blue; 4 green, 5 red, 12 blue
|
||||
Game 25: 4 red, 1 green; 10 green, 6 red, 4 blue; 4 red, 1 blue, 7 green; 10 green, 3 red, 7 blue
|
||||
Game 26: 8 red, 1 green, 2 blue; 5 green, 5 red; 6 green, 19 red; 11 red, 2 blue, 8 green; 13 red, 2 blue, 5 green; 15 red, 2 blue, 10 green
|
||||
Game 27: 17 blue, 1 green; 2 red, 12 blue, 11 green; 16 green, 16 blue; 18 green, 4 blue; 10 blue, 1 red, 8 green
|
||||
Game 28: 5 red, 1 green, 1 blue; 3 blue, 8 green, 4 red; 6 green, 2 red, 2 blue
|
||||
Game 29: 3 green, 12 red, 11 blue; 2 green, 15 red, 8 blue; 13 red, 4 green; 17 red, 9 blue, 5 green
|
||||
Game 30: 10 green; 4 blue, 1 green; 2 blue, 2 red, 7 green; 5 green, 4 blue, 1 red; 4 red, 10 green, 1 blue
|
||||
Game 31: 15 blue, 2 red; 17 blue, 2 green; 19 blue, 6 red
|
||||
Game 32: 1 green, 7 red; 8 red, 1 blue; 5 red, 1 blue, 11 green; 3 blue, 17 red
|
||||
Game 33: 11 red, 9 green, 1 blue; 3 green, 8 blue; 10 red, 4 green, 8 blue; 6 red, 9 blue, 17 green; 15 green, 10 red, 4 blue; 1 red, 2 blue, 7 green
|
||||
Game 34: 13 red, 6 green; 6 red, 14 green, 2 blue; 3 red, 19 green; 9 green, 9 red
|
||||
Game 35: 7 green, 3 red; 12 green, 7 blue; 13 green, 7 red, 6 blue; 3 blue, 12 red
|
||||
Game 36: 6 blue, 11 green, 14 red; 3 blue, 12 green, 4 red; 18 red, 1 blue; 7 red, 9 green, 6 blue
|
||||
Game 37: 3 red, 16 blue, 6 green; 2 green, 7 blue; 8 blue, 3 red
|
||||
Game 38: 16 blue, 3 green, 14 red; 8 red, 15 blue; 17 red, 15 blue, 4 green; 1 green, 11 blue, 17 red; 3 green, 10 blue, 17 red
|
||||
Game 39: 1 green, 2 red, 5 blue; 12 blue, 12 green; 3 blue, 1 red
|
||||
Game 40: 1 red, 2 blue, 1 green; 7 green, 1 red, 6 blue; 8 blue, 1 red, 6 green; 12 blue, 1 red, 3 green; 4 green, 8 blue
|
||||
Game 41: 2 red, 2 blue, 5 green; 5 red, 8 blue; 4 green, 4 blue; 1 red, 11 blue
|
||||
Game 42: 1 red, 3 green, 13 blue; 13 blue, 7 green; 13 green; 1 red, 3 blue, 4 green; 13 blue, 7 green
|
||||
Game 43: 3 red, 4 green; 7 red, 11 blue, 3 green; 3 green, 12 red, 7 blue; 9 blue, 5 green
|
||||
Game 44: 4 blue, 9 red, 2 green; 10 blue, 5 red, 2 green; 9 red, 9 blue, 1 green; 8 blue, 2 green, 14 red; 3 blue, 3 green, 6 red; 4 blue, 3 green, 14 red
|
||||
Game 45: 1 red, 2 green, 2 blue; 2 green, 1 red; 1 green, 2 blue; 1 green, 1 red, 2 blue; 2 red, 2 blue, 1 green
|
||||
Game 46: 1 green, 3 red, 3 blue; 6 green, 2 blue, 4 red; 1 green, 3 blue, 1 red; 3 green, 1 blue, 5 red; 6 green; 1 red, 1 green, 2 blue
|
||||
Game 47: 18 green, 1 red, 7 blue; 6 blue, 19 green, 1 red; 5 blue, 7 green, 1 red; 1 red, 5 blue, 16 green; 15 green, 3 blue
|
||||
Game 48: 4 green, 8 blue, 8 red; 13 green, 5 red, 12 blue; 9 red, 6 blue, 10 green; 18 green, 3 blue, 4 red; 2 blue, 9 red, 8 green
|
||||
Game 49: 9 blue, 5 red, 9 green; 5 blue, 11 green, 5 red; 12 green, 6 blue
|
||||
Game 50: 13 red, 8 green, 3 blue; 2 red, 11 green, 3 blue; 16 red, 7 green; 3 blue, 11 green, 15 red; 10 red, 2 blue, 5 green; 7 green, 2 blue, 4 red
|
||||
Game 51: 2 red, 1 green, 3 blue; 2 green, 11 red, 17 blue; 2 red, 3 green, 6 blue; 4 red, 3 green, 6 blue; 13 red, 12 blue
|
||||
Game 52: 1 blue, 5 green; 20 green, 6 blue; 9 blue, 6 green; 11 green, 1 red; 1 green, 1 red, 1 blue
|
||||
Game 53: 8 red, 6 blue; 6 blue, 6 red, 2 green; 5 blue, 2 green, 3 red; 3 green, 3 blue; 4 green, 5 red, 1 blue
|
||||
Game 54: 4 blue, 1 red, 3 green; 4 green, 10 blue, 9 red; 7 red, 3 blue, 3 green; 9 green, 9 red, 1 blue; 9 blue, 6 red, 7 green; 6 blue, 7 green, 9 red
|
||||
Game 55: 15 red, 1 blue, 6 green; 11 blue, 3 red; 9 blue, 3 red, 1 green
|
||||
Game 56: 8 green, 8 red, 9 blue; 8 red, 8 green, 1 blue; 7 red, 10 green, 4 blue; 10 blue, 2 green, 9 red
|
||||
Game 57: 10 red, 3 green, 2 blue; 1 red, 4 green; 7 red, 1 green, 3 blue; 12 red, 4 blue; 14 red, 5 green, 4 blue
|
||||
Game 58: 8 green, 3 blue, 7 red; 7 red, 14 blue, 5 green; 3 green, 7 red; 16 blue, 15 green; 1 red, 10 blue
|
||||
Game 59: 3 red, 13 green, 2 blue; 10 blue, 3 green, 6 red; 3 green, 2 blue; 7 green, 2 blue, 7 red; 17 green, 6 blue, 15 red
|
||||
Game 60: 2 blue, 2 red, 6 green; 11 green, 1 blue, 2 red; 1 blue, 9 green; 1 red, 4 green, 2 blue; 1 red, 2 blue, 10 green
|
||||
Game 61: 3 red, 12 blue, 1 green; 3 red, 1 green, 18 blue; 5 blue, 2 red
|
||||
Game 62: 4 red, 3 blue, 8 green; 2 blue, 8 red, 9 green; 8 blue, 15 green, 1 red
|
||||
Game 63: 14 green, 2 red, 1 blue; 7 green, 11 blue, 1 red; 7 blue, 3 red; 4 green, 10 blue, 3 red
|
||||
Game 64: 8 blue, 18 green, 2 red; 3 red, 17 green; 7 green, 1 red, 12 blue; 15 green, 2 red, 4 blue; 7 green, 8 red, 13 blue
|
||||
Game 65: 6 blue, 5 green, 2 red; 1 red, 4 green; 5 green, 1 blue; 6 blue, 3 red, 2 green; 4 blue, 5 green
|
||||
Game 66: 11 red, 9 blue, 4 green; 8 red, 8 blue; 9 red, 7 blue; 1 blue, 12 green, 4 red; 2 red, 11 blue, 10 green
|
||||
Game 67: 1 red, 4 blue, 1 green; 7 red, 1 blue; 3 green, 4 blue, 6 red; 6 green, 3 blue, 14 red; 11 red, 1 blue, 1 green; 4 green, 8 red
|
||||
Game 68: 3 red, 1 green, 2 blue; 1 red, 9 blue; 2 red, 1 green
|
||||
Game 69: 3 green, 2 blue, 2 red; 1 red, 6 green; 13 red, 2 blue, 4 green; 4 blue, 13 red, 6 green; 12 red, 2 blue
|
||||
Game 70: 15 blue, 2 green, 7 red; 3 red, 14 blue; 6 blue, 1 green; 1 red, 2 green, 4 blue; 2 green, 13 red; 12 blue, 3 red
|
||||
Game 71: 7 red, 3 blue; 1 red, 4 blue; 2 red, 5 green, 1 blue; 6 blue, 8 red, 1 green; 3 green, 7 blue, 8 red
|
||||
Game 72: 7 green; 4 green, 2 red, 8 blue; 1 blue, 5 green
|
||||
Game 73: 5 red, 5 green, 2 blue; 8 red, 1 blue, 8 green; 1 red, 3 blue, 7 green
|
||||
Game 74: 17 green, 9 blue, 4 red; 20 green, 2 red, 7 blue; 7 blue, 2 green, 4 red; 2 blue, 5 red, 20 green; 1 blue, 1 red, 12 green; 19 green, 9 blue, 3 red
|
||||
Game 75: 1 red, 8 green, 9 blue; 7 blue, 3 green, 1 red; 2 green, 1 red, 9 blue; 5 blue, 1 red, 8 green; 2 green, 1 red, 11 blue; 5 green, 1 red
|
||||
Game 76: 3 blue, 16 green, 2 red; 10 green, 3 blue, 1 red; 6 blue, 14 red, 13 green; 7 red, 2 green, 13 blue
|
||||
Game 77: 7 red, 14 green; 1 blue, 1 red; 4 red, 1 green; 7 green, 11 red
|
||||
Game 78: 1 red, 19 green; 10 green, 14 red, 1 blue; 3 green, 3 blue, 11 red; 7 blue, 1 green; 15 red, 3 green, 4 blue
|
||||
Game 79: 7 red, 7 green, 6 blue; 3 red, 7 green, 5 blue; 7 red, 8 green, 12 blue
|
||||
Game 80: 15 red, 6 blue; 1 red, 5 green, 2 blue; 1 green, 3 blue
|
||||
Game 81: 3 red, 7 blue, 7 green; 7 green, 2 blue, 4 red; 3 green, 5 blue; 9 blue, 3 red, 6 green; 6 green, 1 red, 3 blue; 8 blue, 2 green, 1 red
|
||||
Game 82: 5 red, 13 green; 3 blue, 13 green; 6 blue, 4 red, 10 green; 5 red, 1 green, 4 blue; 1 blue, 8 red; 4 red, 5 green
|
||||
Game 83: 17 red, 1 blue, 2 green; 3 green, 3 red, 2 blue; 1 red, 5 blue, 10 green; 4 blue, 9 red, 11 green
|
||||
Game 84: 13 green, 14 red, 12 blue; 14 blue, 2 red, 1 green; 4 blue, 8 red
|
||||
Game 85: 3 red, 1 blue; 6 red, 3 blue, 2 green; 5 green, 3 blue, 3 red; 3 green, 5 blue, 1 red; 1 blue, 12 red, 2 green
|
||||
Game 86: 16 blue, 17 green, 7 red; 14 blue, 13 green; 18 blue, 8 green
|
||||
Game 87: 1 blue, 1 red; 4 blue, 1 green, 4 red; 1 green, 16 red; 1 green, 12 red, 1 blue
|
||||
Game 88: 1 red, 6 green; 3 red, 2 blue, 19 green; 11 green, 2 red; 5 blue, 5 green; 5 blue, 9 green, 1 red; 2 blue, 2 red, 4 green
|
||||
Game 89: 4 green, 11 red; 8 blue, 14 red; 14 blue, 8 green, 9 red; 14 green, 15 red, 10 blue
|
||||
Game 90: 8 green, 2 red, 1 blue; 11 green, 4 blue, 2 red; 7 green, 2 blue; 13 green, 1 red
|
||||
Game 91: 1 blue, 3 green; 1 blue; 4 green, 1 blue, 1 red; 1 blue, 2 red; 1 green, 2 red; 2 red, 5 green, 2 blue
|
||||
Game 92: 16 red, 4 green, 5 blue; 9 blue, 13 green, 5 red; 13 red, 11 green, 7 blue; 11 red, 8 green, 2 blue
|
||||
Game 93: 4 blue, 3 red, 3 green; 4 blue, 2 red, 1 green; 1 green, 2 red, 2 blue; 1 green, 2 red, 2 blue; 4 green, 1 blue
|
||||
Game 94: 8 blue, 11 red, 7 green; 8 red, 6 green; 15 blue, 11 green, 2 red; 9 green, 6 red; 16 blue, 5 red, 7 green
|
||||
Game 95: 13 blue, 1 red, 10 green; 11 green, 9 blue; 6 blue
|
||||
Game 96: 1 green, 6 red; 1 red; 12 red, 1 green; 6 red, 1 blue
|
||||
Game 97: 1 red, 9 blue, 8 green; 2 green, 6 blue, 1 red; 6 green, 1 blue
|
||||
Game 98: 9 blue, 7 green, 8 red; 6 red, 11 blue, 4 green; 11 green, 9 blue, 15 red; 11 red, 6 blue, 16 green
|
||||
Game 99: 2 blue, 1 red, 9 green; 8 red, 1 blue, 1 green; 2 red, 7 green, 8 blue; 1 red, 5 green, 7 blue; 7 blue, 10 green, 9 red; 1 green, 1 blue, 1 red
|
||||
Game 100: 3 blue, 6 red, 9 green; 4 red, 3 green; 4 green, 16 red, 1 blue; 14 blue, 1 green
|
||||
@@ -0,0 +1,118 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
func main() {
|
||||
result, err := aoc.Runner(run)
|
||||
if err != nil {
|
||||
aoc.Log("ERR", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
aoc.Log(result)
|
||||
}
|
||||
|
||||
type result struct {
|
||||
sum int
|
||||
powerSum int
|
||||
}
|
||||
|
||||
func (r result) String() string {
|
||||
return fmt.Sprintln("result pt1:", r.sum, "\nresult pt2:", r.powerSum)
|
||||
}
|
||||
|
||||
type gameResult struct {
|
||||
red, green, blue int
|
||||
}
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
// only 12 red cubes, 13 green cubes, and 14 blue cubes
|
||||
maxCounts := gameResult{
|
||||
red: 12,
|
||||
green: 13,
|
||||
blue: 14,
|
||||
}
|
||||
|
||||
games := [][]gameResult{}
|
||||
games = append(games, []gameResult{})
|
||||
|
||||
for scan.Scan() {
|
||||
pfx, text, ok := strings.Cut(scan.Text(), ":")
|
||||
if !ok || !strings.HasPrefix(pfx, "Game") {
|
||||
continue
|
||||
}
|
||||
|
||||
rounds := aoc.SliceMap(func(text string) gameResult {
|
||||
round := gameResult{}
|
||||
|
||||
for _, result := range strings.Split(text, ",") {
|
||||
ns, color, _ := strings.Cut(strings.TrimSpace(result), " ")
|
||||
n, err := strconv.Atoi(ns)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
switch color {
|
||||
case "red":
|
||||
round.red = n
|
||||
case "green":
|
||||
round.green = n
|
||||
case "blue":
|
||||
round.blue = n
|
||||
}
|
||||
}
|
||||
return round
|
||||
}, strings.Split(text, ";")...)
|
||||
|
||||
games = append(games, rounds)
|
||||
}
|
||||
|
||||
aoc.Log(games)
|
||||
aoc.Log(len(games))
|
||||
|
||||
sum := 0
|
||||
powerSum := 0
|
||||
for i, game := range games {
|
||||
if i == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
mins := gameResult{}
|
||||
ok := true
|
||||
|
||||
for _, round := range game {
|
||||
mins.red = max(mins.red, round.red)
|
||||
mins.green = max(mins.green, round.green)
|
||||
mins.blue = max(mins.blue, round.blue)
|
||||
|
||||
if maxCounts.red < round.red {
|
||||
aoc.Log("game", i, round, "too many red", round.red)
|
||||
ok = false
|
||||
} else if maxCounts.blue < round.blue {
|
||||
aoc.Log("game", i, round, "too many blue", round.blue)
|
||||
ok = false
|
||||
} else if maxCounts.green < round.green {
|
||||
aoc.Log("game", i, round, "too many green", round.green)
|
||||
ok = false
|
||||
}
|
||||
aoc.Log("game", i, round, ok)
|
||||
}
|
||||
if ok {
|
||||
sum += i
|
||||
aoc.Log("game", i, "passes", sum)
|
||||
}
|
||||
power := mins.red * mins.blue * mins.green
|
||||
aoc.Log("game", i, "mins", mins, power)
|
||||
powerSum += power
|
||||
}
|
||||
return &result{sum, powerSum}, nil
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.sum, 8)
|
||||
is.Equal(result.powerSum, 2286)
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.sum, 2317)
|
||||
is.Equal(result.powerSum, 74804)
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
467..114..
|
||||
...*......
|
||||
..35..633.
|
||||
......#...
|
||||
617*......
|
||||
.....+.58.
|
||||
..592.....
|
||||
......755.
|
||||
...$.*....
|
||||
.664.598..
|
||||
@@ -0,0 +1,140 @@
|
||||
...........................775.651...............887....79...946...921...493.....942..942.....151....155....................................
|
||||
......240...................*.....-......................$..*...................*.......%.....+....................956.549.*290.......834...
|
||||
.485...+............437......906......%..608.805.725..72.....242....745..61......440................................*..*.........515...*....
|
||||
..........917.......&....146........790.....*......*....*..........*.....*...............207*......................796..116......../...924..
|
||||
722...323.-................./...410.............72..748.442............384.708...............849..%............................470..........
|
||||
.....*..........................*.....271..691....-...............4*...........388.................448......&........*....848&......751.....
|
||||
....370..$....639.748.......*...467....*.....*........921*909.....................*...32.....................165..452.30....................
|
||||
........984....*.....*...782........711.....50.172...............61&..........415.803.*.........524.......................203.......106*643.
|
||||
...............57..433.........390....................&../.............*122...........674.........*.........................................
|
||||
379..................../.........*........908..477...305.876..*..............297.415*......+.......94........../.....@378.......226..56*....
|
||||
...*..-......82.......167...936.17..958...=....*...............196......+......*.......-...380.992.............989.........29......*....301.
|
||||
..124..317.....*....................*..........839.......................191.882......231.........+......976.................+......469.....
|
||||
............643................*........778............541........655..............*............*........./............*.................515
|
||||
.....&............498#...&....726.774..............111....*378..................723.221.......473............752....523.638.......789...*...
|
||||
.....353................518..........-.........../....*...............*88.........................*..@280..=..-....................-..297...
|
||||
...........279...........................*816.....286.975.&319.....614......694.......799.......503.......861...569.............+...........
|
||||
..474........*.228..............308......................................................*............207........................838..408...
|
||||
...........226./....*................82.........................268/......814.........640.............../..489........719..=..........*.....
|
||||
....83............88.544....250.......=...87..............199.........115*....................................*...377.@.....643........658..
|
||||
........-...651.............*................&..............................*379.....411...686.397............202.*....../........217.......
|
||||
.....781.......*897......630................330.....117.961..........61..543.....#...*.....*.......323.............996.603.......*..........
|
||||
.......................................................*........473....*.....739.184.511..........+......43.833.................953...@.....
|
||||
....110......@471...........*464....@.347......779................/.....205.*.......................681.....@.........................694...
|
||||
.........................203......158.-....310./...449...726*982.............437.....+....259...................185......940*702............
|
||||
.....465....*.......747....................*..........*...............................238..&......./..963...755....*........................
|
||||
.....*....687..104..%.........645........959..497..732........988........733.....12...........417.176....$..........176.323....657..........
|
||||
...566........*...........938*......418......*............925....*28..............-.156........*................................*..#........
|
||||
.............933.......................*....988........../............................*........813.................868*674...375...839......
|
||||
.....................804.......464..452...................................47......324.789..........692*288..................................
|
||||
...959...........792....*10.....=......................*455.77...827.99....*.........................................166.......8...586......
|
||||
.....*...607......*..............................12.764......*.......*..905....590.236...#.677...823......972..204............*......*......
|
||||
..661....*........776....938..901.............@.*.........$...216...995...........*....382..*....#....546*.....#...........564........707...
|
||||
......755................*.......*698......315..291.......964................-.......=.....865........................521........150........
|
||||
........................323............./............973.........*35..........318.....204...........546..+667....214%..*..............973...
|
||||
........143......&725...........619....149..............*235..650.........604..........................*..............195..............*....
|
||||
................................*.................................926...................@240......+...433..302..672.........977....149..335.
|
||||
.......880.......&...............301.512.$.....876......331.897...#..............#...............464......+...........938.........*.........
|
||||
......@....942...603....&....879..........117..........*.....*.............562..905....377*862..............*56.........%........352..*165..
|
||||
.726......*..........239....*.....915..............@...661...905..............*...................466....223.................730............
|
||||
....*......97..839.......308.........*....115....512..........................497.392.....563........=...............448...........462*884..
|
||||
....122.........*...471*...........52...&..=...................=..................@.........*...............................531.............
|
||||
.........*..522...&.....274...........116......*572...........907..........................161..670@..@....................=........57*.....
|
||||
.........28.*.....606.......................925...............................908...86...............78..............712.....813*......16...
|
||||
....549.....512....................................825.....797.......224..660*........@.425*656.........=536..256.......*........599........
|
||||
...*.............963..................842..704.............+....425..*..............................102.......$....565.179..774/........576.
|
||||
...................*..........................*..............=...*....922........50...262....%............603......*........................
|
||||
.......636.......349...&...224...$............899.........983..319.............#........&...663....*575..%.......95.....383*................
|
||||
......=...............928........218................84.............964.........953..+...........212.........................857.............
|
||||
............................179.......68......................&....*.................787.............92&.72....455..969...........846..40...
|
||||
.993=..../..........110.407*...........%.............164..#....306.215...................552..............*....=...#.....69.602...#...*.....
|
||||
......322..........#...........561..............968..*....913............%..........@586...=.330...........166.............*........863.....
|
||||
............810...........157.*....557.....30.*.....774...................968.601*...........*....491..........557.....83*..................
|
||||
.......*368.*.......842...*...435.-...........65.-................................680.....913....#.......793....*.........87.262....34.-....
|
||||
....896......875.....*...........................581.957..758............$................................@..981..............#......*.844..
|
||||
..................957...150.......503................@....*......89....59......261..........653....................................372......
|
||||
...731...-129..+........*........-......................718.713....*.......197..*......30......+...476............872.......................
|
||||
....*...........671....917.......................800.&......=....197..763....*...96......#.........*......%......*..........739......290....
|
||||
.....234..............................814*251....../.755.............../...375.....................309.914..816...877..=.......$......$.....
|
||||
.........543.378.....74.%608.25...755..........237..............834..................431..................../..........585..................
|
||||
....408...&...*..............*................*.............214*.....................*.........89.475*.......................@..939..824....
|
||||
...*..........526..........713..&.....132...899..108.75..#..................521....428....97../.......603.....248.........878...&...*.......
|
||||
....383...............873......1....................*....850....862....%......#.=................533.........*.......................863....
|
||||
.............852.........*................578%....................*..492.........905.145.927........*........437.107.....@....29............
|
||||
......604.......#./531.179..&........56.........921..233.......943......................*..........174...........*.......271.*...32.........
|
||||
........*..619.............588......*............*...*..............918*837.....120.128......508...........536...............558...*638.....
|
||||
523....794...-....................451..544....648..365.778.....@.............@.....*............$..%414...*............453#.................
|
||||
..................&......124*...........*...............*...259........696...424...........*...............322..534................*519.....
|
||||
........201*.30...474........567.526..363............%.963......287+......*.........939.964.....994.............*.....-........287.......657
|
||||
........................709*......=.........854...527................50..591...859....%..........*....196.......188..395..157...*...........
|
||||
.281*....878................354.......*221...*............308....309...*.........$..@...72#......577.........................*...734.....481
|
||||
.....9....*.............658........235......767..12..548...=...#.......585..830....609........................603.130.....884...........*...
|
||||
........324........@...*........................*....*........628.............................................*...$...........=......658....
|
||||
..................139.206....$.....768*........986....311..........967...15...174....100-.....7$..............962....=.........561..........
|
||||
......521.....154.............318......622...................-.............%...@.................856.......60.........24..481.......520.772.
|
||||
.825..#.......*.............................180.............228.11.....173.......128......428.........405.+...68...........=..882......*....
|
||||
....*.......657...........27....798*460...................@............-..............31.*.....840...........*................@.............
|
||||
.965...931............974...*...........................798.................455*.........856......*...809...97..934.740$..570...............
|
||||
........*..511.$427....../..652..-297............296........$........552..........884..................*........%........*........128.......
|
||||
..........-..........207............................=....641.........+..........-..*....43..........329................990...........*......
|
||||
.10...................=..11....&............................./.143........875..732....&.......&............................349.....265...858
|
||||
...*......222....495%...*...618..322.......%.........116...833....*........*.........776....288....760.........-............-...............
|
||||
....291......*..........453.........*...811...398..............515........365..445....................*.....961.........433......743...$....
|
||||
.............33..................543.........@..........................=...../.....793*...........266..............668...........#.....804.
|
||||
................701....................17*.................449*741.....961......814..........................*245......*...809*.............
|
||||
.......206......*....668..728$............529..........*93........................-...833.713..............69.......292........157...224*...
|
||||
..........*585...969............810..522............866..............254.....570........*....*.....588..................+113.......-.....752
|
||||
................................/......../......257.............119...-..844...*..979..442....169.....=.259......+.............752..401.....
|
||||
...726...967........&.234.................326.....*....590*636...*............130.../.........................933.....652*439...*...........
|
||||
.....*......*12..332...-...........500#..........944..............747.......$.....................203....513.......................%864.....
|
||||
....389.&....................*...............938.......893....970.........864........538.755&.258..*........#...............717.96......+...
|
||||
.65.....180...&.............864.....169.........*................*...390............*.........*....904.........................*...354...478
|
||||
....620......472.726.931...............*.......150../.......@....960....................*928.812...........................428......*.......
|
||||
...*................*.................463..........323.....478..........964..........175.........324%........=827......66.......193..303....
|
||||
313.......................@...705.214.....174&........................-.....271........................818...............*.........+........
|
||||
........171+..830...328..158...*..%..................17....721.....568......../...........949.............*.............608.....90......570.
|
||||
....327..........*....*.......44......................*..................193-.......67.................970......966.503................#....
|
||||
669*..........386..306....+............105............443...........................*........490..130...........*....$..........$62.........
|
||||
......454...............&..954...38....*..........229....................643......388.671....@.......*...8......506....66*148.........$.....
|
||||
......*................259.........*.................*756.......596.........*........................638..+....................%....854.....
|
||||
...700......895..............................757................*.........847..............630*612..................854..606....38..........
|
||||
...............*.....93.....573......274........*...952..336...................562..................+...637............*.*..................
|
||||
945........../.814..=..........*....*...........38..=............-....&........*..................118......*.........745..855.........367...
|
||||
......676..688..................604..153...............671......513...690....891.%.....101.728..........767......28...................../...
|
||||
.........=.......700..222.443............114.....................................458...../....#...................*.........=...............
|
||||
...........660.%...&.....*.....98.232.......*............308.......650..267/..........$............................417.....806.....502......
|
||||
.......276*....500............@.............63.......621*.....520...-........913.....225.........620.597...709*632.............663*.........
|
||||
...................232...149............65.......................&........................228.....%.....-................467............800.
|
||||
..........118........+....*....@.........-.458...737.....-247.........425................/..................574......424*.........421..*....
|
||||
......158.-....*........564.599......128......*...#..........................419.............764*156.............................*......996.
|
||||
............577.563.....................*...777.......................508..............*827............................*465.....306.........
|
||||
.........................*..............848......996*......688....154...*.......%...780......51...410......357.148..856.....................
|
||||
...648.............835.713....*...609.......................&........*..885....494..........*..........661....*.............................
|
||||
...-.....477./693..*........938.....*./...........642..149......465.502......$............=.523.........#.......892................=824.....
|
||||
....................296...........44...707..........+.....*...................462......476........@...............*..........388............
|
||||
.....58...321..............127................................446...............................965....446........114.........*.............
|
||||
.........*........951...3....*.................623.263.............=.-....122..........................=....519*...........692.......%313...
|
||||
........943.......*......$....990.......795..../......*..135.....815.483....*..937*.............................634..............771........
|
||||
............460....757.....@......511/..*............564..-..............340.......109.206.......%785..148...21....................*....&...
|
||||
.47.........&...............102........265......555..................182......12*.........................*...%.................788..200....
|
||||
.../............=..................#82..........$.......207.............*863.....751.........251.....641.702.......141..640.................
|
||||
..........23..902.......174...............*.............=.....314...........................*..........*.....*667...........*...............
|
||||
.........*...............*.......*766..842.35.......243..........*......@..................57..435....501.285.............964.....*.........
|
||||
..165...100.@512.........292.......................%......79..@...726....341.511*.............*...................573..........602.74.......
|
||||
...*..................................596#...&...............769........................314.397..&31................%..855..................
|
||||
...6.....673....................898..........836.......827.......+.....-..............................133*766..........*..............290...
|
||||
..........*.........799........*.........629.......634........%.188.103.......594......464.799*295.............895...930.........-....$.....
|
||||
.....908..504.......*......603..800..936...*......*.........768..........973...*.......*...............904*16.*................358..........
|
||||
.....@............825..%......&.........*...963.294.74...........%........*....102...967...-343.................#..................94.698...
|
||||
.810...................968..............429...........*....950..313..482..397...................33.........@..297..198...114.......*...*....
|
||||
.....-............................554..................................-.......245.$...............991..282.........-...*....161..894..78...
|
||||
..705.....177.....*..872@.285........*.../813.........235....729..........*287..*...472.788.645........................144..................
|
||||
.............*..984.......*........722............496*..........*990....79......715........*............456...................812..470......
|
||||
............518......@.....950.........712..............981...........................238....579.533........373.466...615/......$.....*907..
|
||||
..716..907.......761..471..............*......../...........823..+............978*......=.....*.....#......&....*...........................
|
||||
....*...............*........990.331...46....871...........*.....447.723...@...............594...............801......................#757..
|
||||
...312...*.........211..........*.................90.860...970.........*...375...........*.....-....*779.........&..........................
|
||||
.......692..............602.............................*.............595.............841...166..327......-444....154.......................
|
||||
..............$....316..=.............+978.843........42....135/.+332.........454.........................................707.../......295..
|
||||
.........$....743..../.......-................+........................*990..................343......#.....*...............*....684........
|
||||
......651.....................644....................887.812........187.................783........749...928.291...........131...........293
|
||||
@@ -0,0 +1,128 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type partNumber struct {
|
||||
number int
|
||||
row int
|
||||
col int
|
||||
end int
|
||||
hasSymbol bool
|
||||
}
|
||||
|
||||
type symbol struct {
|
||||
symbol rune
|
||||
row int
|
||||
col int
|
||||
adjacentParts []*partNumber
|
||||
}
|
||||
type symbolTab map[int]map[int]*symbol
|
||||
|
||||
func (tab symbolTab) hasSymbol(row, col int, p partNumber) bool {
|
||||
if cols, ok := tab[row]; ok {
|
||||
s, ok := cols[col]
|
||||
if ok {
|
||||
s.adjacentParts = append(s.adjacentParts, &p)
|
||||
cols[col] = s
|
||||
}
|
||||
return ok
|
||||
}
|
||||
return false
|
||||
}
|
||||
func (tab symbolTab) scanSymbol(p partNumber) bool {
|
||||
rowStart, rowEnd := max(p.row-1, 0), p.row+1
|
||||
colStart, colEnd := max(p.col-1, 0), p.end+1
|
||||
|
||||
for i := rowStart; i <= rowEnd; i++ {
|
||||
for j := colStart; j <= colEnd; j++ {
|
||||
ok := tab.hasSymbol(i, j, p)
|
||||
if ok {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// 553079
|
||||
// 84363105
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 int
|
||||
}
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
parts := []partNumber{}
|
||||
symbols := make(symbolTab)
|
||||
symbolList := []*symbol{}
|
||||
row := 0
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
row += 1
|
||||
|
||||
slice := make([]rune, 0, 3)
|
||||
var col int
|
||||
for i, a := range text {
|
||||
col = i
|
||||
if a >= '0' && a <= '9' {
|
||||
slice = append(slice, a)
|
||||
continue
|
||||
}
|
||||
if v, err := strconv.Atoi(string(slice)); err == nil {
|
||||
parts = append(parts, partNumber{number: v, row: row, col: col - len(slice), end: col - 1})
|
||||
slice = slice[:0]
|
||||
}
|
||||
|
||||
if a != '.' {
|
||||
cols, ok := symbols[row]
|
||||
if !ok {
|
||||
cols = make(map[int]*symbol)
|
||||
}
|
||||
s := &symbol{row: row, col: col, symbol: a}
|
||||
cols[col] = s
|
||||
symbols[row] = cols
|
||||
symbolList = append(symbolList, s)
|
||||
}
|
||||
}
|
||||
if v, err := strconv.Atoi(string(slice)); err == nil {
|
||||
parts = append(parts, partNumber{number: v, row: row, col: col - len(slice), end: col - 1})
|
||||
slice = slice[:0]
|
||||
_ = slice
|
||||
}
|
||||
}
|
||||
|
||||
sum := aoc.SumIFunc(
|
||||
func(i int, p partNumber) int {
|
||||
ok := symbols.scanSymbol(p)
|
||||
parts[i].hasSymbol = ok
|
||||
if ok {
|
||||
return p.number
|
||||
}
|
||||
return 0
|
||||
}, parts...)
|
||||
|
||||
sumGears := aoc.SumFunc(
|
||||
func(s *symbol) int {
|
||||
if s.symbol == '*' && len(s.adjacentParts) == 2 {
|
||||
return s.adjacentParts[0].number * s.adjacentParts[1].number
|
||||
}
|
||||
return 0
|
||||
}, symbolList...)
|
||||
|
||||
// fmt.Println(parts)
|
||||
// fmt.Println(symbols)
|
||||
// fmt.Println(symbolList)
|
||||
fmt.Println("part1:", sum)
|
||||
fmt.Println("part2:", sumGears)
|
||||
return &result{sum, sumGears}, nil
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
_ "embed"
|
||||
"testing"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, int(4361))
|
||||
|
||||
is.Equal(result.valuePT2, 467835)
|
||||
}
|
||||
|
||||
func TestInput(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result.valuePT1)
|
||||
is.Equal(result.valuePT1, int(553079))
|
||||
|
||||
t.Log(result.valuePT2)
|
||||
is.Equal(result.valuePT2, 84363105)
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
|
||||
Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
|
||||
Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
|
||||
Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
|
||||
Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
|
||||
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11
|
||||
@@ -0,0 +1,202 @@
|
||||
Card 1: 73 92 13 35 18 96 37 72 76 39 | 82 14 66 57 25 98 49 28 3 95 81 85 31 30 16 79 7 12 55 19 97 45 9 58 2
|
||||
Card 2: 41 93 82 81 96 56 46 13 44 79 | 13 28 47 49 46 94 84 87 96 45 41 79 35 43 31 34 81 82 64 93 8 56 9 44 55
|
||||
Card 3: 22 26 55 46 94 88 3 17 91 95 | 95 97 44 25 46 91 17 20 43 94 22 34 62 73 31 55 60 79 88 90 3 80 33 89 26
|
||||
Card 4: 78 32 27 65 64 28 43 81 50 93 | 95 37 77 46 29 55 98 88 94 72 53 80 43 41 7 63 92 33 32 66 2 35 31 24 65
|
||||
Card 5: 74 21 96 20 45 88 18 10 53 73 | 80 87 86 81 28 11 77 16 70 44 8 22 72 85 27 35 42 36 84 37 59 9 41 56 3
|
||||
Card 6: 70 48 93 10 63 97 20 77 72 42 | 19 7 12 1 47 31 72 88 36 82 69 17 29 62 22 8 32 86 52 76 96 41 51 55 44
|
||||
Card 7: 79 43 87 42 8 74 51 69 3 44 | 30 27 19 42 99 28 68 43 5 36 54 24 92 97 34 44 96 2 50 82 35 69 25 45 18
|
||||
Card 8: 11 39 32 62 93 41 75 94 23 29 | 40 31 95 41 17 21 81 90 34 13 4 5 48 24 20 80 50 26 27 43 54 61 8 73 89
|
||||
Card 9: 75 99 39 45 32 35 55 87 76 21 | 34 14 80 3 93 46 71 78 23 22 87 82 42 49 76 94 10 51 44 58 11 4 91 26 43
|
||||
Card 10: 34 53 9 36 52 30 70 60 65 96 | 85 31 29 41 4 88 63 93 9 52 11 37 23 61 51 71 97 26 70 15 38 72 94 64 95
|
||||
Card 11: 41 92 42 94 63 89 85 25 86 98 | 3 20 70 74 93 34 21 82 37 55 9 79 85 41 14 99 2 92 90 26 40 57 67 89 31
|
||||
Card 12: 50 37 85 46 56 44 2 42 60 66 | 69 78 30 59 71 87 6 51 9 81 75 45 24 16 31 61 44 96 41 86 23 17 42 27 40
|
||||
Card 13: 24 46 50 29 89 77 49 25 53 65 | 63 66 43 86 11 9 40 70 38 79 78 27 12 20 84 42 67 73 22 8 68 35 6 4 69
|
||||
Card 14: 72 68 9 78 90 40 55 37 16 52 | 27 98 76 63 58 70 8 44 48 90 6 92 3 20 96 88 59 31 95 15 45 47 30 65 64
|
||||
Card 15: 15 28 38 87 24 61 26 13 18 94 | 63 56 51 29 17 47 21 62 19 14 69 32 60 41 11 10 54 89 7 35 71 16 96 20 27
|
||||
Card 16: 11 24 42 76 99 12 45 94 33 10 | 36 94 72 31 12 28 24 18 11 99 61 33 79 10 53 35 76 42 43 22 78 27 62 59 45
|
||||
Card 17: 72 40 35 28 16 51 2 89 83 39 | 68 79 67 15 77 35 12 34 57 16 10 75 72 39 89 60 27 29 19 17 32 45 37 38 14
|
||||
Card 18: 13 68 25 92 79 95 67 87 50 7 | 29 23 1 59 91 51 17 80 12 84 27 66 69 61 39 16 34 44 54 37 4 11 9 45 14
|
||||
Card 19: 62 14 80 15 40 69 26 65 83 32 | 72 18 66 83 59 48 65 50 37 93 80 14 67 60 40 68 32 69 27 85 30 31 62 15 26
|
||||
Card 20: 4 20 48 56 11 13 8 83 98 96 | 87 25 5 99 19 3 51 79 36 35 39 43 45 63 80 40 20 75 24 64 54 98 95 68 72
|
||||
Card 21: 13 67 19 78 79 47 49 69 8 9 | 44 9 47 62 50 78 19 76 8 57 77 13 39 11 43 67 49 18 79 94 69 55 58 7 70
|
||||
Card 22: 21 39 6 99 81 57 22 53 95 90 | 80 46 74 15 69 72 14 16 87 10 99 20 45 81 6 27 51 21 40 89 90 95 65 57 50
|
||||
Card 23: 27 36 95 10 68 52 30 43 51 70 | 62 52 51 95 68 25 11 30 65 10 55 49 27 81 34 37 63 43 9 56 96 70 1 36 58
|
||||
Card 24: 31 57 94 2 78 82 63 27 97 70 | 97 58 46 37 70 2 98 57 11 29 36 94 51 90 56 27 13 31 39 28 60 71 96 78 26
|
||||
Card 25: 96 13 61 89 70 80 93 57 9 28 | 13 27 29 50 9 94 59 80 16 7 40 89 91 3 60 75 17 18 36 86 15 28 26 61 57
|
||||
Card 26: 53 96 15 97 36 13 31 22 19 35 | 61 55 1 92 93 65 19 41 52 3 85 24 22 78 13 70 66 54 31 95 71 96 58 97 35
|
||||
Card 27: 56 75 28 85 82 52 58 59 13 33 | 2 31 12 10 81 94 9 80 5 95 43 55 83 60 66 79 61 58 49 34 29 57 99 92 88
|
||||
Card 28: 4 21 19 94 95 47 92 52 78 73 | 72 96 85 7 26 44 56 86 49 6 63 35 1 66 4 70 13 40 71 17 62 8 69 76 32
|
||||
Card 29: 44 13 92 57 70 83 96 63 6 76 | 51 30 71 38 42 76 77 99 10 64 26 81 21 50 89 59 31 8 79 83 85 2 5 75 44
|
||||
Card 30: 59 26 61 78 20 5 11 32 87 23 | 97 41 35 31 27 80 83 51 42 2 17 48 69 6 37 62 43 29 18 73 8 95 82 79 45
|
||||
Card 31: 80 30 36 54 1 81 95 16 45 62 | 99 73 91 43 93 23 4 51 71 30 84 28 80 63 46 53 49 55 74 31 25 2 52 3 21
|
||||
Card 32: 10 9 5 18 68 47 81 1 93 65 | 55 80 77 33 50 94 56 9 58 22 86 31 51 2 88 44 98 99 26 21 3 30 20 52 93
|
||||
Card 33: 16 48 32 5 1 96 11 2 14 46 | 80 10 79 87 19 5 71 72 30 29 93 13 39 67 8 49 22 48 76 28 52 23 58 38 81
|
||||
Card 34: 70 24 23 27 67 55 95 96 80 92 | 54 5 42 37 93 49 10 7 74 80 50 34 78 40 2 28 39 52 3 83 62 21 91 71 73
|
||||
Card 35: 70 96 75 73 29 58 88 16 77 71 | 68 42 64 11 65 63 5 79 38 52 34 41 86 35 25 44 48 93 20 60 78 4 90 80 21
|
||||
Card 36: 17 59 71 39 41 83 86 51 4 23 | 88 96 35 17 91 16 34 26 27 92 75 97 46 78 39 80 32 60 70 9 81 28 50 95 18
|
||||
Card 37: 52 75 8 64 39 42 10 34 71 73 | 62 34 29 80 46 64 2 42 81 45 55 44 17 33 66 26 12 50 52 8 94 4 43 85 48
|
||||
Card 38: 61 74 68 26 97 31 86 96 41 98 | 95 56 70 49 3 86 21 8 90 39 96 26 30 16 46 31 97 89 61 68 53 41 98 54 74
|
||||
Card 39: 3 18 75 56 73 41 43 82 34 33 | 70 26 42 78 6 56 90 41 17 75 18 47 82 32 13 60 81 39 5 52 54 55 12 48 98
|
||||
Card 40: 96 25 22 84 95 72 50 40 90 69 | 48 91 77 78 16 17 55 26 1 28 14 31 23 79 51 24 82 97 62 47 13 93 12 4 20
|
||||
Card 41: 71 54 24 39 7 51 95 46 90 17 | 96 44 64 69 8 62 97 39 48 2 76 71 37 84 90 54 95 81 46 63 7 51 50 24 47
|
||||
Card 42: 48 94 44 43 57 58 55 7 17 11 | 2 12 84 40 96 57 73 17 55 94 43 87 90 95 35 21 11 42 34 26 25 10 74 60 41
|
||||
Card 43: 75 8 12 87 36 35 33 62 11 39 | 25 73 71 64 46 99 60 57 15 24 80 10 74 67 12 23 63 69 56 55 20 53 1 52 81
|
||||
Card 44: 66 71 25 56 8 65 96 38 68 41 | 41 33 18 60 66 72 37 87 59 94 56 96 5 7 17 21 14 25 93 39 74 79 46 71 11
|
||||
Card 45: 27 8 93 49 24 48 23 78 98 51 | 71 37 96 47 74 21 9 40 12 45 49 70 84 76 58 53 50 91 34 85 13 7 5 29 55
|
||||
Card 46: 84 42 44 27 98 64 19 28 93 74 | 17 15 4 47 75 52 73 90 89 57 55 36 80 81 54 71 88 53 1 56 21 32 66 91 38
|
||||
Card 47: 53 21 4 28 65 58 49 98 10 23 | 25 20 19 64 10 67 15 78 80 7 83 13 35 38 75 86 33 28 98 27 73 70 59 79 14
|
||||
Card 48: 37 12 5 10 95 45 70 11 72 97 | 16 89 35 32 24 78 71 91 14 52 9 63 53 36 17 8 82 97 69 27 26 12 81 67 43
|
||||
Card 49: 54 4 71 83 72 50 95 78 35 36 | 46 87 98 18 36 72 74 75 66 70 69 16 21 58 90 33 93 68 41 59 7 23 92 5 11
|
||||
Card 50: 70 93 33 38 27 36 61 55 74 94 | 40 20 58 70 78 12 14 31 95 29 19 65 81 17 90 16 45 51 13 97 72 63 53 41 88
|
||||
Card 51: 27 14 41 6 24 48 96 66 43 18 | 11 1 81 92 8 29 26 13 35 73 3 78 93 52 98 77 60 99 62 79 22 54 9 21 30
|
||||
Card 52: 1 28 54 70 24 22 50 37 63 87 | 22 11 71 87 50 25 24 70 37 14 95 28 40 80 3 54 63 58 82 1 34 41 13 10 75
|
||||
Card 53: 33 96 53 80 60 6 35 77 32 83 | 35 5 43 67 32 80 18 79 58 91 28 96 23 53 6 83 77 86 71 50 21 33 60 30 24
|
||||
Card 54: 45 76 84 5 12 3 44 2 81 59 | 6 76 63 81 16 2 12 3 87 44 21 24 45 19 59 84 5 17 68 80 66 36 15 99 31
|
||||
Card 55: 5 67 46 50 68 64 14 94 11 4 | 45 34 62 53 97 65 37 27 68 36 22 44 20 60 75 77 89 55 33 9 13 28 63 31 47
|
||||
Card 56: 51 96 40 33 39 81 74 60 62 65 | 70 90 69 76 32 62 40 65 56 80 28 33 74 81 82 94 60 12 49 7 39 96 8 63 51
|
||||
Card 57: 24 71 51 97 23 89 41 46 6 56 | 62 52 20 4 67 24 38 5 92 50 11 63 59 17 55 83 98 21 48 87 97 32 23 53 66
|
||||
Card 58: 63 72 78 10 64 46 65 54 95 9 | 8 77 4 58 32 82 42 49 97 47 40 2 87 24 9 94 63 61 17 27 56 55 12 75 39
|
||||
Card 59: 62 67 17 58 45 46 91 94 81 93 | 46 40 52 26 74 81 17 41 82 61 12 50 35 97 62 94 28 58 38 45 92 63 67 93 91
|
||||
Card 60: 81 21 13 88 69 2 49 17 59 51 | 64 4 59 28 95 21 2 17 49 88 48 13 82 51 18 65 54 81 42 10 22 69 32 85 60
|
||||
Card 61: 50 51 58 20 22 31 61 89 84 7 | 1 68 27 88 52 39 13 23 2 3 42 5 55 29 77 38 44 95 63 34 46 75 4 60 16
|
||||
Card 62: 62 84 76 41 71 86 25 15 55 42 | 71 32 35 76 42 41 84 15 1 43 30 88 48 86 25 70 98 62 93 3 13 46 77 97 50
|
||||
Card 63: 34 20 1 29 7 61 31 97 81 85 | 26 8 78 2 29 61 23 59 60 7 10 86 12 64 1 87 24 56 58 30 19 53 36 81 34
|
||||
Card 64: 3 82 28 70 49 95 9 52 45 38 | 27 28 65 81 57 15 29 71 32 60 48 52 4 73 38 72 67 10 88 7 3 5 78 91 18
|
||||
Card 65: 85 74 52 87 60 24 82 72 67 93 | 72 4 87 52 86 48 39 67 18 15 99 41 78 38 60 84 36 75 79 23 2 42 54 16 69
|
||||
Card 66: 33 54 78 76 24 29 62 20 2 98 | 76 98 51 99 75 2 30 83 33 72 28 3 29 62 20 84 54 61 59 94 1 16 63 24 78
|
||||
Card 67: 59 78 56 63 44 35 10 94 13 4 | 46 63 56 1 94 86 55 80 20 28 50 67 4 53 6 59 13 58 93 10 22 19 84 12 8
|
||||
Card 68: 87 12 41 7 75 43 62 68 63 81 | 4 95 20 24 91 37 70 56 67 49 90 82 6 21 59 30 71 64 41 65 58 96 8 25 13
|
||||
Card 69: 89 39 8 86 62 97 53 84 72 74 | 11 48 25 89 72 59 7 85 15 19 65 80 54 1 21 38 29 30 40 58 56 49 3 83 52
|
||||
Card 70: 75 49 73 78 29 12 47 36 24 88 | 92 84 50 75 12 34 73 28 97 86 29 56 78 8 69 47 17 44 32 68 81 15 16 26 37
|
||||
Card 71: 44 41 24 40 59 85 74 36 4 92 | 33 48 32 49 78 34 35 29 45 93 36 37 18 98 16 17 58 69 40 61 66 94 60 59 75
|
||||
Card 72: 9 21 83 27 2 23 99 7 6 59 | 73 74 81 25 65 33 29 14 27 44 24 63 49 43 12 37 69 79 36 54 52 82 55 78 94
|
||||
Card 73: 71 70 3 47 31 76 78 72 86 98 | 95 20 70 33 45 89 85 29 52 88 42 90 6 80 25 58 79 13 48 67 41 49 24 27 39
|
||||
Card 74: 22 39 58 70 56 59 3 98 61 97 | 13 84 72 47 11 52 4 35 46 49 5 24 62 43 9 40 63 16 99 93 33 83 30 91 14
|
||||
Card 75: 29 48 85 95 64 61 35 99 15 46 | 98 97 9 76 5 14 74 87 38 75 82 54 4 63 20 53 79 40 62 96 2 85 31 36 80
|
||||
Card 76: 70 94 3 1 46 48 87 5 16 74 | 52 14 22 6 24 65 4 8 42 36 66 43 9 45 93 69 51 57 19 44 81 98 77 35 79
|
||||
Card 77: 77 8 29 21 11 31 93 74 72 71 | 67 8 43 72 62 40 11 77 71 29 61 92 74 12 52 37 78 93 56 31 14 21 63 39 35
|
||||
Card 78: 66 48 5 4 63 54 91 74 76 77 | 48 54 36 95 11 61 76 52 46 65 18 67 66 63 62 19 5 74 77 64 4 42 9 91 55
|
||||
Card 79: 57 19 65 23 69 74 28 97 89 41 | 89 15 41 99 58 53 8 17 23 81 28 94 43 57 1 46 71 38 87 6 49 59 80 85 75
|
||||
Card 80: 64 39 19 41 14 6 91 8 61 46 | 66 94 39 82 43 92 33 8 30 1 40 55 18 95 6 86 7 80 91 65 97 9 12 61 2
|
||||
Card 81: 26 28 44 29 78 30 14 68 22 40 | 38 8 25 72 51 31 16 71 45 37 87 23 85 64 7 6 34 44 90 9 13 15 82 49 32
|
||||
Card 82: 47 26 6 33 32 1 37 42 96 29 | 68 20 10 56 6 27 13 22 83 15 41 37 24 79 52 93 80 94 45 92 50 46 2 78 42
|
||||
Card 83: 33 32 63 1 19 69 29 3 64 10 | 69 43 8 32 9 67 40 23 64 20 96 27 1 42 11 19 3 10 63 33 22 29 55 6 49
|
||||
Card 84: 25 47 44 53 22 60 77 89 37 67 | 99 48 44 53 60 6 9 8 22 70 37 96 50 47 25 89 11 49 67 90 29 32 77 40 66
|
||||
Card 85: 30 60 57 86 93 88 18 27 48 82 | 94 10 57 86 59 88 48 52 78 29 20 41 82 77 90 87 64 6 60 81 44 51 2 68 45
|
||||
Card 86: 8 29 97 92 91 69 48 82 51 67 | 40 81 10 97 57 94 7 65 84 17 96 38 5 76 98 55 39 34 88 27 12 18 3 26 9
|
||||
Card 87: 29 21 65 98 26 23 40 94 90 51 | 42 53 95 94 62 75 86 55 29 49 92 21 87 37 56 40 13 68 65 23 26 98 38 31 69
|
||||
Card 88: 30 79 14 43 73 41 36 83 19 17 | 3 73 70 55 99 34 90 38 26 5 85 22 81 97 66 16 24 88 2 33 21 63 96 58 41
|
||||
Card 89: 81 41 29 97 76 57 30 79 25 52 | 76 37 89 90 38 17 87 46 7 93 99 54 41 62 79 43 82 95 70 61 29 58 48 12 60
|
||||
Card 90: 26 94 39 29 48 22 16 98 66 64 | 52 66 61 50 45 64 80 27 5 14 68 13 58 37 7 26 39 82 16 72 33 8 48 99 88
|
||||
Card 91: 87 17 19 24 64 7 45 28 36 23 | 54 16 64 83 48 49 61 31 95 66 92 15 85 41 3 82 63 67 55 57 9 68 18 32 43
|
||||
Card 92: 48 41 8 81 26 60 65 73 1 88 | 39 65 51 63 69 88 25 41 3 13 66 98 18 31 73 71 86 12 10 96 6 93 20 9 82
|
||||
Card 93: 79 2 21 93 97 59 62 43 83 73 | 26 9 28 84 47 46 44 2 83 5 13 95 7 4 36 35 11 10 72 82 90 65 73 98 87
|
||||
Card 94: 74 86 50 28 11 2 94 47 54 77 | 1 69 35 40 22 19 16 61 66 68 28 56 29 85 10 51 83 7 50 59 92 71 9 86 67
|
||||
Card 95: 96 12 56 26 91 15 64 61 82 40 | 52 14 50 70 93 83 54 42 84 19 43 80 82 25 73 3 44 45 81 5 87 41 8 16 78
|
||||
Card 96: 80 38 2 91 44 92 19 43 10 64 | 11 45 21 28 31 71 23 88 93 62 17 27 7 78 33 32 54 84 5 72 15 52 63 68 91
|
||||
Card 97: 32 54 71 38 5 89 28 47 75 42 | 98 34 57 25 9 80 37 71 61 62 94 6 65 13 92 84 11 2 72 90 17 67 4 1 46
|
||||
Card 98: 39 57 6 68 64 91 90 51 78 10 | 56 30 1 12 62 44 21 69 53 65 84 32 96 25 94 92 38 60 14 47 77 13 71 93 20
|
||||
Card 99: 6 89 48 77 90 57 21 72 87 73 | 39 48 45 73 87 79 14 25 57 72 66 89 31 30 77 50 74 6 34 36 21 23 90 10 49
|
||||
Card 100: 33 40 16 54 58 60 30 47 22 6 | 31 47 30 76 48 67 33 68 22 57 54 5 16 6 58 43 3 64 55 15 40 60 77 13 4
|
||||
Card 101: 19 52 71 42 34 73 35 89 62 46 | 9 73 26 49 72 14 19 46 99 32 4 88 84 10 87 17 27 89 30 98 40 7 75 78 90
|
||||
Card 102: 2 79 8 73 25 16 82 47 20 52 | 71 88 82 79 2 51 52 3 54 20 56 19 69 10 97 66 45 28 36 39 47 61 40 13 42
|
||||
Card 103: 77 28 11 32 36 23 39 88 76 51 | 26 36 99 55 25 19 31 42 18 66 39 11 59 46 4 74 23 71 77 16 84 58 28 32 53
|
||||
Card 104: 22 90 17 19 96 62 98 55 41 49 | 90 91 74 23 98 84 77 31 81 16 41 67 49 55 56 86 22 24 73 52 99 62 93 32 34
|
||||
Card 105: 41 91 2 4 18 81 52 93 89 87 | 3 47 6 77 60 24 97 26 70 19 37 36 51 82 48 21 31 99 73 88 59 15 46 35 32
|
||||
Card 106: 48 54 60 39 80 50 13 61 43 51 | 24 66 90 38 10 74 28 29 89 16 5 25 2 54 15 34 70 7 44 47 14 48 69 78 13
|
||||
Card 107: 10 20 81 62 85 75 4 49 58 1 | 32 89 48 79 90 96 15 59 36 14 49 55 38 34 30 11 62 28 53 72 17 77 41 80 66
|
||||
Card 108: 79 94 49 89 78 71 20 7 48 56 | 11 53 35 90 22 29 4 71 48 94 70 8 72 78 27 45 7 21 49 16 55 56 73 42 81
|
||||
Card 109: 32 73 98 31 4 46 57 11 40 88 | 36 40 89 47 18 87 98 48 45 84 21 1 80 33 67 32 64 28 61 3 51 10 86 97 62
|
||||
Card 110: 45 51 97 87 23 48 19 50 63 55 | 19 20 15 22 27 24 38 93 55 54 98 23 28 97 82 59 73 11 8 1 18 64 50 63 48
|
||||
Card 111: 38 1 49 22 26 96 3 88 24 70 | 79 58 20 74 70 80 55 68 35 77 88 3 24 40 87 53 50 47 38 54 82 26 49 7 2
|
||||
Card 112: 79 90 9 20 94 36 88 31 48 42 | 25 68 69 52 24 98 76 63 97 41 67 94 61 90 32 87 18 13 75 38 84 60 64 86 89
|
||||
Card 113: 7 32 6 52 76 72 39 24 46 79 | 67 19 31 94 50 26 66 11 45 80 86 68 88 22 65 3 99 12 90 79 38 14 4 73 54
|
||||
Card 114: 80 54 9 2 58 26 44 63 15 21 | 5 60 76 47 87 33 89 23 4 55 17 42 62 46 97 48 90 91 95 82 34 64 30 19 31
|
||||
Card 115: 51 34 88 42 20 98 75 79 39 48 | 76 94 13 58 12 66 50 72 2 89 68 21 96 25 10 45 30 7 99 15 46 59 90 9 53
|
||||
Card 116: 43 32 82 89 9 63 78 57 55 77 | 19 47 23 27 70 22 18 52 28 93 36 76 80 65 21 8 67 20 84 9 12 90 92 97 5
|
||||
Card 117: 71 50 45 29 32 75 10 96 82 43 | 96 46 83 47 10 11 16 39 36 3 89 9 67 5 72 53 2 27 19 7 8 24 61 37 4
|
||||
Card 118: 37 44 20 31 43 47 13 46 51 39 | 8 70 7 66 48 50 18 82 84 96 73 12 6 97 62 75 17 49 26 22 4 24 54 94 61
|
||||
Card 119: 36 75 46 25 47 69 95 8 94 81 | 48 91 62 11 99 10 9 7 26 15 1 79 54 45 49 27 53 78 64 65 33 31 59 17 5
|
||||
Card 120: 37 96 65 31 64 95 9 55 92 29 | 71 62 77 18 86 52 33 19 8 93 30 74 17 84 59 11 69 4 41 67 76 10 66 43 38
|
||||
Card 121: 39 99 21 22 11 13 61 72 49 29 | 98 79 29 42 27 73 12 40 96 13 88 45 14 18 4 36 99 80 11 22 49 23 67 21 72
|
||||
Card 122: 74 88 60 36 94 18 99 55 70 16 | 91 77 18 6 93 84 97 68 45 13 63 94 14 21 31 10 65 16 61 54 70 51 30 46 36
|
||||
Card 123: 67 91 97 35 11 3 8 69 81 15 | 14 45 66 15 8 29 69 24 68 67 10 59 35 18 17 53 11 3 91 12 43 72 97 81 89
|
||||
Card 124: 64 61 94 18 21 17 42 80 86 43 | 25 83 69 59 57 51 87 38 91 54 56 46 4 75 99 90 73 37 20 86 49 98 21 58 81
|
||||
Card 125: 51 79 20 71 43 42 46 36 77 7 | 55 46 22 24 76 86 34 95 73 36 98 63 49 43 54 28 58 10 26 62 79 97 39 60 32
|
||||
Card 126: 44 51 42 27 1 84 56 38 18 91 | 27 67 1 51 42 44 19 18 73 84 16 12 56 24 91 21 97 47 99 88 90 25 6 38 65
|
||||
Card 127: 85 92 63 8 17 51 43 61 52 78 | 37 81 65 43 88 97 17 79 46 51 39 23 44 78 95 2 28 49 32 85 63 84 61 8 92
|
||||
Card 128: 36 40 7 30 79 76 4 37 97 27 | 97 29 30 58 84 71 4 98 78 27 6 76 43 22 37 40 36 32 7 23 70 92 53 79 48
|
||||
Card 129: 98 81 33 49 20 93 32 82 39 48 | 39 65 7 78 52 87 79 53 33 60 63 81 71 93 55 92 12 30 82 32 38 27 90 95 84
|
||||
Card 130: 29 59 99 28 65 42 80 87 19 85 | 87 65 59 82 28 29 64 99 79 33 9 31 19 75 53 1 20 42 97 39 72 80 8 85 63
|
||||
Card 131: 88 58 37 3 66 87 67 60 84 5 | 84 86 40 82 37 16 34 55 54 70 80 65 22 77 31 48 78 11 68 18 12 52 69 17 32
|
||||
Card 132: 50 23 57 31 27 1 25 2 38 21 | 52 61 75 38 15 71 90 50 76 66 22 39 99 68 13 37 78 18 87 43 63 40 53 84 2
|
||||
Card 133: 3 59 60 91 93 68 65 45 86 20 | 13 32 74 8 90 68 58 94 67 38 93 97 75 2 71 20 31 37 59 30 39 44 28 34 64
|
||||
Card 134: 42 6 64 28 96 55 43 58 24 40 | 36 99 10 79 2 9 42 61 84 58 35 7 77 38 85 21 64 32 78 6 96 74 89 40 55
|
||||
Card 135: 38 15 49 59 73 40 13 60 41 25 | 46 80 2 60 42 59 51 57 56 27 40 62 76 37 84 16 89 18 25 73 5 22 45 70 81
|
||||
Card 136: 18 17 68 43 77 76 91 13 4 79 | 11 67 10 73 23 71 8 46 87 79 5 51 58 47 62 66 24 29 55 82 93 20 80 32 42
|
||||
Card 137: 60 51 99 79 67 59 66 40 25 87 | 44 53 76 5 77 75 65 90 9 41 55 22 60 23 71 30 1 86 88 15 54 66 59 13 68
|
||||
Card 138: 78 65 89 48 62 88 3 12 87 99 | 11 19 39 38 69 81 12 75 17 52 26 56 29 77 91 23 93 53 50 66 15 16 85 80 71
|
||||
Card 139: 34 12 48 47 25 98 32 37 21 54 | 13 62 79 43 90 72 47 11 20 82 38 29 69 10 66 35 1 84 7 52 27 42 46 91 58
|
||||
Card 140: 61 27 68 51 7 58 43 89 26 59 | 2 17 44 87 36 15 6 35 57 29 62 13 56 81 40 19 53 9 85 5 10 46 64 86 88
|
||||
Card 141: 40 28 9 81 37 43 18 77 83 23 | 13 59 2 31 52 30 47 6 42 89 70 69 86 92 19 93 58 49 36 8 29 99 60 63 67
|
||||
Card 142: 25 6 69 2 14 44 13 93 89 95 | 13 33 76 2 14 68 95 25 18 23 44 43 89 6 93 11 4 24 9 45 38 69 36 15 17
|
||||
Card 143: 3 87 14 59 7 5 69 35 20 17 | 5 16 21 69 38 50 64 97 72 30 53 77 73 13 33 55 79 70 4 10 95 59 3 41 42
|
||||
Card 144: 94 63 13 51 62 72 33 9 64 22 | 11 90 13 28 47 56 10 4 93 30 7 70 33 69 62 36 72 96 24 22 71 63 52 86 73
|
||||
Card 145: 76 1 41 88 97 18 10 11 52 20 | 18 11 41 1 71 52 12 94 74 44 58 70 69 73 79 97 20 45 59 76 78 88 4 10 64
|
||||
Card 146: 93 1 18 44 21 66 28 60 98 9 | 13 42 18 46 28 23 96 16 12 55 70 53 98 56 64 50 15 61 25 72 24 35 8 43 97
|
||||
Card 147: 67 27 79 43 7 74 11 15 64 75 | 17 57 90 7 41 36 93 29 62 14 77 5 38 33 68 70 32 13 23 6 25 30 55 45 9
|
||||
Card 148: 59 62 37 5 52 53 43 29 98 2 | 33 62 93 52 29 68 43 23 11 35 87 14 76 53 59 77 4 89 48 13 2 15 49 72 99
|
||||
Card 149: 38 74 24 93 50 21 19 65 95 5 | 93 82 57 95 67 11 9 55 5 74 46 2 96 19 21 92 56 14 38 33 77 58 32 43 37
|
||||
Card 150: 8 99 26 38 47 48 96 20 82 92 | 80 46 13 97 66 22 40 36 85 73 63 32 1 70 49 60 90 88 43 2 48 5 76 34 50
|
||||
Card 151: 41 69 32 12 5 72 3 29 2 79 | 28 41 11 64 69 71 3 87 45 40 5 15 50 95 90 53 19 55 26 98 82 12 6 77 14
|
||||
Card 152: 96 20 94 19 7 68 24 56 88 97 | 54 70 63 84 26 73 35 24 39 99 6 79 44 20 64 12 38 87 1 43 46 42 11 60 8
|
||||
Card 153: 60 9 99 62 93 22 16 11 34 28 | 57 43 38 98 82 89 20 58 71 40 79 53 86 1 69 4 27 19 36 85 83 33 59 90 96
|
||||
Card 154: 45 75 27 11 76 24 1 4 21 99 | 96 51 54 55 78 69 24 31 77 18 92 17 89 86 3 11 19 15 88 64 49 47 68 36 14
|
||||
Card 155: 97 56 99 89 82 6 17 15 52 29 | 23 26 85 70 13 47 72 1 51 64 90 44 53 45 42 77 88 32 74 25 58 68 37 21 79
|
||||
Card 156: 28 78 54 72 36 25 84 47 87 30 | 75 49 44 5 83 48 16 17 82 33 60 15 12 94 41 66 23 51 43 39 6 55 34 77 32
|
||||
Card 157: 44 74 36 93 15 96 25 12 19 40 | 84 44 54 96 80 48 59 79 78 55 42 27 11 69 76 19 93 2 35 83 77 43 40 85 99
|
||||
Card 158: 74 73 99 41 17 45 92 80 21 85 | 85 51 97 91 69 81 74 73 88 80 28 14 6 95 99 92 50 29 17 5 77 89 76 21 41
|
||||
Card 159: 7 2 83 33 51 95 96 18 75 52 | 52 96 21 27 47 98 51 83 29 77 75 53 2 64 7 33 57 82 50 14 95 34 79 44 18
|
||||
Card 160: 46 54 7 84 37 42 60 9 47 10 | 84 34 9 85 24 29 80 8 88 10 1 46 43 59 47 76 81 26 68 60 30 42 7 56 37
|
||||
Card 161: 18 88 61 65 90 29 1 20 22 25 | 25 84 28 2 45 61 39 71 35 32 16 18 65 1 29 23 49 5 22 83 78 24 20 88 90
|
||||
Card 162: 78 93 50 17 75 29 69 31 65 85 | 31 18 45 12 28 85 65 69 81 15 32 64 22 40 33 23 50 17 29 97 7 37 63 93 78
|
||||
Card 163: 66 47 30 99 34 45 60 82 72 43 | 73 98 29 36 35 54 49 61 17 1 52 95 81 56 31 27 15 96 24 20 32 33 65 55 82
|
||||
Card 164: 45 23 93 75 49 1 3 12 36 67 | 77 79 15 82 12 93 49 23 45 31 8 62 66 75 32 48 6 30 78 67 64 3 36 1 94
|
||||
Card 165: 75 62 57 30 69 52 35 84 17 32 | 9 17 46 33 69 29 35 34 84 55 57 83 56 70 10 7 30 75 27 99 52 62 32 47 77
|
||||
Card 166: 2 79 15 96 51 77 38 98 36 74 | 1 54 12 73 39 75 87 24 49 74 43 53 56 16 34 99 26 30 50 40 86 94 35 66 65
|
||||
Card 167: 41 77 3 17 78 56 92 33 87 52 | 98 37 44 68 43 53 76 13 74 59 49 71 66 90 54 82 46 5 95 16 15 62 96 58 25
|
||||
Card 168: 23 61 30 69 41 58 21 49 97 16 | 26 74 24 40 58 30 20 38 34 87 72 46 15 77 50 2 57 1 75 81 84 70 23 69 11
|
||||
Card 169: 9 17 32 25 1 65 22 46 8 99 | 84 19 66 27 28 15 34 90 42 2 43 87 78 6 81 46 24 13 63 3 48 20 86 70 73
|
||||
Card 170: 32 86 96 77 56 40 66 46 89 2 | 87 1 50 91 59 96 29 70 92 93 33 10 20 45 12 60 63 21 14 54 36 80 56 19 75
|
||||
Card 171: 70 36 51 80 5 24 40 87 72 30 | 30 52 71 81 84 97 22 95 72 53 46 55 44 51 24 19 98 63 73 56 6 80 90 59 77
|
||||
Card 172: 97 74 79 52 85 56 40 2 30 54 | 66 40 49 94 16 47 57 85 24 45 53 63 51 74 69 38 46 90 50 91 75 97 28 31 62
|
||||
Card 173: 72 49 45 75 23 20 90 50 48 94 | 38 34 28 33 91 65 87 19 37 30 9 18 64 14 53 70 49 39 90 79 88 51 12 57 48
|
||||
Card 174: 48 39 78 41 80 49 43 87 61 22 | 68 39 65 84 67 79 10 29 78 81 36 73 62 6 44 72 27 1 19 66 93 4 16 46 50
|
||||
Card 175: 96 91 10 82 43 98 30 65 3 83 | 49 77 40 78 70 23 52 34 16 2 64 72 69 61 15 33 79 32 39 74 7 92 24 46 36
|
||||
Card 176: 29 21 33 68 60 35 11 99 82 61 | 81 13 97 71 32 40 23 36 59 53 66 54 62 47 89 93 44 33 87 55 26 18 31 64 67
|
||||
Card 177: 97 45 62 55 76 34 66 54 14 68 | 94 42 28 30 32 58 33 48 46 80 7 15 92 98 95 81 90 17 71 24 26 16 39 13 93
|
||||
Card 178: 99 45 47 89 4 17 36 14 86 96 | 40 33 56 89 17 93 94 45 75 4 5 99 37 36 47 98 70 44 86 65 14 73 96 8 22
|
||||
Card 179: 30 63 6 25 4 85 41 17 83 11 | 44 92 25 71 95 61 50 11 27 4 6 30 9 85 63 67 87 13 17 83 18 53 41 10 52
|
||||
Card 180: 70 89 32 66 15 30 76 8 42 36 | 36 16 89 13 45 42 31 77 76 30 71 27 8 95 98 32 35 14 66 70 26 85 72 33 15
|
||||
Card 181: 74 81 12 28 22 21 14 54 3 5 | 32 59 69 67 15 35 42 12 34 11 5 71 79 2 73 14 55 87 56 65 28 17 30 99 9
|
||||
Card 182: 79 41 90 19 21 15 66 2 55 59 | 2 93 34 65 67 63 72 79 15 5 59 14 55 95 70 83 90 21 68 66 19 7 41 92 3
|
||||
Card 183: 6 8 44 39 74 78 10 2 61 59 | 6 61 75 44 62 92 77 29 8 39 78 20 73 18 68 4 60 66 74 59 49 3 2 5 10
|
||||
Card 184: 68 32 10 82 15 95 56 89 28 42 | 25 56 28 73 6 11 43 37 95 2 70 18 19 90 45 89 26 42 10 32 7 98 82 15 68
|
||||
Card 185: 66 74 17 3 71 21 51 28 14 48 | 80 34 77 37 45 74 84 20 44 14 31 66 51 48 17 86 12 43 71 56 35 13 4 93 27
|
||||
Card 186: 79 33 25 28 86 18 57 7 76 40 | 26 16 59 99 31 62 77 21 23 70 7 25 35 49 81 18 72 45 65 58 86 51 88 80 76
|
||||
Card 187: 1 2 73 43 13 64 69 21 3 46 | 65 37 53 92 82 13 12 28 3 58 71 46 64 1 56 19 98 21 73 43 60 2 57 29 69
|
||||
Card 188: 85 77 35 15 22 67 79 18 66 99 | 42 46 93 19 28 4 89 32 95 75 11 57 6 40 39 30 22 43 41 24 8 78 58 69 48
|
||||
Card 189: 13 48 6 61 55 38 75 96 76 42 | 42 32 61 81 55 13 26 41 9 77 70 68 56 35 58 89 20 75 6 72 91 38 90 93 96
|
||||
Card 190: 19 78 50 35 32 14 45 70 16 77 | 32 92 71 86 75 77 9 8 19 68 16 6 67 33 15 78 43 57 55 85 69 35 73 50 14
|
||||
Card 191: 71 62 7 72 70 4 89 95 94 59 | 36 94 40 6 71 59 45 28 90 12 89 95 16 85 83 88 4 48 72 62 76 7 13 70 11
|
||||
Card 192: 52 15 61 83 18 67 29 75 34 36 | 8 65 43 93 67 53 88 83 52 75 81 37 49 29 6 39 76 91 92 36 19 98 50 41 33
|
||||
Card 193: 78 94 7 48 25 16 91 38 13 5 | 22 77 76 84 17 40 41 36 93 56 50 35 64 59 23 95 89 49 61 30 42 85 37 92 44
|
||||
Card 194: 66 92 16 37 42 62 86 76 98 36 | 46 60 34 31 79 40 11 19 16 74 75 36 71 43 13 2 90 76 50 29 85 55 54 10 35
|
||||
Card 195: 66 23 45 62 30 95 38 5 97 39 | 96 65 37 89 95 73 69 75 25 45 51 22 62 7 33 13 94 78 34 35 36 56 55 70 24
|
||||
Card 196: 15 45 70 41 97 27 80 64 25 28 | 88 93 65 83 36 16 35 92 6 71 82 24 17 64 66 33 37 69 78 60 56 49 91 19 61
|
||||
Card 197: 46 35 2 60 75 99 6 42 47 21 | 91 93 70 8 46 6 35 50 55 72 71 64 47 82 39 94 25 67 41 60 86 83 87 90 7
|
||||
Card 198: 71 62 73 96 79 63 41 17 56 68 | 95 77 16 70 29 68 66 63 98 80 20 18 31 34 52 5 42 22 49 6 25 38 51 75 50
|
||||
Card 199: 70 84 46 98 44 45 16 36 29 99 | 78 21 92 77 32 91 22 90 76 74 42 55 51 69 94 64 26 65 41 97 10 34 15 35 9
|
||||
Card 200: 96 60 87 21 80 48 44 69 3 49 | 2 65 66 94 55 62 72 52 86 15 30 71 45 82 49 47 81 33 14 42 4 1 51 75 34
|
||||
Card 201: 55 53 33 19 1 70 17 61 2 72 | 62 6 30 86 45 71 46 33 15 90 73 37 18 12 68 87 89 49 8 60 52 22 51 25 74
|
||||
Card 202: 5 47 96 53 54 14 77 29 12 3 | 26 71 91 86 59 70 78 8 83 92 35 64 9 79 84 34 36 93 90 40 16 44 51 6 4
|
||||
@@ -0,0 +1,100 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"log/slog"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
type card struct {
|
||||
card int
|
||||
winner []int
|
||||
scratch []int
|
||||
copies int
|
||||
}
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
points int
|
||||
cards int
|
||||
}
|
||||
|
||||
func run(scan *bufio.Scanner) (result, error) {
|
||||
cards := []*card{}
|
||||
|
||||
for scan.Scan() {
|
||||
pfx, text, ok := strings.Cut(scan.Text(), ":")
|
||||
|
||||
if !ok || !strings.HasPrefix(pfx, "Card ") {
|
||||
continue
|
||||
}
|
||||
|
||||
num := aoc.Atoi(strings.TrimSpace(strings.SplitN(pfx, " ", 2)[1]))
|
||||
cards = append(cards, &card{card: num})
|
||||
buf := make([]rune, 0, 4)
|
||||
winner := true
|
||||
|
||||
for _, a := range text {
|
||||
if a >= '0' && a <= '9' {
|
||||
buf = append(buf, a)
|
||||
continue
|
||||
}
|
||||
if a == ' ' && len(buf) > 0 {
|
||||
num, _ = strconv.Atoi(string(buf))
|
||||
buf = buf[:0]
|
||||
if winner {
|
||||
cards[len(cards)-1].winner = append(cards[len(cards)-1].winner, num)
|
||||
} else {
|
||||
cards[len(cards)-1].scratch = append(cards[len(cards)-1].scratch, num)
|
||||
}
|
||||
}
|
||||
if a == '|' {
|
||||
winner = false
|
||||
}
|
||||
}
|
||||
|
||||
if len(buf) > 0 {
|
||||
num = aoc.Atoi(string(buf))
|
||||
buf = buf[:0]
|
||||
_ = buf // ignore
|
||||
cards[len(cards)-1].scratch = append(cards[len(cards)-1].scratch, num)
|
||||
}
|
||||
}
|
||||
|
||||
var sumPoints int
|
||||
var sumCards int
|
||||
|
||||
for _, card := range cards {
|
||||
m := []int{}
|
||||
|
||||
for _, w := range card.winner {
|
||||
for _, s := range card.scratch {
|
||||
if w == s {
|
||||
m = append(m, w)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(m) > 0 {
|
||||
sumPoints += 1 << (len(m) - 1)
|
||||
for i, c := range cards[card.card:min(card.card+len(m), len(cards))] {
|
||||
c.copies += 1 + 1*card.copies
|
||||
slog.Debug("cards", "card", card.card, "wins", i+1, "with", card.copies, "copies, wins", len(m), "giving", 1+1*card.copies, "for card", c.card, "total", c.copies)
|
||||
}
|
||||
}
|
||||
|
||||
sumCards += 1 + 1*card.copies
|
||||
slog.Debug("cards", "card", card.card, "wins", len(m), "as", 1, "+", 1*card.copies, "for", 1+1*card.copies, "copies. total", sumCards)
|
||||
slog.Debug("points", "card", card.card, "match", m, "score", sumPoints)
|
||||
}
|
||||
|
||||
return result{sumPoints, sumCards}, nil
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
r, err := run(scan)
|
||||
is.NoErr(err)
|
||||
is.Equal(r.points, 13)
|
||||
is.Equal(r.cards, 30)
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
r, err := run(scan)
|
||||
is.NoErr(err)
|
||||
is.Equal(r.points, 23235)
|
||||
is.Equal(r.cards, 5920640)
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
seeds: 79 14 55 13
|
||||
|
||||
seed-to-soil map:
|
||||
50 98 2
|
||||
52 50 48
|
||||
|
||||
soil-to-fertilizer map:
|
||||
0 15 37
|
||||
37 52 2
|
||||
39 0 15
|
||||
|
||||
fertilizer-to-water map:
|
||||
49 53 8
|
||||
0 11 42
|
||||
42 0 7
|
||||
57 7 4
|
||||
|
||||
water-to-light map:
|
||||
88 18 7
|
||||
18 25 70
|
||||
|
||||
light-to-temperature map:
|
||||
45 77 23
|
||||
81 45 19
|
||||
68 64 13
|
||||
|
||||
temperature-to-humidity map:
|
||||
0 69 1
|
||||
1 0 69
|
||||
|
||||
humidity-to-location map:
|
||||
60 56 37
|
||||
56 93 4
|
||||
@@ -0,0 +1,250 @@
|
||||
seeds: 1263068588 44436703 1116624626 2393304 2098781025 128251971 2946842531 102775703 2361566863 262106125 221434439 24088025 1368516778 69719147 3326254382 101094138 1576631370 357411492 3713929839 154258863
|
||||
|
||||
seed-to-soil map:
|
||||
2056129205 3495540274 7275274
|
||||
2093671499 2217398614 16037515
|
||||
144190400 1167267743 4402289
|
||||
685148999 560842720 46363553
|
||||
148592689 1382926008 71816170
|
||||
241575914 1243634776 139291232
|
||||
1686196783 543577846 17264874
|
||||
2601917866 2486088541 222990187
|
||||
1703461657 1454742178 45658441
|
||||
4200618033 2052611543 79792525
|
||||
2063404479 2445531749 30267020
|
||||
3026695548 4113017544 181949752
|
||||
73663477 607206273 70526923
|
||||
3412143232 2195535041 20126067
|
||||
1381626519 809568775 38912495
|
||||
4280410558 3277485604 9635485
|
||||
1285511345 435930218 30230711
|
||||
2009679577 4060471919 23976534
|
||||
491535670 129136847 193613329
|
||||
3016405776 2475798769 10289772
|
||||
2035393617 2709078728 12153762
|
||||
1760083914 1171670032 71964744
|
||||
3988522413 2233436129 212095620
|
||||
2824908053 4084448453 28569091
|
||||
799335774 434222608 1707610
|
||||
2109709014 3568263067 492208852
|
||||
2047547379 3502815548 8581826
|
||||
1275917650 466160929 9593695
|
||||
731512552 475754624 67823222
|
||||
380867146 698900251 110668524
|
||||
1315742056 1500400619 65884463
|
||||
801043384 848481270 151647344
|
||||
3208645300 3292042342 203497932
|
||||
952690728 0 129136847
|
||||
1081827575 1000128614 167139129
|
||||
0 1731434235 73663477
|
||||
1749120098 423258792 10963816
|
||||
2853477144 3511397374 56865693
|
||||
1585688167 322750176 100508616
|
||||
3432269299 2721232490 556253114
|
||||
1420539014 1566285082 165149153
|
||||
2973473810 2009679577 42931966
|
||||
220408859 677733196 21167055
|
||||
4290046043 3287121089 4921253
|
||||
2033656111 2215661108 1737506
|
||||
1248966704 1805097712 26950946
|
||||
2910342837 2132404068 63130973
|
||||
|
||||
soil-to-fertilizer map:
|
||||
3192416630 3819045895 47516706
|
||||
39972266 597632895 4546595
|
||||
2584201752 2580457211 100644566
|
||||
2272135078 174545609 40291463
|
||||
2819419661 2681101777 89335599
|
||||
3239933336 3528823147 72816699
|
||||
44518861 2232362178 145175982
|
||||
2519969464 2377538160 64232288
|
||||
1852478702 2770437376 313570784
|
||||
2166049486 2441770448 106085592
|
||||
4133995881 3866562601 160971415
|
||||
1626150228 975660836 106177604
|
||||
2908755260 422379995 175252900
|
||||
3312750035 4178991584 115975712
|
||||
1142288544 1324281099 483861684
|
||||
833150172 1928293653 304068525
|
||||
1732327832 1808142783 120150870
|
||||
2684846318 39972266 134573343
|
||||
3133663001 4027534016 58753629
|
||||
189694843 602179490 373481346
|
||||
3758375673 4086287645 92703939
|
||||
3428725747 3199173221 329649926
|
||||
1137218697 2547856040 5069847
|
||||
4068485661 3133663001 65510220
|
||||
590707513 1081838440 242442659
|
||||
2312426541 214837072 207542923
|
||||
563176189 2552925887 27531324
|
||||
3851079612 3601639846 217406049
|
||||
|
||||
fertilizer-to-water map:
|
||||
153835826 1814144363 127150990
|
||||
1926426485 1614900585 14868868
|
||||
2139872846 3136260217 42408895
|
||||
3310771078 2202805875 59788141
|
||||
83898078 1578023222 36877363
|
||||
652411041 1574694502 3328720
|
||||
2080480520 3785135933 59392326
|
||||
3370559219 3272622808 82257970
|
||||
3132498144 2037809941 164995934
|
||||
2678755579 3455437189 65205729
|
||||
3674754588 3844528259 234175097
|
||||
2182281741 3520642918 59000325
|
||||
570340096 1492623557 82070945
|
||||
2779822218 2446205321 138940597
|
||||
2037809941 2703025450 42670579
|
||||
3515202222 2342244856 103960465
|
||||
3998026660 4136896949 144793347
|
||||
955105072 0 84792564
|
||||
3452817189 3073875184 62385033
|
||||
77176799 1459627033 6721279
|
||||
4142820007 4078703356 58193593
|
||||
280986816 1091602584 230166265
|
||||
1701766245 1321768849 78671169
|
||||
2987155826 2872940965 145342318
|
||||
2418013523 3615504153 169631780
|
||||
2587645303 2262594016 79650840
|
||||
2667296143 3354880778 11459436
|
||||
2743961308 3579643243 35860910
|
||||
1880850385 1046026484 45576100
|
||||
3297494078 4281690296 13277000
|
||||
2918762815 2804547954 68393011
|
||||
1854575140 1466348312 26275245
|
||||
3908929685 3366340214 89096975
|
||||
511153081 1400440018 59187015
|
||||
655739761 864167436 181859048
|
||||
120775441 1629769453 33060385
|
||||
2241282066 2745696029 58851925
|
||||
2300133991 2585145918 117879532
|
||||
4201013600 3178669112 93953696
|
||||
837598809 84792564 117506263
|
||||
1039897636 202298827 661868609
|
||||
3619162687 3018283283 55591901
|
||||
0 1736967564 77176799
|
||||
1780437414 1662829838 74137726
|
||||
|
||||
water-to-light map:
|
||||
279076302 606101520 367597147
|
||||
3291538704 3736283841 125013874
|
||||
0 1709355698 279076302
|
||||
2106348780 1988432000 822929157
|
||||
2929277937 0 362260767
|
||||
890514202 2811361157 924922684
|
||||
3416552578 973698667 444745137
|
||||
1815436886 1418443804 290911894
|
||||
646673449 362260767 243840753
|
||||
|
||||
light-to-temperature map:
|
||||
208346365 819874354 29069132
|
||||
731840321 689055790 58614896
|
||||
4186248520 4104876526 108718776
|
||||
3429769554 3384048873 23936103
|
||||
1459123931 2691296758 217855736
|
||||
790455217 952719646 105546549
|
||||
1416544830 2047230764 42579101
|
||||
0 1202755810 208346365
|
||||
1399364673 1598820754 17180157
|
||||
2576491919 747670686 452381
|
||||
901868462 2408707242 282589516
|
||||
3626168682 4259315983 35651313
|
||||
341191657 748123067 71751287
|
||||
2721433915 1411102175 187718579
|
||||
3822370242 3740998248 198425166
|
||||
3245552556 4213595302 45720681
|
||||
1676979667 100628240 254569707
|
||||
896001766 2041364068 5866696
|
||||
3291273237 3245552556 138496317
|
||||
3661819995 3580448001 160550247
|
||||
2063025564 380090092 308965698
|
||||
4020795408 3939423414 165453112
|
||||
237415497 848943486 103776160
|
||||
1931549374 1909887878 131476190
|
||||
2576944300 1058266195 144489615
|
||||
717031505 2089809865 14808816
|
||||
412942944 2104618681 304088561
|
||||
1209350123 0 100628240
|
||||
1309978363 1820501568 89386310
|
||||
3453705657 3407984976 172463025
|
||||
2371991262 1616000911 204500657
|
||||
1184457978 355197947 24892145
|
||||
|
||||
temperature-to-humidity map:
|
||||
4116612848 1770461885 178354448
|
||||
475467700 3077125572 130863723
|
||||
1272723717 1181397963 5578998
|
||||
3758341401 495891106 279864899
|
||||
1687813623 1591451985 2235236
|
||||
2530388822 2518678506 215908033
|
||||
2282034531 2032693852 208761140
|
||||
1471990450 379604394 116286712
|
||||
1817301926 3588566075 238614487
|
||||
3086830522 2960704657 28309403
|
||||
3692580145 2002277669 19886809
|
||||
616860797 3221548716 360840790
|
||||
3115139925 1226570112 16611162
|
||||
336172750 170230298 133118381
|
||||
977701587 1693223682 77238203
|
||||
1366414227 775756005 105576223
|
||||
2055916413 2734586539 226118118
|
||||
4038206300 2287329439 78406548
|
||||
3712466954 2241454992 45874447
|
||||
3556277513 2516499157 2179349
|
||||
1278302715 2989014060 88111512
|
||||
1588277162 1593687221 99536461
|
||||
2746296855 3827180562 340533667
|
||||
469291131 3582389506 6176569
|
||||
1054939790 1960273136 42004533
|
||||
1247816059 3207989295 13559421
|
||||
2490795671 1186976961 39593151
|
||||
1261375480 1948816333 11348237
|
||||
36107015 881332228 300065735
|
||||
1096944323 2365735987 150763170
|
||||
3131751087 303348679 76255715
|
||||
3558456862 36107015 134123283
|
||||
3208006802 1243181274 348270711
|
||||
606331423 2022164478 10529374
|
||||
1690048859 4167714229 127253067
|
||||
1247707493 1960164570 108566
|
||||
|
||||
humidity-to-location map:
|
||||
3760908805 3662107228 155796250
|
||||
1580497895 3884288658 144897726
|
||||
3166374808 442179790 213926492
|
||||
121876139 656106282 138383174
|
||||
393463083 2300882189 128101885
|
||||
2948945727 3512929162 110263469
|
||||
521564968 2652674020 210495874
|
||||
1940349169 3864399213 19889445
|
||||
1197505529 794489456 93759960
|
||||
904168980 2539693608 75416982
|
||||
1725395621 3623192631 38914597
|
||||
2881030575 888249416 49678445
|
||||
2116891732 1943237764 146499392
|
||||
979585962 2615110590 37563430
|
||||
3143485439 3262014106 22889369
|
||||
791255257 4029186384 109003936
|
||||
4209132419 4140663408 85834877
|
||||
1764310218 192277746 165625801
|
||||
2023373170 2466550792 73142816
|
||||
4140663408 4226498285 68469011
|
||||
2269931546 1003317103 611099029
|
||||
1291265489 0 119152028
|
||||
2930709020 3243777399 18236707
|
||||
732060842 1884043349 59194415
|
||||
1410417517 1614416132 170080378
|
||||
1960238614 937927861 63134556
|
||||
1929936019 2089737156 10413150
|
||||
3380301300 2863169894 380607505
|
||||
3916705055 3291443897 221485265
|
||||
355896365 2428984074 37566718
|
||||
2254686 3817903478 46495735
|
||||
2096515986 2280506443 20375746
|
||||
1017149392 2100150306 180356137
|
||||
0 1001062417 2254686
|
||||
260259313 1784496510 95637052
|
||||
48750421 119152028 73125718
|
||||
3059209196 357903547 84276243
|
||||
2263391124 3284903475 6540422
|
||||
900259193 1880133562 3909787
|
||||
@@ -0,0 +1,234 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
minLocation int
|
||||
minRange int
|
||||
}
|
||||
|
||||
func run(scan *bufio.Scanner) (result, error) {
|
||||
log("begin...")
|
||||
|
||||
var seeds []int
|
||||
var seedRanges [][2]int
|
||||
lookup := map[string]*Lookup{}
|
||||
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
if strings.HasPrefix(text, "seeds:") && len(seeds) == 0 {
|
||||
seeds, seedRanges = readSeeds(text)
|
||||
log("seeds", len(seeds), "ranges", len(seedRanges))
|
||||
}
|
||||
|
||||
lookup = readMaps(scan)
|
||||
log("lookups", len(lookup))
|
||||
}
|
||||
|
||||
find := NewFinder(
|
||||
lookup["seed-to-soil"],
|
||||
lookup["soil-to-fertilizer"],
|
||||
lookup["fertilizer-to-water"],
|
||||
lookup["water-to-light"],
|
||||
lookup["light-to-temperature"],
|
||||
lookup["temperature-to-humidity"],
|
||||
lookup["humidity-to-location"],
|
||||
)
|
||||
|
||||
return result{findMinLocation(seeds, find), FindMinRangeLocationMulti(seedRanges, find)}, nil
|
||||
}
|
||||
|
||||
func readSeeds(text string) ([]int, [][2]int) {
|
||||
var seeds []int
|
||||
var seedRanges [][2]int
|
||||
|
||||
for i, n := range aoc.SliceMap(aoc.Atoi, strings.Fields(strings.TrimPrefix(text, "seeds: "))...) {
|
||||
seeds = append(seeds, n)
|
||||
|
||||
if i%2 == 0 {
|
||||
seedRanges = append(seedRanges, [2]int{n, 0})
|
||||
} else {
|
||||
seedRanges[len(seedRanges)-1][1] = n
|
||||
}
|
||||
}
|
||||
return seeds, seedRanges
|
||||
}
|
||||
|
||||
func readMaps(scan *bufio.Scanner) map[string]*Lookup {
|
||||
var cur *Lookup
|
||||
lookup := make(map[string]*Lookup)
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
|
||||
if strings.HasSuffix(text, "map:") {
|
||||
if cur != nil {
|
||||
cur.Sort()
|
||||
}
|
||||
cur = &Lookup{}
|
||||
title := strings.TrimSuffix(text, " map:")
|
||||
lookup[title] = cur
|
||||
}
|
||||
|
||||
numbers := strings.Fields(text)
|
||||
if len(numbers) == 3 {
|
||||
rng := make([]int, 3)
|
||||
for i, s := range numbers {
|
||||
n, _ := strconv.Atoi(s)
|
||||
rng[i] = n
|
||||
}
|
||||
cur.Add(rng[1], rng[0], rng[2])
|
||||
}
|
||||
}
|
||||
return lookup
|
||||
}
|
||||
|
||||
func findMinLocation(seeds []int, find *Finder) int {
|
||||
seedLocations := make([]int, len(seeds))
|
||||
for i, s := range seeds {
|
||||
seedLocations[i] = find.Find(s)
|
||||
}
|
||||
return min(seedLocations...)
|
||||
}
|
||||
|
||||
func FindMinRangeLocation(ranges [][2]int, find *Finder) int {
|
||||
results := 0
|
||||
for _, r := range ranges {
|
||||
results += r[1]
|
||||
}
|
||||
|
||||
seedLocations := make([]int, 0, results)
|
||||
|
||||
for _, s := range ranges {
|
||||
for i := 0; i < s[1]; i++ {
|
||||
seedLocations = append(seedLocations, find.Find(s[0]+i))
|
||||
}
|
||||
}
|
||||
return min(seedLocations...)
|
||||
}
|
||||
|
||||
func FindMinRangeLocationMulti(ranges [][2]int, find *Finder) int {
|
||||
worker := func(id int, jobs <-chan [2]int, results chan<- []int) {
|
||||
for s := range jobs {
|
||||
res := make([]int, s[1])
|
||||
for i := 0; i < s[1]; i++ {
|
||||
res[i] = find.Find(s[0] + i)
|
||||
}
|
||||
results <- res
|
||||
}
|
||||
}
|
||||
|
||||
numWorkers := 16
|
||||
jobsCh := make(chan [2]int, numWorkers)
|
||||
resultsCh := make(chan []int, len(ranges))
|
||||
|
||||
for w := 0; w < numWorkers; w++ {
|
||||
go worker(w, jobsCh, resultsCh)
|
||||
}
|
||||
log("started workers", numWorkers)
|
||||
|
||||
go func() {
|
||||
for i, s := range ranges {
|
||||
log("job", i, "send", s)
|
||||
jobsCh <- s
|
||||
}
|
||||
close(jobsCh)
|
||||
}()
|
||||
|
||||
results := 0
|
||||
for _, r := range ranges {
|
||||
results += r[1]
|
||||
}
|
||||
log("expecting results", results)
|
||||
|
||||
seedLocations := make([]int, 0, results)
|
||||
expectResults := make([]struct{}, len(ranges))
|
||||
for range expectResults {
|
||||
r := <-resultsCh
|
||||
seedLocations = append(seedLocations, r...)
|
||||
}
|
||||
|
||||
return min(seedLocations...)
|
||||
}
|
||||
|
||||
type Range struct {
|
||||
src int
|
||||
dest int
|
||||
len int
|
||||
}
|
||||
type Ranges []Range
|
||||
|
||||
func (r Ranges) Len() int { return len(r) }
|
||||
func (r Ranges) Less(i, j int) bool { return r[i].src < r[j].src }
|
||||
func (r Ranges) Swap(i, j int) { r[i], r[j] = r[j], r[i] }
|
||||
|
||||
type Lookup struct {
|
||||
ranges Ranges
|
||||
}
|
||||
|
||||
func (l *Lookup) Add(src, dest, len int) {
|
||||
if l == nil {
|
||||
return
|
||||
}
|
||||
l.ranges = append(l.ranges, Range{src, dest, len})
|
||||
}
|
||||
func (l *Lookup) Sort() {
|
||||
sort.Sort(sort.Reverse(l.ranges))
|
||||
}
|
||||
func (l *Lookup) Find(n int) int {
|
||||
for _, r := range l.ranges {
|
||||
if n >= r.src && n <= r.src+r.len {
|
||||
diff := n - r.src
|
||||
if diff < r.len {
|
||||
return r.dest + diff
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return n
|
||||
}
|
||||
|
||||
type Finder struct {
|
||||
stack []*Lookup
|
||||
}
|
||||
|
||||
func NewFinder(stack ...*Lookup) *Finder {
|
||||
return &Finder{stack: stack}
|
||||
}
|
||||
func (f *Finder) Find(n int) int {
|
||||
// fmt.Print("Find: ")
|
||||
for _, l := range f.stack {
|
||||
// fmt.Print(n, "->")
|
||||
n = l.Find(n)
|
||||
// fmt.Print(n, " ")
|
||||
}
|
||||
// fmt.Println("")
|
||||
return n
|
||||
}
|
||||
|
||||
func min(arr ...int) int {
|
||||
if len(arr) == 0 {
|
||||
return 0
|
||||
}
|
||||
m := arr[0]
|
||||
for _, a := range arr[1:] {
|
||||
if m > a {
|
||||
m = a
|
||||
}
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
func log(v ...any) {
|
||||
fmt.Fprintln(os.Stderr, v...)
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
r, err := run(scan)
|
||||
is.NoErr(err)
|
||||
is.Equal(r.minLocation, 35)
|
||||
is.Equal(r.minRange, 46)
|
||||
}
|
||||
|
||||
func SkipTestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
r, err := run(scan)
|
||||
is.NoErr(err)
|
||||
is.Equal(r.minLocation, 199602917)
|
||||
is.Equal(r.minRange, 2254686)
|
||||
}
|
||||
|
||||
func TestLookup(t *testing.T) {
|
||||
is := is.New(t)
|
||||
find := &Lookup{ranges: Ranges{
|
||||
{98, 50, 2},
|
||||
{50, 52, 48},
|
||||
}}
|
||||
is.Equal(find.Find(79), 81)
|
||||
|
||||
find = &Lookup{ranges: Ranges{
|
||||
{77, 45, 23},
|
||||
{45, 81, 19},
|
||||
{64, 68, 13},
|
||||
}}
|
||||
is.Equal(find.Find(77), 45)
|
||||
|
||||
}
|
||||
|
||||
func TestFinder(t *testing.T) {
|
||||
is := is.New(t)
|
||||
find := NewFinder(
|
||||
// seed-to-soil
|
||||
&Lookup{ranges: Ranges{
|
||||
{98, 50, 2},
|
||||
{50, 52, 48},
|
||||
}},
|
||||
// soil-to-fertilizer
|
||||
&Lookup{ranges: Ranges{
|
||||
{15, 0, 37},
|
||||
{52, 37, 2},
|
||||
{0, 39, 15},
|
||||
}},
|
||||
// fertilizer-to-water
|
||||
&Lookup{ranges: Ranges{
|
||||
{53, 49, 8},
|
||||
{11, 0, 42},
|
||||
{0, 42, 7},
|
||||
{7, 57, 4},
|
||||
}},
|
||||
// water-to-light
|
||||
&Lookup{ranges: Ranges{
|
||||
{18, 88, 7},
|
||||
{25, 18, 70},
|
||||
}},
|
||||
// light-to-temperature
|
||||
&Lookup{ranges: Ranges{
|
||||
{77, 45, 23},
|
||||
{45, 81, 19},
|
||||
{64, 68, 13},
|
||||
}},
|
||||
// temperature-to-humidity
|
||||
&Lookup{ranges: Ranges{
|
||||
{69, 0, 1},
|
||||
{0, 1, 69},
|
||||
}},
|
||||
// humidity-to-location
|
||||
&Lookup{ranges: Ranges{
|
||||
{56, 60, 37},
|
||||
{93, 56, 4},
|
||||
}},
|
||||
)
|
||||
is.Equal(find.Find(82), 46)
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
32T3K 765
|
||||
T55J5 684
|
||||
KK677 28
|
||||
KTJJT 220
|
||||
QQQJA 483
|
||||
@@ -0,0 +1,1000 @@
|
||||
A2T63 467
|
||||
4854J 948
|
||||
TJTT3 229
|
||||
69664 839
|
||||
ATT9A 340
|
||||
69959 997
|
||||
39666 4
|
||||
JJA59 528
|
||||
A7799 27
|
||||
T8JTA 71
|
||||
3333J 50
|
||||
43Q48 897
|
||||
66266 574
|
||||
65TTT 572
|
||||
TT222 608
|
||||
JAAQT 98
|
||||
9Q959 610
|
||||
27573 537
|
||||
J2228 504
|
||||
AJ555 447
|
||||
KJK6K 283
|
||||
2J57T 183
|
||||
4444Q 500
|
||||
66696 353
|
||||
J7988 941
|
||||
79TJK 744
|
||||
24244 107
|
||||
K9625 958
|
||||
4A2AA 814
|
||||
6Q566 494
|
||||
7QA77 586
|
||||
9KTK9 510
|
||||
44QQQ 101
|
||||
Q9T9Q 746
|
||||
A9299 272
|
||||
Q656J 536
|
||||
29999 874
|
||||
Q2T49 811
|
||||
777T7 928
|
||||
28288 198
|
||||
44634 249
|
||||
5Q96T 484
|
||||
Q257J 83
|
||||
63636 568
|
||||
58J59 174
|
||||
QQAQQ 633
|
||||
3J84J 73
|
||||
2TTJT 684
|
||||
898A9 751
|
||||
J9638 917
|
||||
5546J 118
|
||||
JJ897 738
|
||||
AA33A 927
|
||||
77JTT 603
|
||||
79799 439
|
||||
23J23 228
|
||||
7QQ6T 33
|
||||
92585 468
|
||||
98998 685
|
||||
TT2TT 378
|
||||
K999K 327
|
||||
88A59 163
|
||||
46666 60
|
||||
37TT7 957
|
||||
7QJ35 209
|
||||
33934 333
|
||||
TTTT8 154
|
||||
3932K 813
|
||||
QA6AT 791
|
||||
66T34 128
|
||||
39939 277
|
||||
J34J4 175
|
||||
9KA99 964
|
||||
94444 763
|
||||
JJK4A 236
|
||||
67AJK 28
|
||||
4QTQT 299
|
||||
8TK4Q 526
|
||||
KAK4K 253
|
||||
3K7A2 918
|
||||
49399 112
|
||||
TTQQQ 845
|
||||
J999J 418
|
||||
K44KK 677
|
||||
4AK2J 61
|
||||
9J959 475
|
||||
J8838 387
|
||||
66676 102
|
||||
T63A6 264
|
||||
34483 865
|
||||
QKQKQ 692
|
||||
J6669 952
|
||||
K286T 436
|
||||
666JT 472
|
||||
J9872 303
|
||||
ATTTT 543
|
||||
22J52 577
|
||||
A447Q 493
|
||||
74TQ3 698
|
||||
68T88 759
|
||||
5TT5T 668
|
||||
777KA 470
|
||||
AA3AQ 104
|
||||
76Q6A 902
|
||||
T536Q 784
|
||||
5Q66T 2
|
||||
7A72A 765
|
||||
T5455 462
|
||||
TT39K 629
|
||||
J73JA 419
|
||||
T77T7 993
|
||||
22K78 357
|
||||
83Q33 13
|
||||
54T84 531
|
||||
44AA4 167
|
||||
QTJ38 100
|
||||
6665J 70
|
||||
5957T 313
|
||||
J884A 56
|
||||
T6T99 944
|
||||
TKK6K 265
|
||||
265K7 850
|
||||
22325 109
|
||||
QQQ55 195
|
||||
7TATT 513
|
||||
4999Q 575
|
||||
56TQK 688
|
||||
62266 553
|
||||
27252 663
|
||||
K87A3 311
|
||||
J2AAJ 647
|
||||
77737 19
|
||||
Q4T4J 979
|
||||
2QK7Q 852
|
||||
Q2Q42 7
|
||||
89J77 924
|
||||
QT66T 992
|
||||
288A8 593
|
||||
QQQQ2 509
|
||||
58329 622
|
||||
5JAAA 356
|
||||
97364 999
|
||||
38576 806
|
||||
55K67 491
|
||||
KKK8K 215
|
||||
T2TT4 398
|
||||
6666K 412
|
||||
Q9829 583
|
||||
385K8 348
|
||||
88A48 235
|
||||
76K8K 656
|
||||
K4K44 204
|
||||
A42TQ 712
|
||||
49K4K 245
|
||||
22266 297
|
||||
T3AAA 177
|
||||
72294 636
|
||||
TTQTT 907
|
||||
5JQ95 762
|
||||
KK777 824
|
||||
4Q294 835
|
||||
T9722 79
|
||||
55Q6Q 683
|
||||
666JK 726
|
||||
27A64 457
|
||||
494J4 561
|
||||
52255 230
|
||||
37335 675
|
||||
T9383 911
|
||||
8543K 247
|
||||
67QA8 659
|
||||
QJ886 886
|
||||
2QJJ7 261
|
||||
K29K9 339
|
||||
64Q84 497
|
||||
6T6TT 203
|
||||
K88K8 25
|
||||
AA5AA 882
|
||||
59925 256
|
||||
K995T 382
|
||||
K7777 734
|
||||
55888 371
|
||||
A7J28 710
|
||||
JTATT 480
|
||||
T7JKJ 817
|
||||
A4Q46 887
|
||||
KJ4JK 827
|
||||
JJ8JJ 589
|
||||
4A766 878
|
||||
36596 511
|
||||
A4QQ6 266
|
||||
5JK32 669
|
||||
7J372 521
|
||||
K949J 325
|
||||
3A633 218
|
||||
25Q6K 110
|
||||
44K48 406
|
||||
69668 893
|
||||
2QJT6 864
|
||||
4QQQQ 216
|
||||
5K555 184
|
||||
TA969 616
|
||||
3T573 876
|
||||
A5K9J 160
|
||||
J22KA 637
|
||||
48575 316
|
||||
75997 391
|
||||
38558 903
|
||||
35535 793
|
||||
J2J42 933
|
||||
J74A5 92
|
||||
9K457 771
|
||||
T57K7 111
|
||||
TJ926 978
|
||||
89K4A 274
|
||||
2Q344 153
|
||||
TJTTJ 199
|
||||
994AA 259
|
||||
3Q724 421
|
||||
66366 34
|
||||
Q444J 909
|
||||
3QQQJ 188
|
||||
9AAAA 769
|
||||
A974K 35
|
||||
99959 922
|
||||
99646 159
|
||||
22225 46
|
||||
9A3JJ 257
|
||||
T2J9A 133
|
||||
7527A 171
|
||||
88868 36
|
||||
23322 341
|
||||
T99J7 797
|
||||
QQ8A7 461
|
||||
AJ2A3 138
|
||||
55AJ2 16
|
||||
AAAQA 254
|
||||
57332 623
|
||||
A3333 22
|
||||
T37K9 597
|
||||
44QT4 713
|
||||
J7T6T 516
|
||||
Q888Q 896
|
||||
Q22QQ 222
|
||||
2783Q 11
|
||||
75779 959
|
||||
642J5 842
|
||||
T9TT4 580
|
||||
6JQ95 392
|
||||
A355A 649
|
||||
53676 271
|
||||
3J353 643
|
||||
Q28Q4 499
|
||||
44J5J 702
|
||||
Q97K2 833
|
||||
433A5 570
|
||||
99979 459
|
||||
AJT44 652
|
||||
663K6 789
|
||||
63399 994
|
||||
AATJT 65
|
||||
4J8J2 212
|
||||
KQ353 373
|
||||
A53K4 180
|
||||
J9797 846
|
||||
TTT98 686
|
||||
7KKKA 868
|
||||
88J3J 372
|
||||
9T5KQ 482
|
||||
J5Q8A 514
|
||||
9588K 695
|
||||
JA73Q 752
|
||||
97TTJ 779
|
||||
QT888 405
|
||||
QJ9Q5 293
|
||||
T3489 481
|
||||
AAAAT 940
|
||||
KK4KK 662
|
||||
84A9Q 841
|
||||
2Q224 278
|
||||
A2K84 548
|
||||
66569 232
|
||||
4T4QQ 5
|
||||
AAAA8 17
|
||||
K95AK 617
|
||||
97858 892
|
||||
88A2K 72
|
||||
42J2Q 448
|
||||
993K3 740
|
||||
7T97T 150
|
||||
444T3 393
|
||||
333JA 700
|
||||
J7Q4A 90
|
||||
4KQ3Q 402
|
||||
T3TJ9 844
|
||||
44864 820
|
||||
J29AA 913
|
||||
23293 651
|
||||
Q9939 777
|
||||
666Q6 191
|
||||
A2288 745
|
||||
8338K 796
|
||||
3J9Q7 241
|
||||
48854 85
|
||||
J6266 305
|
||||
9QQ53 821
|
||||
AT497 655
|
||||
ATAA8 943
|
||||
6AA66 627
|
||||
9Q999 895
|
||||
A563K 24
|
||||
22722 221
|
||||
7J35J 336
|
||||
76687 826
|
||||
6A79A 487
|
||||
94944 148
|
||||
22A28 223
|
||||
J55TQ 829
|
||||
39K92 306
|
||||
86667 178
|
||||
QQQQ3 8
|
||||
93A33 413
|
||||
JQ777 930
|
||||
K8TQ8 440
|
||||
JJJJJ 666
|
||||
68T72 432
|
||||
577J4 828
|
||||
72275 926
|
||||
9K85T 975
|
||||
T4J27 618
|
||||
J882Q 725
|
||||
23323 308
|
||||
T55TJ 977
|
||||
23272 408
|
||||
48QQQ 260
|
||||
J5565 45
|
||||
Q98Q9 262
|
||||
444T4 540
|
||||
88K48 424
|
||||
3J3J3 890
|
||||
TQ353 786
|
||||
9Q222 201
|
||||
5T443 142
|
||||
AA6A6 14
|
||||
Q7447 136
|
||||
7T55K 196
|
||||
79433 818
|
||||
3QT3J 602
|
||||
Q7QQQ 114
|
||||
77877 410
|
||||
33955 485
|
||||
474A7 193
|
||||
7KA7K 530
|
||||
33993 626
|
||||
6QQQQ 694
|
||||
2J248 956
|
||||
62A28 639
|
||||
TJ9QQ 696
|
||||
6JK52 569
|
||||
42844 76
|
||||
44322 519
|
||||
Q22J2 840
|
||||
J6J66 805
|
||||
Q5Q5J 185
|
||||
QAJA6 750
|
||||
48896 95
|
||||
2T2TT 57
|
||||
243J7 182
|
||||
49279 231
|
||||
99J99 377
|
||||
JQ324 243
|
||||
55984 407
|
||||
QJ68T 290
|
||||
5Q47K 324
|
||||
A349Q 170
|
||||
8Q8QQ 469
|
||||
K2JJK 625
|
||||
TTJTT 501
|
||||
J4444 81
|
||||
47A44 812
|
||||
2TJ23 594
|
||||
Q622A 873
|
||||
JJ8AK 587
|
||||
5T5TK 197
|
||||
899Q7 606
|
||||
8TJK9 380
|
||||
K68Q5 454
|
||||
KQTK6 335
|
||||
6K668 207
|
||||
QQ6T6 164
|
||||
38J37 682
|
||||
2JJ2K 506
|
||||
72277 650
|
||||
7J728 934
|
||||
883T8 62
|
||||
Q2T72 985
|
||||
J25T9 464
|
||||
85657 429
|
||||
J2AA2 780
|
||||
66668 206
|
||||
KAKAK 291
|
||||
3KKKK 279
|
||||
5K33A 234
|
||||
82228 757
|
||||
J6QQ4 251
|
||||
Q3Q57 973
|
||||
QT342 80
|
||||
33Q8Q 869
|
||||
28546 515
|
||||
443KK 296
|
||||
44785 172
|
||||
JKT56 438
|
||||
27A47 179
|
||||
64789 925
|
||||
Q6KQ5 642
|
||||
227J2 488
|
||||
5264T 86
|
||||
2A57A 628
|
||||
A64TK 369
|
||||
4T42T 77
|
||||
6595J 108
|
||||
38247 91
|
||||
J5K8K 730
|
||||
5AQJQ 723
|
||||
K8KKA 604
|
||||
92226 705
|
||||
2J2AQ 676
|
||||
6AQQA 870
|
||||
TTTK9 147
|
||||
A28K3 984
|
||||
K2K2T 670
|
||||
2TT35 135
|
||||
JQT42 546
|
||||
JA696 9
|
||||
K3K39 815
|
||||
89T2J 880
|
||||
4J3TT 132
|
||||
K4K62 560
|
||||
8742Q 242
|
||||
K75K5 403
|
||||
5J55T 301
|
||||
33733 718
|
||||
7Q777 507
|
||||
878JT 355
|
||||
8J53J 598
|
||||
2J442 512
|
||||
AAJAJ 26
|
||||
69966 252
|
||||
6AJ2A 654
|
||||
A5A55 329
|
||||
578A3 214
|
||||
QTJT9 955
|
||||
86838 525
|
||||
78KAJ 843
|
||||
66J79 557
|
||||
J22T2 573
|
||||
K77T7 141
|
||||
6Q568 1000
|
||||
KKKK5 741
|
||||
8426K 921
|
||||
2K69Q 539
|
||||
6AKT2 258
|
||||
Q33Q6 559
|
||||
T627Q 389
|
||||
Q2489 856
|
||||
44544 456
|
||||
AQQQ7 116
|
||||
Q6J76 965
|
||||
TQTQT 808
|
||||
QQ35K 838
|
||||
37T5Q 155
|
||||
KKKKJ 281
|
||||
4Q4JK 632
|
||||
8A8A8 384
|
||||
98T82 365
|
||||
33JKT 404
|
||||
2A868 474
|
||||
3J8J2 505
|
||||
2K22Q 145
|
||||
9T9TT 74
|
||||
78888 298
|
||||
86A5Q 571
|
||||
6K56T 648
|
||||
24727 263
|
||||
KK9AA 809
|
||||
6T6T6 638
|
||||
67K9A 319
|
||||
22T22 415
|
||||
A92QQ 127
|
||||
8J9J9 400
|
||||
Q59QQ 862
|
||||
73337 75
|
||||
QQQQJ 761
|
||||
8JK42 233
|
||||
3K6K3 15
|
||||
5T737 381
|
||||
2QT24 395
|
||||
88J8Q 93
|
||||
AK747 37
|
||||
42747 798
|
||||
92666 54
|
||||
K6AKA 490
|
||||
QQ235 782
|
||||
AA4AQ 139
|
||||
J22TT 954
|
||||
66JTJ 68
|
||||
K9A5T 792
|
||||
9Q56Q 837
|
||||
63365 889
|
||||
K53A8 82
|
||||
28886 810
|
||||
46626 47
|
||||
AJ443 442
|
||||
TJT33 386
|
||||
A4822 338
|
||||
K22J2 238
|
||||
99323 961
|
||||
J632Q 479
|
||||
Q6222 848
|
||||
3JQQ3 119
|
||||
9QQQQ 703
|
||||
22388 900
|
||||
333J8 803
|
||||
88333 950
|
||||
73K47 280
|
||||
67KJ4 30
|
||||
7QA7A 716
|
||||
J864Q 974
|
||||
Q5T75 565
|
||||
777JJ 787
|
||||
99899 288
|
||||
76Q77 971
|
||||
29442 679
|
||||
TTTT7 126
|
||||
A448T 317
|
||||
97Q4K 347
|
||||
729JQ 200
|
||||
T8T8T 664
|
||||
77747 894
|
||||
K6AA6 55
|
||||
88848 48
|
||||
8QQQJ 743
|
||||
KQQQQ 310
|
||||
J78TT 43
|
||||
66K6K 323
|
||||
23J39 292
|
||||
7Q49A 937
|
||||
32T95 951
|
||||
A3A92 211
|
||||
3QJ5J 12
|
||||
77KAT 304
|
||||
44763 715
|
||||
8QTT7 366
|
||||
45JQT 320
|
||||
QQ6KK 620
|
||||
3T7JT 465
|
||||
Q866J 538
|
||||
J6T94 409
|
||||
2222J 270
|
||||
38982 321
|
||||
JJ2QT 332
|
||||
ATT8A 69
|
||||
QQA4J 542
|
||||
TKJKK 801
|
||||
5A5T5 884
|
||||
TT9TT 23
|
||||
7K343 719
|
||||
33453 96
|
||||
K82QK 349
|
||||
Q6KTT 859
|
||||
477TJ 674
|
||||
QQAAQ 754
|
||||
4J5AK 105
|
||||
2JA22 224
|
||||
QJJAK 449
|
||||
QKT4A 929
|
||||
KKA9K 968
|
||||
J399J 788
|
||||
J333T 162
|
||||
A394A 699
|
||||
QQTAJ 783
|
||||
2976Q 949
|
||||
75575 658
|
||||
J4KKK 137
|
||||
Q44TT 309
|
||||
5555A 872
|
||||
4A444 78
|
||||
5KJ5K 385
|
||||
3AK32 967
|
||||
Q55J7 898
|
||||
222A3 428
|
||||
76787 158
|
||||
52623 1
|
||||
72Q8A 267
|
||||
55Q55 756
|
||||
36363 282
|
||||
4444K 661
|
||||
6KJ44 857
|
||||
9KKJK 220
|
||||
9T7AJ 165
|
||||
44QQ3 970
|
||||
67746 794
|
||||
5A2K2 736
|
||||
75559 582
|
||||
88988 166
|
||||
58533 720
|
||||
77792 51
|
||||
6Q22J 665
|
||||
TA77T 275
|
||||
2K86A 478
|
||||
566QK 799
|
||||
9KJ79 289
|
||||
55646 120
|
||||
AAAKQ 383
|
||||
3A23J 942
|
||||
54225 646
|
||||
8AAA8 103
|
||||
6T256 946
|
||||
82J66 240
|
||||
T69J7 463
|
||||
555T5 202
|
||||
99888 219
|
||||
75936 64
|
||||
37K99 747
|
||||
43A44 58
|
||||
652TQ 981
|
||||
2JJ43 947
|
||||
4A25K 520
|
||||
K9J99 989
|
||||
22223 144
|
||||
4433Q 225
|
||||
2KKK5 352
|
||||
53577 226
|
||||
888TT 581
|
||||
KKKQQ 244
|
||||
JQ5QJ 129
|
||||
7KKK2 822
|
||||
66976 595
|
||||
74774 708
|
||||
T23QA 49
|
||||
68A6A 529
|
||||
A3Q3A 885
|
||||
4Q8J4 39
|
||||
3JK44 547
|
||||
A4KAK 755
|
||||
QT736 414
|
||||
QQTQQ 527
|
||||
77757 342
|
||||
KJKKJ 161
|
||||
T4TA4 541
|
||||
Q2583 417
|
||||
88K2K 605
|
||||
ATK5J 89
|
||||
88T77 315
|
||||
K54K7 441
|
||||
Q3994 276
|
||||
J3666 370
|
||||
89K89 861
|
||||
3564A 831
|
||||
AK394 194
|
||||
6J76K 709
|
||||
2T748 343
|
||||
4KJ69 550
|
||||
TKKTT 653
|
||||
K5K55 399
|
||||
T6T75 192
|
||||
6T226 248
|
||||
KJ665 330
|
||||
5J55J 853
|
||||
Q7577 552
|
||||
74Q4Q 115
|
||||
JA8AT 879
|
||||
KKQJQ 285
|
||||
33633 599
|
||||
586KK 434
|
||||
4334J 374
|
||||
4785K 987
|
||||
K45K5 963
|
||||
J3T4Q 915
|
||||
JT498 32
|
||||
88828 492
|
||||
JA87T 766
|
||||
TAA3T 443
|
||||
J4729 210
|
||||
7369Q 584
|
||||
64446 94
|
||||
33T33 146
|
||||
35Q5Q 190
|
||||
82878 972
|
||||
8QJ55 566
|
||||
8888J 326
|
||||
KT2QQ 640
|
||||
3JAA3 273
|
||||
J787J 564
|
||||
74KQJ 904
|
||||
87K36 237
|
||||
KKAKK 697
|
||||
35335 854
|
||||
66556 590
|
||||
KA575 998
|
||||
6495A 758
|
||||
K99QQ 181
|
||||
3223K 635
|
||||
Q6444 189
|
||||
9QKA5 563
|
||||
6Q6Q6 609
|
||||
2KJQA 156
|
||||
92292 176
|
||||
7QQQ7 804
|
||||
82TA4 816
|
||||
J6A6A 67
|
||||
TQJ8T 693
|
||||
56KJK 518
|
||||
89589 966
|
||||
6QA8J 396
|
||||
93333 450
|
||||
QQQQ8 851
|
||||
QKKKK 722
|
||||
A4AJT 778
|
||||
7J7T7 667
|
||||
JQQJQ 836
|
||||
7T4T4 430
|
||||
8QTJA 671
|
||||
353A7 125
|
||||
66343 871
|
||||
556Q5 431
|
||||
388J3 522
|
||||
T6636 704
|
||||
2TKJ3 140
|
||||
77KJ8 800
|
||||
56AA6 217
|
||||
T349A 205
|
||||
KKK22 770
|
||||
J6AKA 379
|
||||
JT2TJ 496
|
||||
TQ69J 832
|
||||
9KK9K 916
|
||||
3524J 691
|
||||
JAQQA 124
|
||||
33Q66 362
|
||||
J7A4A 149
|
||||
6846A 753
|
||||
88838 613
|
||||
6QQ96 914
|
||||
2888J 908
|
||||
QJQ4Q 819
|
||||
89K7K 742
|
||||
5J86A 995
|
||||
55559 113
|
||||
2JKJ4 41
|
||||
68866 524
|
||||
22999 375
|
||||
4533T 486
|
||||
27975 991
|
||||
22A22 795
|
||||
KQKAK 781
|
||||
JTKT3 363
|
||||
9T943 919
|
||||
58585 714
|
||||
54J45 143
|
||||
Q4664 657
|
||||
JK663 416
|
||||
28Q22 517
|
||||
65KK3 168
|
||||
KQ7JQ 477
|
||||
QKQJA 455
|
||||
62T97 458
|
||||
Q2KJK 938
|
||||
23K7J 678
|
||||
36796 721
|
||||
79268 612
|
||||
9Q5QA 567
|
||||
89Q88 768
|
||||
KTJTQ 681
|
||||
KA639 97
|
||||
32J85 134
|
||||
J96A5 532
|
||||
88885 269
|
||||
T69JT 823
|
||||
KQ6Q6 733
|
||||
AT2AA 63
|
||||
2QJ69 84
|
||||
99A9A 748
|
||||
TAQJK 830
|
||||
K5T88 446
|
||||
42449 790
|
||||
33335 578
|
||||
96J24 10
|
||||
J8K4T 358
|
||||
548J5 615
|
||||
339A8 855
|
||||
AJAA6 498
|
||||
37J32 508
|
||||
666J8 735
|
||||
3A7JA 760
|
||||
KAK57 729
|
||||
J226J 899
|
||||
28JKQ 591
|
||||
7J75Q 312
|
||||
Q282Q 66
|
||||
6J222 545
|
||||
727A7 775
|
||||
55KKK 433
|
||||
868JJ 29
|
||||
6JK87 186
|
||||
9KKKK 641
|
||||
4T4J2 727
|
||||
79JK4 556
|
||||
J99A9 923
|
||||
TTJJK 21
|
||||
TJ685 345
|
||||
QA9QQ 645
|
||||
66323 3
|
||||
66665 910
|
||||
73A7J 388
|
||||
KJ3K2 732
|
||||
77793 660
|
||||
QTA6T 988
|
||||
66888 920
|
||||
Q3393 208
|
||||
J4TJT 600
|
||||
88J8J 701
|
||||
82T3J 53
|
||||
KK7A8 772
|
||||
J77KK 425
|
||||
K7TTT 337
|
||||
K58Q3 802
|
||||
6T4T4 737
|
||||
KKKK7 453
|
||||
K9599 99
|
||||
AAAA7 476
|
||||
TKATT 728
|
||||
3QQ3Q 346
|
||||
49A98 123
|
||||
95599 286
|
||||
7K7Q4 38
|
||||
AA644 634
|
||||
J9J8T 40
|
||||
4JJ48 246
|
||||
77J22 986
|
||||
6J633 906
|
||||
ATA6A 376
|
||||
646A3 359
|
||||
KKQT7 535
|
||||
Q22Q6 785
|
||||
6J666 502
|
||||
28755 607
|
||||
852K5 44
|
||||
AA2TJ 213
|
||||
A6TJT 847
|
||||
J6A44 452
|
||||
9T982 687
|
||||
6K8K8 59
|
||||
TT6AT 87
|
||||
63222 776
|
||||
39JK3 849
|
||||
J5575 834
|
||||
8JAQA 503
|
||||
49JAK 614
|
||||
3T34T 544
|
||||
87788 451
|
||||
3475Q 351
|
||||
836J7 990
|
||||
8Q585 866
|
||||
48389 368
|
||||
2AAAA 534
|
||||
786K4 489
|
||||
785Q2 689
|
||||
A9A59 706
|
||||
9KJ22 891
|
||||
T4698 621
|
||||
63TQQ 334
|
||||
264A5 596
|
||||
4T3AQ 394
|
||||
655A4 331
|
||||
45TQ9 52
|
||||
A5999 630
|
||||
77337 858
|
||||
KT479 707
|
||||
58778 152
|
||||
79869 881
|
||||
JKQ84 344
|
||||
279T7 495
|
||||
8388Q 551
|
||||
3QJ38 877
|
||||
T3TTA 445
|
||||
6Q6QA 905
|
||||
94426 619
|
||||
79669 576
|
||||
75577 774
|
||||
8T888 962
|
||||
46J44 773
|
||||
74J88 268
|
||||
AA23A 690
|
||||
9666Q 996
|
||||
A8T82 969
|
||||
Q54Q5 932
|
||||
32942 420
|
||||
777J7 173
|
||||
J452K 466
|
||||
T85T8 322
|
||||
6556A 807
|
||||
22727 287
|
||||
2J22J 250
|
||||
3264Q 401
|
||||
Q7366 939
|
||||
4QKK4 875
|
||||
53528 295
|
||||
99963 294
|
||||
K5AQ7 20
|
||||
7A9JQ 523
|
||||
2779Q 437
|
||||
K2J44 300
|
||||
AK4Q5 426
|
||||
2A9AK 471
|
||||
77997 239
|
||||
22422 549
|
||||
3T338 151
|
||||
5T4J4 42
|
||||
3K23K 680
|
||||
82J28 901
|
||||
AQQQ8 423
|
||||
KKK29 427
|
||||
T8TJT 187
|
||||
23333 314
|
||||
84JA7 931
|
||||
Q5TJT 122
|
||||
2222Q 169
|
||||
K2937 888
|
||||
6969J 980
|
||||
QQ2Q7 328
|
||||
K7436 435
|
||||
AJAAA 724
|
||||
7Q5QQ 302
|
||||
TKKK3 131
|
||||
K5QKJ 673
|
||||
45229 588
|
||||
33J32 982
|
||||
2AK9K 558
|
||||
8A88K 444
|
||||
T26K9 411
|
||||
Q9653 117
|
||||
QJJJT 860
|
||||
37Q33 554
|
||||
396KT 130
|
||||
68262 983
|
||||
44J4J 672
|
||||
77827 106
|
||||
266Q6 367
|
||||
842AJ 749
|
||||
76363 644
|
||||
448A6 631
|
||||
22622 121
|
||||
QJ39A 361
|
||||
73376 318
|
||||
ATAAT 354
|
||||
A2KAA 390
|
||||
93T3T 562
|
||||
76TKA 307
|
||||
JAK83 18
|
||||
2684T 825
|
||||
K7T36 284
|
||||
7J3A3 483
|
||||
49TA8 953
|
||||
Q343Q 6
|
||||
JJQQK 592
|
||||
55255 945
|
||||
K8K8K 867
|
||||
53555 717
|
||||
AA36A 227
|
||||
69A48 555
|
||||
K8885 767
|
||||
9929J 364
|
||||
64999 460
|
||||
J9333 157
|
||||
49994 397
|
||||
JTKJ6 764
|
||||
TTT4T 422
|
||||
3K334 935
|
||||
5J555 711
|
||||
JK863 960
|
||||
Q8J9K 624
|
||||
Q5QQQ 473
|
||||
9988J 88
|
||||
AA99A 976
|
||||
54542 611
|
||||
4Q8Q9 31
|
||||
9AJ89 912
|
||||
5T52J 533
|
||||
K4K22 360
|
||||
54555 579
|
||||
53993 255
|
||||
44446 863
|
||||
J373Q 731
|
||||
22525 601
|
||||
Q7JQQ 350
|
||||
5J597 883
|
||||
QAQQK 936
|
||||
42434 585
|
||||
6TT6J 739
|
||||
@@ -0,0 +1,1000 @@
|
||||
TQA26 14
|
||||
66656 612
|
||||
JK3JT 442
|
||||
A6QQA 214
|
||||
Q3777 131
|
||||
J2K8J 180
|
||||
J56KK 578
|
||||
33699 532
|
||||
999K4 605
|
||||
4J445 884
|
||||
59A5A 381
|
||||
86686 419
|
||||
7T5KJ 92
|
||||
47883 178
|
||||
749K3 2
|
||||
7K6J3 675
|
||||
8J22J 869
|
||||
47463 168
|
||||
2A5K3 597
|
||||
27332 465
|
||||
4AQ9K 236
|
||||
59TJ5 883
|
||||
5TTTQ 333
|
||||
A8QAJ 208
|
||||
JAJ95 380
|
||||
8688A 265
|
||||
34K62 525
|
||||
KT7J7 709
|
||||
A5A5A 890
|
||||
7347J 935
|
||||
6TQ57 973
|
||||
888K8 345
|
||||
J5456 33
|
||||
8T8T4 456
|
||||
3J942 88
|
||||
QJJJA 727
|
||||
75333 479
|
||||
K6622 369
|
||||
T468J 608
|
||||
835A7 107
|
||||
67AA7 390
|
||||
QTJ9Q 25
|
||||
Q56Q3 579
|
||||
7K245 227
|
||||
36857 327
|
||||
8J7K9 524
|
||||
7AAAJ 277
|
||||
JKK4K 352
|
||||
43974 576
|
||||
2QJ22 482
|
||||
99JJ9 484
|
||||
AJAQQ 341
|
||||
8222K 976
|
||||
JA57Q 84
|
||||
A593T 725
|
||||
9T494 581
|
||||
TKTTT 941
|
||||
KJ55A 439
|
||||
9444J 137
|
||||
4423T 504
|
||||
K9J96 944
|
||||
6K9JQ 656
|
||||
2Q34J 48
|
||||
8T87Q 679
|
||||
5J955 27
|
||||
Q3T4T 416
|
||||
J8888 972
|
||||
5Q298 257
|
||||
64463 937
|
||||
44K4J 708
|
||||
KQQQQ 622
|
||||
TJKTT 800
|
||||
9394J 63
|
||||
TJ639 660
|
||||
K4JAQ 119
|
||||
9838Q 788
|
||||
76K4A 38
|
||||
J86KA 768
|
||||
3AQ3A 617
|
||||
J2592 40
|
||||
QAK68 761
|
||||
98999 620
|
||||
J4T34 963
|
||||
2A979 483
|
||||
95JA8 336
|
||||
A33AA 54
|
||||
TTT33 518
|
||||
QT759 212
|
||||
A7A3A 999
|
||||
KJ6AK 485
|
||||
99339 921
|
||||
TJ3A4 968
|
||||
2TKTT 573
|
||||
28626 844
|
||||
9KK8K 79
|
||||
7QT7A 57
|
||||
66777 493
|
||||
JJ355 676
|
||||
AJAAA 176
|
||||
AAQA3 522
|
||||
T4KJ4 308
|
||||
375K3 658
|
||||
J7K75 864
|
||||
JA275 669
|
||||
76T45 507
|
||||
AJT92 975
|
||||
K5434 346
|
||||
942Q2 598
|
||||
JA33A 495
|
||||
3JKK4 39
|
||||
2AAJA 399
|
||||
6555T 296
|
||||
7962T 787
|
||||
KJK2K 764
|
||||
684JJ 998
|
||||
6JJ36 52
|
||||
64K66 838
|
||||
JA8K3 901
|
||||
3Q7Q3 774
|
||||
9JK99 666
|
||||
3TK6J 355
|
||||
KKJ25 503
|
||||
86658 584
|
||||
T4T42 268
|
||||
Q4238 530
|
||||
T632K 700
|
||||
TJTTJ 571
|
||||
T7Q38 747
|
||||
AJ6KQ 150
|
||||
2QT22 885
|
||||
KJA4A 784
|
||||
87667 859
|
||||
63994 570
|
||||
Q82A6 331
|
||||
TK9T6 124
|
||||
J5K5K 140
|
||||
TKAJA 211
|
||||
59AAA 683
|
||||
89J57 694
|
||||
TQTT9 122
|
||||
59996 715
|
||||
73TQA 397
|
||||
AJT3T 420
|
||||
85882 777
|
||||
AA4AT 175
|
||||
4K4K7 670
|
||||
8JA79 19
|
||||
QKKJ8 340
|
||||
9TTTA 243
|
||||
77QQ7 314
|
||||
22237 22
|
||||
656QK 911
|
||||
8K79A 847
|
||||
4K466 734
|
||||
77979 924
|
||||
4J848 949
|
||||
J72K4 388
|
||||
77JJ7 741
|
||||
77477 724
|
||||
8558K 444
|
||||
668K9 441
|
||||
448T4 820
|
||||
AQA7A 629
|
||||
Q93J3 732
|
||||
4344J 582
|
||||
JA2JA 623
|
||||
44422 735
|
||||
3444Q 652
|
||||
5TQQQ 929
|
||||
A5T6J 216
|
||||
855JK 808
|
||||
Q7QKK 887
|
||||
3J433 297
|
||||
QJQ77 742
|
||||
6JJ99 492
|
||||
2QA2J 717
|
||||
326AA 704
|
||||
JJJJJ 194
|
||||
3QQQJ 550
|
||||
4J424 445
|
||||
64A53 201
|
||||
9J5AA 718
|
||||
A8747 438
|
||||
33788 989
|
||||
3K399 255
|
||||
T4343 400
|
||||
444J4 382
|
||||
3J3J3 12
|
||||
J7552 228
|
||||
352Q8 812
|
||||
8A833 762
|
||||
89638 940
|
||||
42AQK 577
|
||||
6TT68 326
|
||||
AAQAA 102
|
||||
4A37A 647
|
||||
TAJQ7 991
|
||||
85585 395
|
||||
66366 406
|
||||
9Q9AQ 177
|
||||
K6K6K 785
|
||||
2T228 143
|
||||
K9Q4Q 109
|
||||
T7999 462
|
||||
28294 978
|
||||
2T3J7 515
|
||||
A2AJ6 886
|
||||
AATAA 508
|
||||
KJ73J 86
|
||||
7AQ26 376
|
||||
6K97T 163
|
||||
A4AA6 537
|
||||
JK555 726
|
||||
2TTK5 356
|
||||
98AQ8 601
|
||||
2JJ4K 771
|
||||
K2386 791
|
||||
55888 254
|
||||
555JJ 690
|
||||
799KK 378
|
||||
44A62 786
|
||||
4338K 246
|
||||
338J3 688
|
||||
Q39J2 139
|
||||
22J52 338
|
||||
6KAJ5 933
|
||||
95J98 332
|
||||
67K4J 317
|
||||
4K545 592
|
||||
9Q929 852
|
||||
68872 157
|
||||
59535 548
|
||||
AAKJK 615
|
||||
36K97 758
|
||||
TQQTT 394
|
||||
QQ8QQ 926
|
||||
Q5K9Q 75
|
||||
JJAQ6 637
|
||||
JTJ32 275
|
||||
22TQA 729
|
||||
KQK3K 203
|
||||
43J86 104
|
||||
A6663 11
|
||||
9QJT6 908
|
||||
AT3A6 430
|
||||
56245 827
|
||||
6Q334 604
|
||||
77T7T 841
|
||||
TQK68 668
|
||||
22A2A 773
|
||||
62TK6 892
|
||||
8K898 912
|
||||
Q3Q26 411
|
||||
59678 26
|
||||
43924 451
|
||||
AT3K3 952
|
||||
78788 16
|
||||
24229 71
|
||||
J947T 849
|
||||
5K5Q2 897
|
||||
92332 42
|
||||
TT3T4 32
|
||||
47995 686
|
||||
99T99 749
|
||||
K8QQQ 408
|
||||
82889 846
|
||||
A6A22 93
|
||||
4A76J 590
|
||||
62222 795
|
||||
TTTT8 316
|
||||
7QJ68 696
|
||||
K9J9J 913
|
||||
944JJ 135
|
||||
77757 722
|
||||
65J66 707
|
||||
J7838 4
|
||||
2T895 802
|
||||
2AAAA 325
|
||||
Q855Q 619
|
||||
95223 148
|
||||
87989 706
|
||||
K4A79 96
|
||||
22T86 60
|
||||
A5AAA 43
|
||||
Q6666 339
|
||||
54445 320
|
||||
88JJ8 262
|
||||
36AA9 461
|
||||
6J6JQ 121
|
||||
8K7T6 114
|
||||
9A863 377
|
||||
T7TA8 126
|
||||
JJJTT 415
|
||||
64JTK 289
|
||||
K39K3 757
|
||||
54K89 737
|
||||
73377 372
|
||||
T5389 365
|
||||
4949K 304
|
||||
87787 763
|
||||
KQ33K 367
|
||||
Q75TK 721
|
||||
999QQ 934
|
||||
46647 433
|
||||
88886 803
|
||||
7J2AK 888
|
||||
KKTKT 10
|
||||
222T2 440
|
||||
JA78A 239
|
||||
J6KKK 610
|
||||
AAA8A 166
|
||||
65J62 545
|
||||
57355 455
|
||||
5AQ43 240
|
||||
KKTKJ 59
|
||||
3J337 170
|
||||
J5AK4 872
|
||||
TTQQJ 811
|
||||
TTT7T 627
|
||||
Q8877 588
|
||||
T5368 337
|
||||
A4K3T 662
|
||||
9AAAT 136
|
||||
TJ5K5 402
|
||||
332A8 89
|
||||
T6T6T 280
|
||||
T6985 603
|
||||
966Q9 681
|
||||
88444 458
|
||||
27JJ8 473
|
||||
66669 5
|
||||
4JJ48 881
|
||||
44426 335
|
||||
88A8A 85
|
||||
A5A36 323
|
||||
7QQ57 984
|
||||
464T6 745
|
||||
636QA 155
|
||||
88TAQ 879
|
||||
62874 421
|
||||
535T5 50
|
||||
4Q444 470
|
||||
83432 501
|
||||
24444 586
|
||||
47774 539
|
||||
KJKJ9 53
|
||||
A4355 920
|
||||
QTKKK 290
|
||||
333A3 540
|
||||
TTTAT 965
|
||||
28622 611
|
||||
35QA9 387
|
||||
94J48 797
|
||||
699T8 123
|
||||
66266 422
|
||||
QQ44Q 919
|
||||
8J9KK 974
|
||||
Q9Q76 685
|
||||
66J66 945
|
||||
7ATTJ 334
|
||||
66KTK 904
|
||||
TT484 932
|
||||
52557 792
|
||||
2828J 995
|
||||
JJ9JK 635
|
||||
9745J 55
|
||||
22299 549
|
||||
92QJK 222
|
||||
QAA7J 531
|
||||
7A5J8 358
|
||||
22KK2 544
|
||||
27Q23 273
|
||||
AJ88A 602
|
||||
33A6A 459
|
||||
22T26 232
|
||||
4AATT 174
|
||||
T5342 743
|
||||
55255 979
|
||||
Q88QQ 284
|
||||
222A2 680
|
||||
3QQ33 554
|
||||
K2KQ2 950
|
||||
AAA6J 650
|
||||
5Q333 62
|
||||
7J574 37
|
||||
38KK8 360
|
||||
K2K2K 760
|
||||
4T9TK 463
|
||||
6Q67J 472
|
||||
66686 778
|
||||
44J4J 990
|
||||
Q3993 655
|
||||
77J27 389
|
||||
TTQ27 35
|
||||
277K8 446
|
||||
27J42 428
|
||||
KK4J4 798
|
||||
QTK6J 199
|
||||
4344A 457
|
||||
TQTKQ 977
|
||||
8833J 237
|
||||
99TJK 147
|
||||
6Q9Q4 313
|
||||
TTJKK 98
|
||||
33833 460
|
||||
83T3A 805
|
||||
TJJ22 754
|
||||
5TAJK 632
|
||||
T293Q 191
|
||||
55757 70
|
||||
2TT8T 851
|
||||
7Q575 61
|
||||
22K4K 828
|
||||
8T288 204
|
||||
A8AA8 928
|
||||
KJ68J 697
|
||||
45AAJ 213
|
||||
8QJ75 693
|
||||
23KKK 319
|
||||
Q2Q22 969
|
||||
224J4 821
|
||||
44Q33 583
|
||||
34KJ3 342
|
||||
4JA57 687
|
||||
88T2Q 354
|
||||
989A6 51
|
||||
AAQA9 631
|
||||
5A57J 311
|
||||
62266 77
|
||||
2A84A 132
|
||||
99JKK 234
|
||||
88899 776
|
||||
K3395 6
|
||||
968JA 830
|
||||
6J444 282
|
||||
QA55Q 251
|
||||
39K99 209
|
||||
4A69Q 790
|
||||
77K57 562
|
||||
T5QT5 115
|
||||
56455 134
|
||||
T3TQQ 283
|
||||
46A6A 413
|
||||
62T67 626
|
||||
5757A 371
|
||||
98A47 642
|
||||
2T653 813
|
||||
2888A 322
|
||||
TTQ8T 454
|
||||
93333 876
|
||||
28AAA 580
|
||||
QA63Q 196
|
||||
2Q5QK 184
|
||||
48TTJ 300
|
||||
9JT79 306
|
||||
77T77 930
|
||||
6K666 957
|
||||
6J696 417
|
||||
8J588 703
|
||||
666TJ 673
|
||||
QKKJ7 233
|
||||
577AA 286
|
||||
8J775 781
|
||||
939KK 866
|
||||
34444 558
|
||||
4A4AA 221
|
||||
523QT 630
|
||||
8K259 651
|
||||
2T34K 716
|
||||
6K2T5 8
|
||||
88T83 551
|
||||
Q34AK 142
|
||||
4444T 7
|
||||
JTKT2 621
|
||||
JQJJQ 288
|
||||
38344 599
|
||||
99292 74
|
||||
Q36AA 206
|
||||
52255 871
|
||||
33J92 188
|
||||
K27QA 318
|
||||
66268 513
|
||||
29QA6 613
|
||||
74J74 815
|
||||
5KK6K 895
|
||||
Q9J9Q 511
|
||||
6J33J 158
|
||||
QAQQA 903
|
||||
KTQQQ 305
|
||||
2T759 958
|
||||
A796K 108
|
||||
63266 568
|
||||
KTT7K 691
|
||||
Q5A5A 186
|
||||
47787 267
|
||||
6T6TQ 58
|
||||
56472 891
|
||||
K7953 648
|
||||
99A9A 486
|
||||
Q78K2 249
|
||||
99799 705
|
||||
2K62A 671
|
||||
6TTJT 392
|
||||
4T44T 878
|
||||
44KKK 410
|
||||
KTAQ7 423
|
||||
222Q2 244
|
||||
4J324 401
|
||||
63636 575
|
||||
9K54J 856
|
||||
K7K77 755
|
||||
2K222 160
|
||||
3J644 711
|
||||
3355J 259
|
||||
A9995 664
|
||||
43586 909
|
||||
A4744 574
|
||||
Q7337 309
|
||||
7QQ27 161
|
||||
J8575 374
|
||||
9K99K 636
|
||||
7TJT4 674
|
||||
79888 505
|
||||
K3AJ5 730
|
||||
K4QJK 427
|
||||
99TJ9 263
|
||||
6963T 905
|
||||
3K3J5 474
|
||||
TJ4J8 806
|
||||
5TA38 437
|
||||
866J6 807
|
||||
2T454 44
|
||||
63A4J 865
|
||||
879T8 527
|
||||
A5282 217
|
||||
53737 951
|
||||
44Q9Q 634
|
||||
TTJT9 210
|
||||
QK67K 192
|
||||
33A3A 915
|
||||
88Q8J 125
|
||||
QJ2QQ 256
|
||||
2888J 20
|
||||
2786T 391
|
||||
J27J7 938
|
||||
2AAT5 521
|
||||
544Q4 528
|
||||
A4645 30
|
||||
AKAA2 526
|
||||
44535 835
|
||||
KQ33Q 585
|
||||
66JJ6 818
|
||||
9979J 138
|
||||
TKKKK 661
|
||||
KA225 278
|
||||
Q8888 794
|
||||
K27QK 916
|
||||
83323 494
|
||||
39969 684
|
||||
53359 986
|
||||
77J73 299
|
||||
5TK9J 782
|
||||
222JJ 713
|
||||
3Q383 753
|
||||
46466 298
|
||||
QQQJJ 875
|
||||
Q2394 860
|
||||
QA5QA 988
|
||||
8K5K9 877
|
||||
7Q78Q 68
|
||||
AA6A6 923
|
||||
J565K 29
|
||||
52766 301
|
||||
8598Q 159
|
||||
KKK8K 824
|
||||
8KTQ5 49
|
||||
66486 41
|
||||
45459 842
|
||||
67676 223
|
||||
44283 971
|
||||
22T5T 836
|
||||
88857 164
|
||||
8K492 250
|
||||
939J9 900
|
||||
K5J9K 779
|
||||
5Q692 145
|
||||
8T88T 907
|
||||
55535 31
|
||||
8K822 609
|
||||
9TQK9 67
|
||||
6762J 435
|
||||
T5T5T 780
|
||||
4K442 152
|
||||
657J6 202
|
||||
44494 349
|
||||
78377 925
|
||||
32858 882
|
||||
276Q5 359
|
||||
49526 509
|
||||
2J623 918
|
||||
4222A 914
|
||||
TTTTJ 939
|
||||
255TQ 179
|
||||
KJ42T 898
|
||||
79268 404
|
||||
648K7 189
|
||||
6T7J7 488
|
||||
37Q63 538
|
||||
K366J 469
|
||||
KKK67 156
|
||||
998K6 242
|
||||
QQQ7Q 560
|
||||
33223 231
|
||||
9A999 167
|
||||
28228 961
|
||||
JJK2K 141
|
||||
KKK46 633
|
||||
KT3KA 845
|
||||
A2Q2A 667
|
||||
AA9AA 471
|
||||
A663A 76
|
||||
J966Q 996
|
||||
77J76 127
|
||||
74JJ7 748
|
||||
6QQQ7 303
|
||||
8AJ44 18
|
||||
J2J34 480
|
||||
A289Q 195
|
||||
8335Q 266
|
||||
QQ2Q2 385
|
||||
45K4J 870
|
||||
48JK6 1000
|
||||
T9949 294
|
||||
2585K 272
|
||||
7J77K 809
|
||||
J53KK 657
|
||||
AAAT5 347
|
||||
72J8K 476
|
||||
TQ77T 910
|
||||
29Q7T 767
|
||||
4TTTT 663
|
||||
642AA 292
|
||||
37QQQ 171
|
||||
86Q74 97
|
||||
96J88 34
|
||||
QQ7QJ 618
|
||||
77772 546
|
||||
99559 23
|
||||
AJ666 295
|
||||
AAKAK 964
|
||||
K8Q32 120
|
||||
8QAK5 563
|
||||
A9K9K 45
|
||||
3475K 362
|
||||
95999 739
|
||||
482TQ 36
|
||||
5Q555 452
|
||||
854Q3 894
|
||||
QTQQQ 561
|
||||
55755 99
|
||||
899AJ 235
|
||||
QAQ22 502
|
||||
75353 638
|
||||
K6A87 572
|
||||
J2KT7 366
|
||||
KA39K 144
|
||||
8AAAJ 409
|
||||
66753 766
|
||||
TT626 510
|
||||
AJ999 418
|
||||
42222 983
|
||||
5J577 994
|
||||
262KK 330
|
||||
99992 701
|
||||
4K334 825
|
||||
96J96 536
|
||||
774K7 229
|
||||
A9362 351
|
||||
KA8KJ 982
|
||||
J2552 594
|
||||
TTT2T 810
|
||||
KK24K 640
|
||||
23222 162
|
||||
K36Q7 321
|
||||
QQJTJ 519
|
||||
33384 606
|
||||
5A834 500
|
||||
Q35Q2 379
|
||||
A7888 434
|
||||
595J2 47
|
||||
2K7AA 728
|
||||
AA66J 9
|
||||
AKKKA 373
|
||||
53335 328
|
||||
447J4 514
|
||||
KT7K7 21
|
||||
785TT 253
|
||||
3J783 720
|
||||
7J2AQ 405
|
||||
56Q5Q 447
|
||||
Q647K 94
|
||||
28488 207
|
||||
694T2 714
|
||||
KJKKK 78
|
||||
8T866 130
|
||||
274Q5 672
|
||||
89992 312
|
||||
J2242 350
|
||||
QQ988 899
|
||||
3T3T3 464
|
||||
Q2226 752
|
||||
55222 639
|
||||
7T9T9 271
|
||||
Q8884 832
|
||||
2Q92Q 516
|
||||
46886 817
|
||||
77J7T 829
|
||||
AAA9J 80
|
||||
35J97 555
|
||||
358K7 692
|
||||
ATT6T 678
|
||||
K2465 698
|
||||
A2A59 46
|
||||
58T24 956
|
||||
8ATA2 804
|
||||
AAK3K 751
|
||||
28897 649
|
||||
QAQKQ 854
|
||||
7T776 353
|
||||
26226 426
|
||||
5566T 13
|
||||
8KKTK 857
|
||||
TT44J 512
|
||||
QA29K 172
|
||||
A3AAA 28
|
||||
6TTQT 993
|
||||
8TTJT 922
|
||||
44TT5 942
|
||||
K67QT 699
|
||||
AA77J 927
|
||||
J8JJJ 153
|
||||
4T474 73
|
||||
4QJ8T 475
|
||||
86386 796
|
||||
AA2QK 218
|
||||
86A4K 205
|
||||
78J84 481
|
||||
27K3T 260
|
||||
AAKTQ 641
|
||||
6QQ33 467
|
||||
3K333 279
|
||||
62888 889
|
||||
8Q388 185
|
||||
Q88QK 490
|
||||
9494J 24
|
||||
5T888 783
|
||||
36633 769
|
||||
8T484 258
|
||||
82878 987
|
||||
J3336 643
|
||||
TKKAK 276
|
||||
822AJ 429
|
||||
72727 917
|
||||
254JK 113
|
||||
58888 843
|
||||
AK537 624
|
||||
QQQJ8 659
|
||||
J3366 274
|
||||
ATTJK 468
|
||||
5KKK2 72
|
||||
AAAKA 533
|
||||
5525J 962
|
||||
Q6QJ6 165
|
||||
5K424 607
|
||||
94KK9 66
|
||||
43544 487
|
||||
JJ38T 712
|
||||
6K6KJ 90
|
||||
J7788 936
|
||||
75522 625
|
||||
K6KK9 955
|
||||
AJ7J7 765
|
||||
K7QTQ 407
|
||||
37333 837
|
||||
82J83 523
|
||||
2A526 543
|
||||
99TJJ 238
|
||||
33343 997
|
||||
44446 361
|
||||
8868K 432
|
||||
9J989 82
|
||||
49999 65
|
||||
5TQ78 966
|
||||
AAA48 534
|
||||
76J5J 946
|
||||
J9J25 187
|
||||
5T973 744
|
||||
KK562 816
|
||||
486A4 324
|
||||
569TQ 269
|
||||
3AAT4 343
|
||||
TQTTT 386
|
||||
T56A9 449
|
||||
Q844Q 535
|
||||
T8T25 281
|
||||
QJ5J5 858
|
||||
AKTK8 364
|
||||
33532 315
|
||||
92959 943
|
||||
999A2 198
|
||||
TAQ6J 770
|
||||
29295 616
|
||||
AKA7Q 833
|
||||
55A5A 896
|
||||
KK49A 396
|
||||
ATJ84 197
|
||||
73K87 383
|
||||
6A56A 478
|
||||
7KQT3 775
|
||||
49A93 110
|
||||
2928A 736
|
||||
5JK35 95
|
||||
53JQA 261
|
||||
TT399 443
|
||||
57779 287
|
||||
77296 220
|
||||
3T334 436
|
||||
54K87 756
|
||||
45455 393
|
||||
647J4 868
|
||||
5555J 498
|
||||
K877K 173
|
||||
646JJ 589
|
||||
2JJAJ 960
|
||||
7T5T6 293
|
||||
T3K3T 118
|
||||
TJA63 855
|
||||
7K7AK 403
|
||||
68754 614
|
||||
J5628 822
|
||||
J93TT 245
|
||||
JQJQ9 874
|
||||
32JT2 823
|
||||
7AA77 948
|
||||
AQTQA 56
|
||||
48986 252
|
||||
9K382 116
|
||||
TJ9T9 230
|
||||
Q7632 193
|
||||
998K9 750
|
||||
KK99K 491
|
||||
Q57J2 219
|
||||
T58T9 596
|
||||
66T6T 424
|
||||
QK354 953
|
||||
66652 863
|
||||
23J33 151
|
||||
7J337 653
|
||||
3J247 215
|
||||
A7KJ5 302
|
||||
A555K 654
|
||||
KQ9TT 363
|
||||
99Q49 370
|
||||
2JJ65 587
|
||||
7TAAJ 553
|
||||
KKK68 826
|
||||
77755 850
|
||||
J74T2 959
|
||||
2TQ2Q 954
|
||||
ATJ3Q 344
|
||||
45448 557
|
||||
5JJ5J 738
|
||||
T3278 595
|
||||
465AQ 520
|
||||
97Q82 665
|
||||
99779 183
|
||||
KQJAA 91
|
||||
KQTJT 746
|
||||
Q2542 453
|
||||
99J99 414
|
||||
39T99 368
|
||||
AA4AJ 906
|
||||
8TK28 529
|
||||
5A55J 819
|
||||
TT4T4 853
|
||||
JQAQQ 100
|
||||
57T4A 970
|
||||
AJAA3 834
|
||||
9JTT7 291
|
||||
9AK6A 902
|
||||
96J94 181
|
||||
3J944 593
|
||||
94KQ4 375
|
||||
KKKK2 556
|
||||
88J99 567
|
||||
JAAAJ 840
|
||||
9J9Q9 128
|
||||
74447 81
|
||||
28288 719
|
||||
32K88 225
|
||||
53535 87
|
||||
74555 224
|
||||
6972Q 628
|
||||
7JQJ8 893
|
||||
2T25J 190
|
||||
92226 552
|
||||
Q3QTQ 591
|
||||
A666A 814
|
||||
26247 103
|
||||
4KTKK 981
|
||||
J22K2 133
|
||||
3KKKK 873
|
||||
KJK7K 689
|
||||
6A6K2 985
|
||||
3AAAT 425
|
||||
22J27 839
|
||||
8888T 677
|
||||
6A666 569
|
||||
8887Q 497
|
||||
696Q3 799
|
||||
99646 695
|
||||
KKK5K 69
|
||||
3A332 106
|
||||
Q7TTT 831
|
||||
96622 566
|
||||
4JAA6 564
|
||||
22572 600
|
||||
92AKJ 931
|
||||
TA8AA 848
|
||||
73373 112
|
||||
6666T 182
|
||||
AJKJ7 645
|
||||
7A7AA 496
|
||||
T5555 740
|
||||
J22JJ 967
|
||||
24AAA 146
|
||||
956AQ 412
|
||||
66A9J 329
|
||||
46644 477
|
||||
A9939 105
|
||||
Q5Q5Q 702
|
||||
588Q5 384
|
||||
63AAJ 466
|
||||
254KA 947
|
||||
8KK88 565
|
||||
KQ29T 541
|
||||
36K66 759
|
||||
7JAQQ 431
|
||||
8QTT4 992
|
||||
3333J 731
|
||||
44447 793
|
||||
T355T 489
|
||||
39723 862
|
||||
828QQ 270
|
||||
96999 15
|
||||
333Q2 733
|
||||
T774T 559
|
||||
55K55 1
|
||||
9J955 264
|
||||
K2KQK 682
|
||||
QKQKQ 801
|
||||
222J2 247
|
||||
97J79 3
|
||||
42TT3 499
|
||||
2KQ69 129
|
||||
4764T 450
|
||||
72K2K 83
|
||||
3Q334 644
|
||||
TTT88 348
|
||||
2Q223 310
|
||||
J43A3 880
|
||||
J4229 64
|
||||
4QJ8A 17
|
||||
43434 285
|
||||
92222 772
|
||||
T59K6 448
|
||||
66674 248
|
||||
34334 241
|
||||
JK529 547
|
||||
T7TT3 517
|
||||
22QJQ 117
|
||||
96J6J 861
|
||||
QTJT4 101
|
||||
Q444J 307
|
||||
T2Q8K 357
|
||||
93T24 789
|
||||
T7K57 398
|
||||
2K94A 111
|
||||
9J942 200
|
||||
T7J8K 646
|
||||
55665 980
|
||||
56555 169
|
||||
79777 149
|
||||
82A93 710
|
||||
Q989Q 226
|
||||
J2T55 542
|
||||
763K2 723
|
||||
QQQJQ 867
|
||||
QQQQA 506
|
||||
J7777 154
|
||||
@@ -0,0 +1,247 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"sort"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 uint64
|
||||
valuePT2 uint64
|
||||
}
|
||||
|
||||
func run(scan *bufio.Scanner) (result, error) {
|
||||
var game Game
|
||||
|
||||
for scan.Scan() {
|
||||
var cards string
|
||||
var bid int
|
||||
_, err := fmt.Sscanf(scan.Text(), "%s %d", &cards, &bid)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println("cards", cards, "bid", bid)
|
||||
game.plays = append(game.plays, Play{bid, []rune(cards), &game})
|
||||
}
|
||||
|
||||
game.cardOrder = getOrder(cardTypes1)
|
||||
product1 := calcProduct(game)
|
||||
|
||||
game.cardOrder = getOrder(cardTypes2)
|
||||
game.wildCard = 'J'
|
||||
product2 := calcProduct(game)
|
||||
|
||||
return result{product1, product2}, nil
|
||||
}
|
||||
|
||||
var cardTypes1 = []rune{'A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4', '3', '2'}
|
||||
var cardTypes2 = []rune{'A', 'K', 'Q', 'T', '9', '8', '7', '6', '5', '4', '3', '2', 'J'}
|
||||
|
||||
func calcProduct(game Game) uint64 {
|
||||
sort.Sort(game.plays)
|
||||
|
||||
var product uint64
|
||||
for i, play := range game.plays {
|
||||
rank := i + 1
|
||||
fmt.Printf("play %d %s %d %s %x\n", rank, string(play.hand), play.bid, play.HandType(), play.HandStrength())
|
||||
product += uint64(play.bid * rank)
|
||||
}
|
||||
return product
|
||||
}
|
||||
|
||||
func getOrder(cardTypes []rune) map[rune]int {
|
||||
cardOrder := make(map[rune]int, len(cardTypes))
|
||||
for i, r := range cardTypes {
|
||||
cardOrder[r] = len(cardTypes) - i
|
||||
}
|
||||
return cardOrder
|
||||
}
|
||||
|
||||
type Game struct {
|
||||
plays Plays
|
||||
cardOrder map[rune]int
|
||||
wildCard rune
|
||||
}
|
||||
|
||||
type Play struct {
|
||||
bid int
|
||||
hand Hand
|
||||
game *Game
|
||||
}
|
||||
|
||||
type Hand []rune
|
||||
|
||||
func (h Play) HandType() string {
|
||||
hc, _ := h.HighCard()
|
||||
switch {
|
||||
case h.IsFiveOfKind():
|
||||
return "5K-" + string(hc)
|
||||
case h.IsFourOfKind():
|
||||
return "4K-" + string(hc)
|
||||
case h.IsFullHouse():
|
||||
return "FH-" + string(hc)
|
||||
case h.IsThreeOfKind():
|
||||
return "3K-" + string(hc)
|
||||
case h.IsTwoPair():
|
||||
return "2P-" + string(hc)
|
||||
case h.IsOnePair():
|
||||
return "1P-" + string(hc)
|
||||
case h.IsHighCard():
|
||||
return "HC-" + string(hc)
|
||||
}
|
||||
return "Uno"
|
||||
}
|
||||
|
||||
func (h Play) HandStrength() int {
|
||||
_, v := h.HighCard()
|
||||
switch {
|
||||
case h.IsFiveOfKind():
|
||||
return 0x700000 | v
|
||||
case h.IsFourOfKind():
|
||||
return 0x600000 | v
|
||||
case h.IsFullHouse():
|
||||
return 0x500000 | v
|
||||
case h.IsThreeOfKind():
|
||||
return 0x400000 | v
|
||||
case h.IsTwoPair():
|
||||
return 0x300000 | v
|
||||
case h.IsOnePair():
|
||||
return 0x200000 | v
|
||||
case h.IsHighCard():
|
||||
return 0x100000 | v
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (h Play) IsFiveOfKind() bool {
|
||||
_, _, _, _, has5 := h.game.hasSame(h.hand)
|
||||
return has5
|
||||
}
|
||||
func (h Play) IsFourOfKind() bool {
|
||||
_, _, _, has4, _ := h.game.hasSame(h.hand)
|
||||
return has4
|
||||
}
|
||||
func (h Play) IsFullHouse() bool {
|
||||
_, has2, has3, _, _ := h.game.hasSame(h.hand)
|
||||
return has3 && has2
|
||||
}
|
||||
func (h Play) IsThreeOfKind() bool {
|
||||
has1, _, has3, _, _ := h.game.hasSame(h.hand)
|
||||
return has3 && has1
|
||||
}
|
||||
func (h Play) IsTwoPair() bool {
|
||||
_, has2, has3, _, _ := h.game.hasSame(h.hand)
|
||||
return !has3 && has2 && h.game.pairs(h.hand) == 2
|
||||
}
|
||||
func (h Play) IsOnePair() bool {
|
||||
_, has2, has3, _, _ := h.game.hasSame(h.hand)
|
||||
return !has3 && has2 && h.game.pairs(h.hand) == 1
|
||||
}
|
||||
func (h Play) IsHighCard() bool {
|
||||
has1, has2, has3, has4, _ := h.game.hasSame(h.hand)
|
||||
return has1 && !has2 && !has3 && !has4
|
||||
}
|
||||
func (h Play) HighCard() (rune, int) {
|
||||
var i int
|
||||
pairs := make(Pairs, 5)
|
||||
cnt := h.game.Counts(h.hand)
|
||||
for r, c := range cnt {
|
||||
pairs[i].c = c
|
||||
pairs[i].r = r
|
||||
pairs[i].o = h.game.cardOrder[r]
|
||||
|
||||
i++
|
||||
}
|
||||
|
||||
sort.Sort(sort.Reverse(pairs))
|
||||
|
||||
value := 0
|
||||
for i, r := range h.hand {
|
||||
if r == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
value |= h.game.cardOrder[r] << (4 * (4 - i))
|
||||
}
|
||||
|
||||
return pairs[0].r, value
|
||||
}
|
||||
|
||||
type Pairs []struct {
|
||||
r rune
|
||||
c int
|
||||
o int
|
||||
}
|
||||
|
||||
func (p Pairs) Len() int { return len(p) }
|
||||
func (p Pairs) Less(i, j int) bool {
|
||||
if p[i].c == p[j].c {
|
||||
return p[i].o < p[j].o
|
||||
}
|
||||
return p[i].c < p[j].c
|
||||
}
|
||||
func (p Pairs) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
|
||||
|
||||
type Plays []Play
|
||||
|
||||
func (p Plays) Len() int { return len(p) }
|
||||
func (p Plays) Less(i, j int) bool { return p[i].HandStrength() < p[j].HandStrength() }
|
||||
func (p Plays) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
|
||||
|
||||
func (g *Game) Counts(cards []rune) map[rune]int {
|
||||
m := make(map[rune]int, len(g.cardOrder))
|
||||
for _, c := range cards {
|
||||
m[c]++
|
||||
}
|
||||
if g.wildCard != 0 && m[g.wildCard] > 0 {
|
||||
var maxK rune
|
||||
var maxV int
|
||||
for k, v := range m {
|
||||
if k != g.wildCard && v > maxV {
|
||||
maxK, maxV = k, v
|
||||
}
|
||||
}
|
||||
if maxK != 0 {
|
||||
m[maxK] += m[g.wildCard]
|
||||
delete(m, g.wildCard)
|
||||
}
|
||||
}
|
||||
return m
|
||||
}
|
||||
func (g *Game) hasSame(cards []rune) (has1, has2, has3, has4, has5 bool) {
|
||||
cnt := g.Counts(cards)
|
||||
for _, c := range cnt {
|
||||
switch c {
|
||||
case 1:
|
||||
has1 = true
|
||||
|
||||
case 2:
|
||||
has2 = true
|
||||
|
||||
case 3:
|
||||
has3 = true
|
||||
|
||||
case 4:
|
||||
has4 = true
|
||||
|
||||
case 5:
|
||||
has5 = true
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
func (g *Game) pairs(cards []rune) int {
|
||||
pairs := 0
|
||||
for _, n := range g.Counts(cards) {
|
||||
if n == 2 {
|
||||
pairs++
|
||||
}
|
||||
}
|
||||
return pairs
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
// AKQJT98765432
|
||||
// dcba987654321
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestHands(t *testing.T) {
|
||||
is := is.New(t)
|
||||
|
||||
var game Game
|
||||
game.cardOrder = getOrder(cardTypes1)
|
||||
|
||||
h := Play{0, []rune("AAA23"), &game}
|
||||
is.Equal(h.HandType(), "3K-A")
|
||||
|
||||
h = Play{0, []rune("JJJJJ"), &game}
|
||||
is.Equal(h.HandType(), "5K-J")
|
||||
is.Equal(fmt.Sprintf("%x", h.HandStrength()), "7aaaaa")
|
||||
|
||||
h = Play{0, []rune("KKKKJ"), &game}
|
||||
is.Equal(h.HandType(), "4K-K")
|
||||
is.Equal(fmt.Sprintf("%x", h.HandStrength()), "6cccca")
|
||||
|
||||
h = Play{0, []rune("QQQJA"), &game}
|
||||
is.Equal(h.HandType(), "3K-Q")
|
||||
is.Equal(fmt.Sprintf("%x", h.HandStrength()), "4bbbad")
|
||||
}
|
||||
|
||||
func TestPower(t *testing.T) {
|
||||
for i := 1; i <= 13; i++ {
|
||||
for j := 100; j < 800; j += 100 {
|
||||
t.Log(i, j, i+j)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
r, err := run(scan)
|
||||
is.NoErr(err)
|
||||
is.Equal(r.valuePT1, uint64(6440))
|
||||
is.Equal(r.valuePT2, uint64(5905))
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
r, err := run(scan)
|
||||
is.NoErr(err)
|
||||
t.Log("score1", r.valuePT1)
|
||||
is.Equal(r.valuePT1, uint64(248559379))
|
||||
|
||||
t.Log("score2", r.valuePT2)
|
||||
is.Equal(r.valuePT2, uint64(249631254))
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
RL
|
||||
|
||||
AAA = (BBB, CCC)
|
||||
BBB = (DDD, EEE)
|
||||
CCC = (ZZZ, GGG)
|
||||
DDD = (DDD, DDD)
|
||||
EEE = (EEE, EEE)
|
||||
GGG = (GGG, GGG)
|
||||
ZZZ = (ZZZ, ZZZ)
|
||||
@@ -0,0 +1,5 @@
|
||||
LLR
|
||||
|
||||
AAA = (BBB, BBB)
|
||||
BBB = (AAA, ZZZ)
|
||||
ZZZ = (ZZZ, ZZZ)
|
||||
@@ -0,0 +1,10 @@
|
||||
LR
|
||||
|
||||
11A = (11B, XXX)
|
||||
11B = (XXX, 11Z)
|
||||
11Z = (11B, XXX)
|
||||
22A = (22B, XXX)
|
||||
22B = (22C, 22C)
|
||||
22C = (22Z, 22Z)
|
||||
22Z = (22B, 22B)
|
||||
XXX = (XXX, XXX)
|
||||
@@ -0,0 +1,708 @@
|
||||
LLLLRLRLRRLRRRLRRLRLRRLRLLRRRLRRLRRRLRLLLRLRRLRLLRRRLRRLRLRRLLRRRLRRRLRLRRLRRRLRRLRRLLRRRLLLLRRLRRLRRLRRRLLLRLRLRLRRLRRRLRLRRRLRLRRRLRRLRRLLRRLLRLRRRLRLRRRLLLRLRRRLRLRRRLRRLRLRRLRRRLRRRLRRLLLRRRLRRLRRLRRLRRRLLLRRLRLRRRLLLLRRRLRRLRRRLLRLRLRRLLRRRLLRLRLRLRRLRRLRRRLRRLLRLRRLRRLLLLRRLRLRRLLRRLLRRLRRLRRRLLLRRRR
|
||||
|
||||
BRR = (LVC, FSJ)
|
||||
BHX = (GMG, QTN)
|
||||
TJD = (HQF, PBJ)
|
||||
JGN = (JXR, DGK)
|
||||
NMC = (VPC, CRF)
|
||||
DVJ = (KMM, DFJ)
|
||||
LML = (MTG, KNX)
|
||||
JKL = (LRX, FRD)
|
||||
FJR = (MHX, SBX)
|
||||
LMC = (QNB, QCK)
|
||||
LJF = (KCJ, HCT)
|
||||
KTL = (XTG, NGM)
|
||||
GJB = (KTQ, KTQ)
|
||||
BXR = (TDR, KMK)
|
||||
GKB = (VXT, NQR)
|
||||
PJL = (FPL, TFX)
|
||||
LNZ = (CJC, DQL)
|
||||
KCG = (KDL, LMF)
|
||||
PGG = (NDL, XXC)
|
||||
PMS = (XQM, DFG)
|
||||
CJF = (MCG, RTJ)
|
||||
JTH = (PGS, SGZ)
|
||||
QBS = (JSC, KMT)
|
||||
DQL = (KRR, PBL)
|
||||
HSF = (SNP, KJR)
|
||||
XVQ = (VQR, HSX)
|
||||
QKF = (PBT, XLC)
|
||||
DNA = (DQL, CJC)
|
||||
LNF = (RVC, TJD)
|
||||
MKT = (LDX, CGC)
|
||||
BXP = (RGX, TTR)
|
||||
SBX = (PGT, JGN)
|
||||
JQK = (HDQ, BHQ)
|
||||
MHL = (TLX, JDN)
|
||||
BBD = (QNJ, BRM)
|
||||
MTT = (BVK, DXB)
|
||||
FVR = (VLN, PRV)
|
||||
RVC = (HQF, PBJ)
|
||||
LDX = (LRS, KBV)
|
||||
BKF = (PXH, TNB)
|
||||
BRM = (XTV, NGH)
|
||||
DDL = (JNG, SFF)
|
||||
BBT = (BQJ, BCN)
|
||||
GPK = (CVK, DDL)
|
||||
TLX = (BDN, XNT)
|
||||
JHL = (BRX, QBT)
|
||||
NTL = (HSR, DJD)
|
||||
XBH = (PJX, JQK)
|
||||
PPF = (LCT, BJL)
|
||||
SFF = (FVR, NFG)
|
||||
HNA = (CTC, BSG)
|
||||
CNG = (DXM, QFN)
|
||||
GML = (NRD, TVN)
|
||||
RHH = (NBT, LJH)
|
||||
LDM = (DDN, TRN)
|
||||
XSK = (PLB, NVJ)
|
||||
NCQ = (MDN, XGT)
|
||||
FCQ = (HCT, KCJ)
|
||||
DRC = (JKL, JNM)
|
||||
SHR = (KLX, VLH)
|
||||
FTP = (DRN, DKV)
|
||||
QBF = (GVS, NXK)
|
||||
GXK = (XDK, LVF)
|
||||
KMK = (VXV, XCS)
|
||||
PKK = (QNJ, BRM)
|
||||
NJH = (TKL, PQK)
|
||||
BRX = (MNM, HVC)
|
||||
VTD = (BJK, LML)
|
||||
QVX = (DVJ, DSF)
|
||||
GRM = (JCV, SQB)
|
||||
RDQ = (HCG, XMB)
|
||||
RGX = (FCN, TPD)
|
||||
HBH = (FPR, DHX)
|
||||
PHM = (JSP, RCR)
|
||||
NBT = (FRG, CMJ)
|
||||
XRH = (HCB, FBM)
|
||||
GMR = (FDJ, NJD)
|
||||
MVG = (RDJ, QSD)
|
||||
BDL = (JSB, TFN)
|
||||
VXT = (MBM, JND)
|
||||
TXC = (QDG, LTV)
|
||||
SRL = (RRX, NDS)
|
||||
SGN = (MPL, CBB)
|
||||
HVH = (SLJ, CBC)
|
||||
VPC = (CCG, QSJ)
|
||||
KCJ = (CKC, TTD)
|
||||
RLT = (LLT, VVL)
|
||||
RXV = (KXQ, VBR)
|
||||
FQS = (STP, BHX)
|
||||
SGC = (RLJ, QGB)
|
||||
XLX = (HRG, DGV)
|
||||
XKV = (QQB, TNQ)
|
||||
SLJ = (GTB, MPF)
|
||||
PKV = (CQN, THS)
|
||||
RPP = (QFT, TNK)
|
||||
DKL = (MFC, MFC)
|
||||
BCG = (FXM, GPR)
|
||||
RFV = (DRC, MPD)
|
||||
VVC = (FGN, CVL)
|
||||
HQB = (QNT, VVC)
|
||||
RRP = (VVC, QNT)
|
||||
TRS = (RCM, GHN)
|
||||
QBT = (HVC, MNM)
|
||||
XKS = (SCC, VXX)
|
||||
TPS = (FMH, KFN)
|
||||
MTS = (VXT, NQR)
|
||||
FXM = (LDM, FQT)
|
||||
LNB = (XJV, SJN)
|
||||
HVF = (QXC, RBH)
|
||||
LSG = (QHM, TSM)
|
||||
JMP = (HBH, NQK)
|
||||
NGM = (KDP, HHP)
|
||||
HCG = (SLR, TSC)
|
||||
HGX = (DFG, XQM)
|
||||
DLG = (BVN, GMM)
|
||||
DJD = (VGP, VML)
|
||||
HBT = (XKL, JBQ)
|
||||
NVJ = (GKX, PKS)
|
||||
CPS = (PKJ, RSV)
|
||||
SKN = (NBT, LJH)
|
||||
CCK = (TTJ, SLV)
|
||||
DXM = (CBN, BXR)
|
||||
RJD = (XJH, SKH)
|
||||
RDJ = (CNF, TTG)
|
||||
PKJ = (BCM, XKC)
|
||||
FQL = (SRV, DFC)
|
||||
KDS = (MFB, CLQ)
|
||||
QKR = (VGD, CXK)
|
||||
XXC = (NFD, SPS)
|
||||
PSQ = (NJH, BLR)
|
||||
BLR = (PQK, TKL)
|
||||
LMX = (DGV, HRG)
|
||||
GCK = (CSR, CSR)
|
||||
GKJ = (JHL, PNN)
|
||||
GVS = (TLN, LJX)
|
||||
FPR = (JCH, GKD)
|
||||
VQV = (DGB, GGN)
|
||||
CPF = (VMH, JQQ)
|
||||
GKD = (SGF, PHM)
|
||||
JNM = (LRX, FRD)
|
||||
CXV = (LNF, HGF)
|
||||
TNK = (RRD, HKC)
|
||||
DXX = (LMC, ZZZ)
|
||||
DGG = (PPF, TRR)
|
||||
MLH = (TVL, PBR)
|
||||
LBC = (LJL, FTR)
|
||||
FVQ = (TBC, LKB)
|
||||
LTF = (CBC, SLJ)
|
||||
TVH = (XMS, GJS)
|
||||
SFB = (TTJ, SLV)
|
||||
LVF = (MBT, SJB)
|
||||
XPP = (QDM, PJL)
|
||||
BVK = (RPV, JMP)
|
||||
VGD = (MRX, FJR)
|
||||
FRD = (XBH, CDN)
|
||||
LKM = (CMF, XNS)
|
||||
TCJ = (MMS, PGG)
|
||||
DHQ = (MTT, BKS)
|
||||
HDQ = (GPH, XKH)
|
||||
KTJ = (QQT, MKR)
|
||||
NMQ = (VFK, VSD)
|
||||
RSK = (QDM, PJL)
|
||||
XQC = (KFP, HVB)
|
||||
LQN = (NGM, XTG)
|
||||
TKG = (XDQ, XDQ)
|
||||
KBB = (VQR, HSX)
|
||||
TQQ = (QDG, LTV)
|
||||
SQN = (TDQ, XKV)
|
||||
TSM = (TSH, MRP)
|
||||
KPH = (THS, CQN)
|
||||
HCB = (DVL, RTV)
|
||||
MLR = (GHT, NSN)
|
||||
BFM = (GCK, SLX)
|
||||
GXQ = (QKM, JJL)
|
||||
GNF = (HRQ, XTK)
|
||||
TRR = (BJL, LCT)
|
||||
AAA = (QNB, QCK)
|
||||
SDL = (KJX, LSN)
|
||||
DKV = (KBB, XVQ)
|
||||
RMR = (MQR, CPR)
|
||||
MQC = (CBV, SRP)
|
||||
PRV = (KDS, FBX)
|
||||
GTB = (CCK, SFB)
|
||||
SNP = (PXX, SHR)
|
||||
NTR = (VHT, KXK)
|
||||
MKJ = (DDL, CVK)
|
||||
LSQ = (HSF, RMN)
|
||||
TTJ = (CBH, QKF)
|
||||
DNH = (MVG, JCJ)
|
||||
KMM = (KPH, PKV)
|
||||
NTT = (RQK, PFK)
|
||||
QMF = (BFM, PJB)
|
||||
RJB = (RBH, QXC)
|
||||
LRS = (MJT, BVM)
|
||||
CJG = (RMR, BMN)
|
||||
DVQ = (GXM, DDH)
|
||||
MFC = (LMC, LMC)
|
||||
XTG = (HHP, KDP)
|
||||
HKB = (RDQ, TVT)
|
||||
PKS = (JQM, DGG)
|
||||
BJK = (KNX, MTG)
|
||||
TVT = (XMB, HCG)
|
||||
JNR = (JHG, JLN)
|
||||
VFK = (XKS, QBH)
|
||||
NPC = (PKK, BBD)
|
||||
PXX = (KLX, VLH)
|
||||
XLC = (NST, BXP)
|
||||
CBB = (LMX, XLX)
|
||||
KLX = (MSH, LCF)
|
||||
CLQ = (JNF, JNC)
|
||||
TSS = (MKR, QQT)
|
||||
SSS = (RMQ, RCS)
|
||||
QSD = (TTG, CNF)
|
||||
NHG = (DVQ, VNB)
|
||||
CTC = (VCN, RJD)
|
||||
THS = (QRH, GPT)
|
||||
KDR = (RTK, GKJ)
|
||||
NTD = (CGG, SPN)
|
||||
GHP = (NCQ, FCD)
|
||||
KXQ = (RLS, VRM)
|
||||
GNV = (BQJ, BCN)
|
||||
DXQ = (QHC, FXN)
|
||||
RQB = (FVQ, TNF)
|
||||
CNF = (TXC, TQQ)
|
||||
BGB = (QQS, LRV)
|
||||
ZZZ = (QCK, QNB)
|
||||
NFM = (MGV, VTD)
|
||||
MFD = (DBF, KSN)
|
||||
NST = (RGX, TTR)
|
||||
XJV = (LGL, LGL)
|
||||
TRQ = (TVH, KJL)
|
||||
PPV = (CJP, VHH)
|
||||
DNV = (DBM, VGJ)
|
||||
JBQ = (MHL, RFN)
|
||||
HRG = (JFD, VQP)
|
||||
RMB = (JKJ, JGJ)
|
||||
RGQ = (RSK, XPP)
|
||||
KHF = (TJG, KPX)
|
||||
HPZ = (BSG, CTC)
|
||||
LFJ = (TSN, NMB)
|
||||
MBT = (XRC, PJR)
|
||||
QFN = (CBN, BXR)
|
||||
QSJ = (BRS, BKF)
|
||||
XJH = (RSF, VNP)
|
||||
GST = (LVF, XDK)
|
||||
DDN = (NMS, RLT)
|
||||
CXK = (FJR, MRX)
|
||||
PHH = (FPB, TCJ)
|
||||
XHV = (KTJ, TSS)
|
||||
VHT = (NPC, DMG)
|
||||
RNL = (NHG, DVN)
|
||||
TKL = (KPN, FKX)
|
||||
DGB = (GPJ, QMF)
|
||||
PNN = (QBT, BRX)
|
||||
TBC = (NTR, FKG)
|
||||
PGS = (QDT, JQL)
|
||||
SLX = (CSR, LNB)
|
||||
BVV = (LVC, FSJ)
|
||||
JQL = (MLH, GSC)
|
||||
PXH = (CJF, CKM)
|
||||
LHM = (DSF, DVJ)
|
||||
NND = (NTD, DTB)
|
||||
MFB = (JNF, JNC)
|
||||
TTR = (FCN, TPD)
|
||||
HRQ = (JTD, JTD)
|
||||
SLR = (TXT, JSN)
|
||||
VQP = (XPK, XGB)
|
||||
QHM = (MRP, TSH)
|
||||
RTJ = (PXB, TLP)
|
||||
QQT = (RRL, QHQ)
|
||||
CSR = (XJV, XJV)
|
||||
CJP = (CJG, HQQ)
|
||||
RMC = (MPD, DRC)
|
||||
XMS = (LXX, GPN)
|
||||
HSR = (VGP, VML)
|
||||
MNM = (VSS, QXR)
|
||||
SJN = (LGL, LNZ)
|
||||
KBV = (MJT, BVM)
|
||||
KFN = (NRC, VSG)
|
||||
JNC = (RHR, LFJ)
|
||||
MPF = (SFB, CCK)
|
||||
QVK = (GNK, BCG)
|
||||
NJD = (KCG, LDB)
|
||||
DBM = (MJG, MFD)
|
||||
NKF = (GGN, DGB)
|
||||
BCN = (JNR, MHK)
|
||||
GNK = (FXM, GPR)
|
||||
KMT = (HFC, CPS)
|
||||
FDJ = (KCG, LDB)
|
||||
LVD = (PHH, QDR)
|
||||
FCN = (VDP, MQC)
|
||||
QQB = (GJB, GJB)
|
||||
PLF = (JNL, HBT)
|
||||
QDM = (FPL, TFX)
|
||||
GXM = (CLD, NNL)
|
||||
MRV = (BCG, GNK)
|
||||
LKB = (NTR, FKG)
|
||||
TTG = (TQQ, TXC)
|
||||
GFD = (VSD, VFK)
|
||||
RCS = (KQQ, DNH)
|
||||
QXR = (FCQ, LJF)
|
||||
HMQ = (RJQ, FQL)
|
||||
VCN = (SKH, XJH)
|
||||
QQG = (HSR, DJD)
|
||||
HGF = (RVC, TJD)
|
||||
XMB = (TSC, SLR)
|
||||
PJB = (GCK, SLX)
|
||||
HFC = (RSV, PKJ)
|
||||
JJL = (GXK, GST)
|
||||
QTN = (JLV, SGX)
|
||||
KDP = (GNV, BBT)
|
||||
VRF = (TFN, JSB)
|
||||
GPN = (CPF, SRQ)
|
||||
TSC = (TXT, JSN)
|
||||
CRF = (QSJ, CCG)
|
||||
TNF = (TBC, LKB)
|
||||
VLH = (LCF, MSH)
|
||||
BCV = (JSC, KMT)
|
||||
NNL = (KVX, FQS)
|
||||
RVT = (HCB, FBM)
|
||||
QHC = (QKV, NCJ)
|
||||
VDP = (CBV, SRP)
|
||||
CBV = (VQV, NKF)
|
||||
CMF = (XHV, TPR)
|
||||
TRN = (RLT, NMS)
|
||||
JSB = (XTH, TRS)
|
||||
CFC = (TVT, RDQ)
|
||||
KDL = (TKG, TKG)
|
||||
TTD = (BBC, GHP)
|
||||
KJR = (PXX, SHR)
|
||||
MTV = (GVS, NXK)
|
||||
BVN = (KDR, PVP)
|
||||
DXB = (RPV, JMP)
|
||||
FSJ = (QPQ, GML)
|
||||
PBJ = (LQN, KTL)
|
||||
PXB = (BDL, VRF)
|
||||
NDS = (BGB, NGX)
|
||||
CBN = (KMK, TDR)
|
||||
NFG = (VLN, PRV)
|
||||
JTD = (PGS, PGS)
|
||||
MKR = (QHQ, RRL)
|
||||
JSN = (RFV, RMC)
|
||||
CVK = (SFF, JNG)
|
||||
FGN = (BVQ, XQC)
|
||||
HHF = (RPS, QQF)
|
||||
PLB = (PKS, GKX)
|
||||
BJB = (QMC, GPG)
|
||||
STP = (QTN, GMG)
|
||||
DGK = (RKK, BVT)
|
||||
JJM = (VGD, CXK)
|
||||
LTS = (QPN, BCL)
|
||||
LVC = (QPQ, GML)
|
||||
QNB = (GJN, RVB)
|
||||
RBH = (HMQ, HPS)
|
||||
NQK = (DHX, FPR)
|
||||
MRP = (BDT, SGN)
|
||||
JQM = (TRR, PPF)
|
||||
TSH = (BDT, SGN)
|
||||
JLN = (JCC, FCB)
|
||||
BRP = (LDX, CGC)
|
||||
SJC = (HRQ, HRQ)
|
||||
LJL = (BVB, PPV)
|
||||
SPN = (SDL, VHM)
|
||||
SDM = (DDF, LTS)
|
||||
LJH = (FRG, CMJ)
|
||||
CMG = (MKD, JGT)
|
||||
GPR = (LDM, FQT)
|
||||
QPQ = (NRD, TVN)
|
||||
JCJ = (RDJ, QSD)
|
||||
HSX = (CMG, SHF)
|
||||
VML = (RMB, MHC)
|
||||
DHX = (JCH, GKD)
|
||||
MTG = (FPX, SPD)
|
||||
BDT = (MPL, CBB)
|
||||
CJC = (PBL, KRR)
|
||||
JLS = (LJL, FTR)
|
||||
HQF = (LQN, KTL)
|
||||
HQQ = (RMR, BMN)
|
||||
QMC = (RBP, PXD)
|
||||
RPV = (HBH, NQK)
|
||||
JHG = (JCC, FCB)
|
||||
TPD = (VDP, MQC)
|
||||
BHQ = (XKH, GPH)
|
||||
XKC = (HDD, GXR)
|
||||
RPS = (KJP, KJP)
|
||||
QNT = (CVL, FGN)
|
||||
JSC = (HFC, CPS)
|
||||
KXG = (DTB, NTD)
|
||||
CKM = (RTJ, MCG)
|
||||
FTD = (KPX, TJG)
|
||||
VSD = (XKS, QBH)
|
||||
MCG = (TLP, PXB)
|
||||
XKH = (HLP, CXV)
|
||||
TNB = (CJF, CKM)
|
||||
XTH = (RCM, GHN)
|
||||
DFN = (GMR, DSS)
|
||||
LMF = (TKG, XST)
|
||||
FMH = (NRC, VSG)
|
||||
XCS = (JTS, GRM)
|
||||
GVF = (NDS, RRX)
|
||||
CXM = (HGX, PMS)
|
||||
VRM = (XJT, DXQ)
|
||||
JLV = (QVX, LHM)
|
||||
JCH = (PHM, SGF)
|
||||
NMS = (VVL, LLT)
|
||||
BHS = (XJR, LKM)
|
||||
CKC = (BBC, GHP)
|
||||
CBH = (XLC, PBT)
|
||||
PRL = (QFT, TNK)
|
||||
SDF = (VTD, MGV)
|
||||
RVB = (MLR, XHT)
|
||||
GPT = (PLF, MJX)
|
||||
KRR = (RVT, XRH)
|
||||
GXR = (BVV, BRR)
|
||||
NSN = (RGQ, JMQ)
|
||||
KJX = (TCR, MSL)
|
||||
PHL = (TSM, QHM)
|
||||
MQR = (MTS, GKB)
|
||||
XDK = (SJB, MBT)
|
||||
NRC = (DGN, BJB)
|
||||
JQQ = (LBC, JLS)
|
||||
JTS = (JCV, SQB)
|
||||
RLJ = (JJM, QKR)
|
||||
DTB = (CGG, SPN)
|
||||
BRS = (PXH, TNB)
|
||||
SRV = (SPC, DNV)
|
||||
MNP = (JJL, QKM)
|
||||
KTQ = (XSK, XSK)
|
||||
FPX = (SJC, GNF)
|
||||
VBR = (VRM, RLS)
|
||||
KSN = (HQB, RRP)
|
||||
RJQ = (SRV, DFC)
|
||||
BKS = (BVK, DXB)
|
||||
BVB = (VHH, CJP)
|
||||
XTK = (JTD, JTH)
|
||||
PBT = (BXP, NST)
|
||||
PVP = (RTK, GKJ)
|
||||
QPN = (BCV, QBS)
|
||||
QQF = (KJP, HPZ)
|
||||
QRH = (PLF, MJX)
|
||||
GHS = (BKN, TPS)
|
||||
RCM = (MNP, GXQ)
|
||||
DCT = (DDF, LTS)
|
||||
JLC = (HGX, PMS)
|
||||
VNC = (XSK, CXZ)
|
||||
BQJ = (MHK, JNR)
|
||||
SHF = (JGT, MKD)
|
||||
FXN = (QKV, NCJ)
|
||||
FPB = (PGG, MMS)
|
||||
JGJ = (KXG, NND)
|
||||
VBM = (PSQ, QKN)
|
||||
GKX = (DGG, JQM)
|
||||
DSF = (KMM, DFJ)
|
||||
CMJ = (GPK, MKJ)
|
||||
NCJ = (SDM, DCT)
|
||||
MKD = (GQG, DHQ)
|
||||
CFZ = (RQB, SHH)
|
||||
RQK = (DKL, DKL)
|
||||
XGT = (HPQ, VRQ)
|
||||
SRP = (NKF, VQV)
|
||||
BSG = (VCN, RJD)
|
||||
XRC = (NFM, SDF)
|
||||
DVL = (SRL, GVF)
|
||||
HVB = (HXS, MLD)
|
||||
MPD = (JNM, JKL)
|
||||
JSP = (PHL, LSG)
|
||||
BCR = (XJR, LKM)
|
||||
PQK = (KPN, FKX)
|
||||
FCD = (XGT, MDN)
|
||||
MDL = (JLC, CXM)
|
||||
FBX = (CLQ, MFB)
|
||||
VNP = (RGM, GHS)
|
||||
HMK = (RMN, HSF)
|
||||
SJB = (PJR, XRC)
|
||||
JFD = (XPK, XGB)
|
||||
HHP = (GNV, BBT)
|
||||
TVN = (VBM, KJN)
|
||||
DMG = (PKK, BBD)
|
||||
RGM = (BKN, TPS)
|
||||
TRF = (KXQ, VBR)
|
||||
XHT = (NSN, GHT)
|
||||
DFJ = (KPH, PKV)
|
||||
KJP = (CTC, BSG)
|
||||
LLT = (NTS, LVD)
|
||||
RMN = (SNP, KJR)
|
||||
GSC = (TVL, PBR)
|
||||
RSV = (XKC, BCM)
|
||||
TLP = (VRF, BDL)
|
||||
GGN = (GPJ, QMF)
|
||||
XJR = (CMF, XNS)
|
||||
GQG = (BKS, MTT)
|
||||
JPN = (MRV, QVK)
|
||||
RSF = (RGM, GHS)
|
||||
QQS = (DLG, JPV)
|
||||
DGV = (VQP, JFD)
|
||||
JDN = (XNT, BDN)
|
||||
LMA = (QDT, JQL)
|
||||
QDG = (QGC, DTX)
|
||||
HDD = (BVV, BRR)
|
||||
RRD = (CNG, XLJ)
|
||||
QBH = (VXX, SCC)
|
||||
GPH = (HLP, CXV)
|
||||
CVN = (MRV, QVK)
|
||||
RLS = (XJT, DXQ)
|
||||
QKN = (NJH, BLR)
|
||||
NRD = (VBM, KJN)
|
||||
NMB = (HVF, RJB)
|
||||
XNT = (RXV, TRF)
|
||||
XNS = (XHV, TPR)
|
||||
SGX = (LHM, QVX)
|
||||
NTS = (PHH, QDR)
|
||||
SPS = (LTF, HVH)
|
||||
KPX = (BCR, BHS)
|
||||
GNM = (RPS, RPS)
|
||||
CXZ = (NVJ, PLB)
|
||||
VVL = (LVD, NTS)
|
||||
VTC = (NHG, DVN)
|
||||
PXD = (BHH, SSS)
|
||||
TVL = (MKT, BRP)
|
||||
TPR = (KTJ, TSS)
|
||||
MJX = (JNL, HBT)
|
||||
BKN = (FMH, KFN)
|
||||
MBM = (BVC, FTP)
|
||||
RTV = (GVF, SRL)
|
||||
GPG = (PXD, RBP)
|
||||
KXK = (DMG, NPC)
|
||||
JPV = (GMM, BVN)
|
||||
LXP = (VPC, CRF)
|
||||
RMQ = (DNH, KQQ)
|
||||
DRN = (KBB, XVQ)
|
||||
MMS = (XXC, NDL)
|
||||
GMG = (SGX, JLV)
|
||||
MJT = (KHF, FTD)
|
||||
XJT = (QHC, FXN)
|
||||
JMQ = (XPP, RSK)
|
||||
QCS = (TVH, KJL)
|
||||
BVC = (DRN, DKV)
|
||||
SPC = (DBM, VGJ)
|
||||
SHH = (TNF, FVQ)
|
||||
VGA = (PLB, NVJ)
|
||||
RKK = (JPN, CVN)
|
||||
SCC = (TRQ, QCS)
|
||||
CDN = (JQK, PJX)
|
||||
VSS = (LJF, FCQ)
|
||||
JNF = (LFJ, RHR)
|
||||
VGP = (MHC, RMB)
|
||||
VGJ = (MJG, MFD)
|
||||
QGC = (RHH, SKN)
|
||||
RKJ = (KTQ, VNC)
|
||||
DTX = (SKN, RHH)
|
||||
HPQ = (VDR, SGC)
|
||||
CCG = (BRS, BKF)
|
||||
VLN = (FBX, KDS)
|
||||
BHH = (RMQ, RCS)
|
||||
BBC = (FCD, NCQ)
|
||||
JCV = (GNM, GNM)
|
||||
TNQ = (GJB, RKJ)
|
||||
QNJ = (NGH, XTV)
|
||||
GHT = (RGQ, JMQ)
|
||||
LJX = (CFC, HKB)
|
||||
TLN = (HKB, CFC)
|
||||
PFK = (DKL, LFL)
|
||||
PJR = (SDF, NFM)
|
||||
JNG = (NFG, FVR)
|
||||
PJX = (BHQ, HDQ)
|
||||
VHH = (CJG, HQQ)
|
||||
RTK = (PNN, JHL)
|
||||
XGB = (MLN, SQN)
|
||||
JCC = (NQX, NTT)
|
||||
BVT = (CVN, JPN)
|
||||
HPS = (RJQ, FQL)
|
||||
TCR = (DFN, RHS)
|
||||
LLA = (SHH, RQB)
|
||||
NGX = (QQS, LRV)
|
||||
SLV = (CBH, QKF)
|
||||
BMN = (CPR, MQR)
|
||||
XKL = (RFN, MHL)
|
||||
CGG = (VHM, SDL)
|
||||
KJN = (PSQ, QKN)
|
||||
LDB = (KDL, LMF)
|
||||
SPD = (SJC, GNF)
|
||||
VDR = (RLJ, QGB)
|
||||
DDF = (QPN, BCL)
|
||||
KQQ = (MVG, JCJ)
|
||||
DSS = (FDJ, NJD)
|
||||
NFD = (HVH, LTF)
|
||||
GPJ = (BFM, PJB)
|
||||
LGL = (DQL, CJC)
|
||||
TDQ = (QQB, TNQ)
|
||||
RCR = (PHL, LSG)
|
||||
SKH = (VNP, RSF)
|
||||
DGN = (QMC, GPG)
|
||||
NGH = (RNL, VTC)
|
||||
TSN = (HVF, RJB)
|
||||
MGV = (LML, BJK)
|
||||
QHQ = (LXP, NMC)
|
||||
KJL = (GJS, XMS)
|
||||
RBP = (BHH, SSS)
|
||||
QDR = (FPB, TCJ)
|
||||
RHR = (NMB, TSN)
|
||||
NXK = (LJX, TLN)
|
||||
FCB = (NQX, NTT)
|
||||
TFN = (TRS, XTH)
|
||||
MJG = (KSN, DBF)
|
||||
BVQ = (KFP, HVB)
|
||||
GMM = (PVP, KDR)
|
||||
MDN = (VRQ, HPQ)
|
||||
LTV = (DTX, QGC)
|
||||
LRV = (DLG, JPV)
|
||||
MHC = (JKJ, JGJ)
|
||||
DFC = (DNV, SPC)
|
||||
LXV = (SHH, RQB)
|
||||
PBL = (RVT, XRH)
|
||||
BDN = (RXV, TRF)
|
||||
JKJ = (KXG, NND)
|
||||
MSH = (MTV, QBF)
|
||||
NDL = (SPS, NFD)
|
||||
FKG = (VHT, KXK)
|
||||
PBR = (MKT, BRP)
|
||||
VSG = (BJB, DGN)
|
||||
RRX = (BGB, NGX)
|
||||
NQR = (JND, MBM)
|
||||
MRX = (MHX, SBX)
|
||||
DVN = (DVQ, VNB)
|
||||
HKC = (CNG, XLJ)
|
||||
PGT = (JXR, DGK)
|
||||
DBF = (HQB, RRP)
|
||||
FRG = (GPK, MKJ)
|
||||
DFG = (NMQ, GFD)
|
||||
QDT = (MLH, GSC)
|
||||
KVX = (STP, BHX)
|
||||
LCT = (MDL, KCL)
|
||||
LSN = (TCR, MSL)
|
||||
TXT = (RMC, RFV)
|
||||
MXM = (LXV, CFZ)
|
||||
TJG = (BHS, BCR)
|
||||
BCM = (GXR, HDD)
|
||||
FKX = (NTL, QQG)
|
||||
SRQ = (JQQ, VMH)
|
||||
BCL = (BCV, QBS)
|
||||
LRX = (CDN, XBH)
|
||||
RHS = (DSS, GMR)
|
||||
CLD = (FQS, KVX)
|
||||
XLJ = (DXM, QFN)
|
||||
KCL = (CXM, JLC)
|
||||
HXS = (PRL, RPP)
|
||||
JND = (BVC, FTP)
|
||||
VQR = (SHF, CMG)
|
||||
VNB = (DDH, GXM)
|
||||
QGB = (JJM, QKR)
|
||||
CVL = (BVQ, XQC)
|
||||
RFN = (JDN, TLX)
|
||||
FBM = (DVL, RTV)
|
||||
TFX = (LSQ, HMK)
|
||||
XQM = (NMQ, GFD)
|
||||
BJL = (KCL, MDL)
|
||||
FTR = (PPV, BVB)
|
||||
KNX = (FPX, SPD)
|
||||
MHK = (JHG, JLN)
|
||||
TDR = (XCS, VXV)
|
||||
HVC = (VSS, QXR)
|
||||
QXC = (HPS, HMQ)
|
||||
RRL = (NMC, LXP)
|
||||
MLD = (PRL, RPP)
|
||||
LCF = (MTV, QBF)
|
||||
VXV = (JTS, GRM)
|
||||
XTV = (RNL, VTC)
|
||||
LFL = (MFC, DXX)
|
||||
CBC = (GTB, MPF)
|
||||
CQN = (GPT, QRH)
|
||||
DDH = (NNL, CLD)
|
||||
GHN = (GXQ, MNP)
|
||||
JGT = (DHQ, GQG)
|
||||
HCT = (CKC, TTD)
|
||||
QCK = (GJN, RVB)
|
||||
SGF = (JSP, RCR)
|
||||
MPL = (XLX, LMX)
|
||||
XDQ = (LXV, LXV)
|
||||
MLN = (TDQ, XKV)
|
||||
SGZ = (JQL, QDT)
|
||||
VRQ = (SGC, VDR)
|
||||
FPL = (LSQ, HMK)
|
||||
SQB = (GNM, HHF)
|
||||
MHX = (PGT, JGN)
|
||||
QFT = (HKC, RRD)
|
||||
LXX = (CPF, SRQ)
|
||||
CPR = (GKB, MTS)
|
||||
HLP = (LNF, HGF)
|
||||
GJS = (GPN, LXX)
|
||||
QKV = (DCT, SDM)
|
||||
XST = (XDQ, MXM)
|
||||
VXX = (QCS, TRQ)
|
||||
KFP = (HXS, MLD)
|
||||
MSL = (RHS, DFN)
|
||||
NQX = (RQK, PFK)
|
||||
CGC = (LRS, KBV)
|
||||
FQT = (TRN, DDN)
|
||||
VMH = (LBC, JLS)
|
||||
VHM = (LSN, KJX)
|
||||
JXR = (BVT, RKK)
|
||||
KPN = (QQG, NTL)
|
||||
QKM = (GST, GXK)
|
||||
JNL = (XKL, JBQ)
|
||||
BVM = (KHF, FTD)
|
||||
XPK = (SQN, MLN)
|
||||
GJN = (MLR, XHT)
|
||||
@@ -0,0 +1,149 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
func main() {
|
||||
result, err := aoc.Runner(run)
|
||||
if err != nil {
|
||||
fmt.Println("ERR", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
fmt.Println("result", result)
|
||||
}
|
||||
|
||||
type result struct {
|
||||
stepsPT1 uint64
|
||||
stepsPT2 uint64
|
||||
}
|
||||
|
||||
func (r result) String() string {
|
||||
return fmt.Sprintf("solution 1: %v\nsolution 2: %v\n", r.stepsPT1, r.stepsPT2)
|
||||
}
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
var path []rune
|
||||
m := make(nodeMap)
|
||||
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
if len(text) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
if len(path) == 0 {
|
||||
fmt.Println("path", text)
|
||||
path = []rune(strings.TrimSpace(text))
|
||||
continue
|
||||
}
|
||||
|
||||
n := &node{}
|
||||
i, err := fmt.Sscanf(text, "%s = (%s %s", &n.value, &n.lvalue, &n.rvalue)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
n.lvalue = strings.TrimRight(n.lvalue, ",)")
|
||||
n.rvalue = strings.TrimRight(n.rvalue, ",)")
|
||||
m[n.value] = n
|
||||
|
||||
fmt.Println("value", i, n.value, n.lvalue, n.rvalue)
|
||||
}
|
||||
if err := m.mapNodes(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
steps1 := m.SolvePT1(path)
|
||||
steps2 := m.SolvePT2(path)
|
||||
|
||||
return &result{steps1, steps2}, nil
|
||||
}
|
||||
|
||||
type node struct {
|
||||
value string
|
||||
lvalue, rvalue string
|
||||
left, right *node
|
||||
}
|
||||
|
||||
type nodeMap map[string]*node
|
||||
|
||||
func (m nodeMap) mapNodes() error {
|
||||
for k, v := range m {
|
||||
if ptr, ok := m[v.lvalue]; ok {
|
||||
v.left = ptr
|
||||
} else {
|
||||
return fmt.Errorf("%s L-> %s not found", k, v.lvalue)
|
||||
}
|
||||
if ptr, ok := m[v.rvalue]; ok {
|
||||
v.right = ptr
|
||||
} else {
|
||||
return fmt.Errorf("%s R-> %s not found", k, v.rvalue)
|
||||
}
|
||||
|
||||
m[k] = v
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m nodeMap) solver(start string, isEnd func(string) bool, path []rune) uint64 {
|
||||
position, ok := m[start]
|
||||
if !ok {
|
||||
return 0
|
||||
}
|
||||
var i int
|
||||
var steps uint64
|
||||
|
||||
for steps < ^uint64(0) {
|
||||
steps++
|
||||
if path[i] == 'R' {
|
||||
// fmt.Println("step", steps, position.value, "R->", position.rvalue)
|
||||
position = position.right
|
||||
} else {
|
||||
// fmt.Println("step", steps, position.value, "L->", position.lvalue)
|
||||
position = position.left
|
||||
}
|
||||
|
||||
if isEnd(position.value) {
|
||||
break
|
||||
}
|
||||
|
||||
i++
|
||||
if i > len(path)-1 {
|
||||
i = 0
|
||||
}
|
||||
}
|
||||
return steps
|
||||
}
|
||||
|
||||
func (m nodeMap) SolvePT1(path []rune) uint64 {
|
||||
fmt.Println("---- PART 1 BEGIN ----")
|
||||
defer fmt.Println("---- PART 1 END ----")
|
||||
|
||||
return m.solver("AAA", func(s string) bool { return s == "ZZZ" }, path)
|
||||
}
|
||||
|
||||
func (m nodeMap) SolvePT2(path []rune) uint64 {
|
||||
fmt.Println("---- PART 2 BEGIN ----")
|
||||
defer fmt.Println("---- PART 2 END ----")
|
||||
|
||||
var starts []*node
|
||||
|
||||
for k, n := range m {
|
||||
if strings.HasSuffix(k, "A") {
|
||||
fmt.Println("start", k)
|
||||
starts = append(starts, n)
|
||||
}
|
||||
}
|
||||
|
||||
loops := make([]uint64, len(starts))
|
||||
for i, n := range starts {
|
||||
loops[i] = m.solver(n.value, func(s string) bool { return strings.HasSuffix(s, "Z") }, path)
|
||||
}
|
||||
return aoc.LCM(loops...)
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example1.txt
|
||||
var example1 []byte
|
||||
|
||||
//go:embed example2.txt
|
||||
var example2 []byte
|
||||
|
||||
//go:embed example3.txt
|
||||
var example3 []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample1(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example1))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result.stepsPT1)
|
||||
is.Equal(result.stepsPT1, uint64(2))
|
||||
}
|
||||
|
||||
func TestExample2(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example2))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result.stepsPT1)
|
||||
is.Equal(result.stepsPT1, uint64(6))
|
||||
}
|
||||
|
||||
func TestExample3(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example3))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result.stepsPT2)
|
||||
is.Equal(result.stepsPT2, uint64(6))
|
||||
}
|
||||
|
||||
func TestInput(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log("part1 solution", result.stepsPT1)
|
||||
is.Equal(result.stepsPT1, uint64(14429))
|
||||
|
||||
t.Log("part2 solution", result.stepsPT2)
|
||||
is.Equal(result.stepsPT2, uint64(10921547990923))
|
||||
}
|
||||
|
||||
// first: 14429
|
||||
// second: 10921547990923
|
||||
|
||||
// Brüt
|
||||
// stops 1 steps 13201
|
||||
// stops 2 steps 620447
|
||||
// stops 3 steps 36606373
|
||||
// stops 4 steps 2232988753
|
||||
// stops 5 steps 149610246451
|
||||
@@ -0,0 +1,3 @@
|
||||
0 3 6 9 12 15
|
||||
1 3 6 10 15 21
|
||||
10 13 16 21 30 45
|
||||
@@ -0,0 +1,200 @@
|
||||
28 38 58 115 255 558 1167 2343 4564 8699 16328 30378 56447 105549 199601 381868 735876 1418100 2712150 5115341 9472583
|
||||
24 34 56 103 191 343 593 990 1602 2520 3862 5777 8449 12101 16999 23456 31836 42558 56100 73003 93875
|
||||
12 30 66 118 187 291 486 901 1807 3760 7885 16402 33536 67001 130303 246169 451478 804146 1392500 2347766 3860393
|
||||
11 7 -1 -10 4 101 392 1052 2337 4631 8595 15584 28661 54781 109041 222274 453659 910327 1775963 3349730 6094694
|
||||
13 26 56 110 200 360 677 1347 2785 5847 12267 25493 52275 105732 211455 420013 833076 1658291 3323777 6713131 13636877
|
||||
24 36 50 68 92 124 166 220 288 372 474 596 740 908 1102 1324 1576 1860 2178 2532 2924
|
||||
4 10 18 35 81 207 523 1232 2664 5299 9766 16819 27345 42607 65306 103013 177906 352348 792280 1916515 4732055
|
||||
2 4 15 46 115 246 479 915 1841 4022 9326 21995 51143 115539 252570 534754 1099830 2205374 4328183 8346246 15873877
|
||||
6 16 41 104 240 508 1016 1959 3670 6684 11815 20246 33632 54216 84958 129677 193206 281560 402117 563812 777344
|
||||
10 24 59 127 240 410 649 969 1382 1900 2535 3299 4204 5262 6485 7885 9474 11264 13267 15495 17960
|
||||
1 3 19 65 161 334 621 1072 1753 2749 4167 6139 8825 12416 17137 23250 31057 40903 53179 68325 86833
|
||||
1 3 14 46 118 256 493 869 1431 2233 3336 4808 6724 9166 12223 15991 20573 26079 32626 40338 49346
|
||||
5 20 54 111 200 339 551 863 1338 2203 4189 9270 22068 52271 118490 254073 515553 994838 1837662 3275301 5689494
|
||||
11 19 37 74 152 315 630 1176 2019 3189 4728 6991 11599 23863 58350 151043 385257 945993 2232085 5082986 11226568
|
||||
-6 -5 -1 6 16 29 45 64 86 111 139 170 204 241 281 324 370 419 471 526 584
|
||||
19 44 79 123 175 234 299 369 443 520 599 679 759 838 915 989 1059 1124 1183 1235 1279
|
||||
20 26 41 76 144 261 459 824 1572 3189 6707 14297 30581 65483 140200 299218 633600 1324592 2722729 5487182 10824554
|
||||
2 13 49 134 316 686 1400 2714 5060 9211 16601 29879 53781 96407 171038 298877 513930 873445 1482345 2550372 4520094
|
||||
7 22 55 116 218 381 645 1090 1862 3209 5540 9533 16335 27918 47680 81409 138761 235440 396309 659706 1083288
|
||||
23 34 43 54 73 105 151 202 234 223 220 555 2284 8074 23894 62315 149406 340397 757350 1681105 3771572
|
||||
-2 9 31 72 157 346 769 1701 3724 8065 17266 36441 75513 153008 302220 580858 1085650 1973817 3493849 6028622 10154597
|
||||
17 35 83 175 326 554 878 1305 1800 2233 2292 1349 -1702 -8485 -20570 -37084 -47977 -18173 145725 659887 1980386
|
||||
6 19 49 119 273 598 1257 2530 4856 8858 15310 24963 38082 53479 66865 68818 44405 -18660 -94790 -14282 809438
|
||||
17 21 22 20 15 7 -4 -18 -35 -55 -78 -104 -133 -165 -200 -238 -279 -323 -370 -420 -473
|
||||
8 23 59 139 312 672 1383 2710 5056 9005 15371 25253 40096 61758 92583 135480 194008 272467 375995 510671 683624
|
||||
9 16 34 63 103 154 216 289 373 468 574 691 819 958 1108 1269 1441 1624 1818 2023 2239
|
||||
8 19 59 140 275 481 794 1315 2308 4381 8817 18206 37692 77458 157694 318613 640892 1287715 2591041 5226414 10560561
|
||||
8 21 37 57 82 107 117 88 -4 -163 -339 -377 54 1555 5117 12270 25264 47285 82709 137397 219034
|
||||
22 34 44 52 58 62 64 64 62 58 52 44 34 22 8 -8 -26 -46 -68 -92 -118
|
||||
28 57 114 220 416 779 1446 2651 4785 8494 14832 25483 43057 71450 116238 185052 287858 437047 647230 934638 1316054
|
||||
16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96
|
||||
28 39 48 62 97 180 347 630 1022 1413 1518 905 -557 -1064 7553 50137 189888 570667 1494764 3559032 7883557
|
||||
5 0 3 30 106 262 542 1035 1947 3728 7269 14184 27192 50614 91000 157901 264801 430224 679031 1043922 1567158
|
||||
4 21 55 119 239 461 864 1591 2913 5356 9967 18894 36631 72557 145803 294037 588486 1158435 2229571 4181885 7634411
|
||||
8 11 15 33 81 182 384 805 1728 3777 8206 17321 35023 67400 123199 213865 352632 551879 817609 1139457 1474069
|
||||
6 15 30 69 162 358 754 1560 3223 6658 13679 27799 55705 109973 214073 411584 783020 1476065 2758724 5110417 9373988
|
||||
18 26 37 54 84 138 231 382 614 954 1433 2086 2952 4074 5499 7278 9466 12122 15309 19094 23548
|
||||
3 -2 -7 -12 -17 -22 -27 -32 -37 -42 -47 -52 -57 -62 -67 -72 -77 -82 -87 -92 -97
|
||||
16 32 61 121 242 466 847 1451 2356 3652 5441 7837 10966 14966 19987 26191 33752 42856 53701 66497 81466
|
||||
13 35 79 160 302 554 1015 1865 3399 6061 10475 17470 28096 43628 65555 95551 135425 187047 252247 332684 429682
|
||||
13 6 -9 -20 11 156 538 1364 2981 5967 11279 20495 36207 62647 106658 179157 297277 487420 789503 1262734 1993315
|
||||
14 11 18 51 141 348 790 1714 3660 7803 16602 34939 71995 144184 279550 524126 950858 1671811 2854498 4743307 7687145
|
||||
2 7 22 56 123 242 437 737 1176 1793 2632 3742 5177 6996 9263 12047 15422 19467 24266 29908 36487
|
||||
19 34 68 128 220 349 519 733 993 1300 1654 2054 2498 2983 3505 4059 4639 5238 5848 6460 7064
|
||||
21 48 85 132 195 292 468 836 1684 3739 8772 20876 48964 111327 243473 510946 1029407 1994954 3728471 6738732 11810049
|
||||
11 27 55 108 210 394 696 1143 1733 2405 2997 3190 2436 -132 -5810 -16455 -34641 -63841 -108637 -174960 -270362
|
||||
12 12 12 25 90 292 791 1869 4012 8064 15537 29266 54829 103647 199701 393835 793523 1623291 3344337 6885726 14081159
|
||||
5 13 31 72 164 358 736 1410 2499 4070 6039 8076 9700 11088 15835 38309 120943 371965 1044017 2693426 6497234
|
||||
-1 -4 4 46 162 411 867 1607 2698 4206 6273 9338 14615 24985 46510 90835 178809 345728 648682 1176574 2063472
|
||||
8 16 23 40 92 216 455 847 1408 2108 2839 3374 3316 2036 -1401 -8323 -20552 -40520 -71401 -117260 -183220
|
||||
27 54 93 143 215 340 581 1059 2009 3892 7603 14833 28665 54510 101519 184641 327535 566586 956321 1576571 2541779
|
||||
18 25 37 63 114 201 333 515 746 1017 1309 1591 1818 1929 1845 1467 674 -679 -2763 -5777 -9950
|
||||
11 23 58 131 266 508 956 1834 3618 7240 14408 28142 53779 101035 188408 352630 668776 1292502 2547568 5104551 10339633
|
||||
20 30 55 112 230 464 919 1792 3444 6514 12092 22012 39486 70717 129039 244932 488666 1018738 2181538 4711697 10130222
|
||||
8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 113 120 127 134 141 148
|
||||
8 17 18 5 -32 -110 -256 -510 -928 -1585 -2578 -4029 -6088 -8936 -12788 -17896 -24552 -33091 -43894 -57391 -74064
|
||||
0 6 28 73 155 304 573 1043 1826 3066 4938 7645 11413 16484 23107 31527 41972 54638 69672 87153 107071
|
||||
8 14 26 39 49 61 112 320 974 2687 6657 15139 32341 66134 131237 254984 487637 921079 1723959 3210704 5981290
|
||||
-3 6 32 88 209 468 1005 2092 4276 8669 17497 35106 69812 137381 267702 517614 995199 1904592 3626038 6854228 12829699
|
||||
16 14 18 32 52 64 53 40 180 979 3722 11247 29252 68383 147421 297965 571096 1046604 1845466 3146378 5207268
|
||||
0 19 60 146 330 708 1432 2721 4864 8205 13096 19800 28322 38142 47820 54439 52848 34663 -13020 -109250 -281238
|
||||
19 37 70 119 185 269 372 495 639 805 994 1207 1445 1709 2000 2319 2667 3045 3454 3895 4369
|
||||
8 18 30 51 92 174 350 764 1787 4310 10347 24225 54843 119816 252855 516572 1024178 1975442 3715028 6825207 12270294
|
||||
9 31 64 108 163 229 306 394 493 603 724 856 999 1153 1318 1494 1681 1879 2088 2308 2539
|
||||
27 36 46 65 110 223 504 1178 2725 6116 13214 27417 54640 104755 193632 345950 598975 1007532 1650430 2638633 4125506
|
||||
-3 -9 -19 -25 -9 63 252 660 1449 2882 5441 10155 19412 38768 80661 171586 365345 766697 1572457 3141343 6110353
|
||||
9 13 16 19 30 81 256 730 1819 4041 8188 15409 27304 46029 74412 116080 175597 258613 372024 524143 724882
|
||||
8 17 26 35 44 53 62 71 80 89 98 107 116 125 134 143 152 161 170 179 188
|
||||
13 29 69 150 300 564 1014 1770 3055 5340 9688 18482 36824 75023 152753 305660 595433 1124631 2057879 3651414 6293380
|
||||
19 39 64 101 169 299 534 929 1551 2479 3804 5629 8069 11251 15314 20409 26699 34359 43576 54549 67489
|
||||
26 48 79 119 168 226 293 369 454 548 651 763 884 1014 1153 1301 1458 1624 1799 1983 2176
|
||||
16 28 45 62 80 120 240 563 1330 3003 6482 13603 28310 59352 126262 272164 590489 1279633 2753130 5858989 12311553
|
||||
16 27 38 49 60 71 82 93 104 115 126 137 148 159 170 181 192 203 214 225 236
|
||||
16 26 52 107 212 412 806 1601 3204 6384 12578 24502 47411 91748 178785 352718 706597 1437520 2962583 6158201 12843931
|
||||
15 23 44 100 234 527 1138 2396 4995 10379 21457 43857 88008 172421 328611 608145 1092295 1904695 3227218 5318970 8537806
|
||||
19 35 67 125 219 359 555 817 1155 1579 2099 2725 3467 4335 5339 6489 7795 9267 10915 12749 14779
|
||||
14 9 -2 -25 -60 -96 -107 -38 250 1146 3714 10678 28555 72047 172745 395881 871826 1854119 3824278 7677249 15042442
|
||||
0 14 48 119 263 559 1175 2446 5004 10002 19512 37235 69743 128583 233715 418934 740144 1287614 2203656 3707527 6129775
|
||||
-6 -13 -11 9 54 127 233 409 798 1797 4331 10342 23629 51210 105348 206191 384454 682459 1149765 1826027 2697892
|
||||
14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6
|
||||
9 15 23 41 93 228 528 1127 2265 4422 8622 17094 34685 71869 151157 320706 682873 1452897 3076233 6455943 13379245
|
||||
26 38 54 85 154 309 648 1354 2736 5284 9786 17637 31605 57512 107535 206117 399770 772302 1467138 2718337 4891512
|
||||
7 2 -4 -11 -19 -28 -38 -49 -61 -74 -88 -103 -119 -136 -154 -173 -193 -214 -236 -259 -283
|
||||
17 40 72 120 202 355 665 1340 2867 6327 14000 30508 64985 135242 275772 552897 1092529 2128842 4085140 7700052 14210216
|
||||
-3 -4 -7 -12 -19 -28 -39 -52 -67 -84 -103 -124 -147 -172 -199 -228 -259 -292 -327 -364 -403
|
||||
9 21 38 62 99 161 268 450 749 1221 1938 2990 4487 6561 9368 13090 17937 24149 31998 41790 53867
|
||||
2 9 39 99 204 393 760 1519 3132 6545 13600 27720 54996 105835 197349 356668 625334 1064865 1763453 2843561 4469892
|
||||
20 33 49 75 125 228 457 1004 2337 5480 12453 26893 54846 105671 192927 335020 555266 880875 1340177 1957191 2742379
|
||||
18 21 16 6 5 57 270 860 2190 4774 9202 15936 24945 35235 44593 50493 54394 73951 171296 510662 1464845
|
||||
10 11 18 38 71 100 71 -142 -790 -2316 -5409 -10945 -19511 -29701 -33227 -2480 138638 579164 1757487 4641596 11293649
|
||||
25 33 43 67 138 323 742 1611 3346 6797 13731 27756 55976 111792 219447 421300 789851 1449309 2618271 4700169 8479106
|
||||
27 42 62 88 120 169 286 615 1492 3635 8492 18826 39628 79522 153115 285551 522357 951296 1749478 3279940 6279276
|
||||
-1 11 47 125 280 574 1106 2022 3525 5885 9449 14651 22022 32200 45940 64124 87771 118047 156275 203945 262724
|
||||
13 21 51 115 225 393 631 951 1365 1885 2523 3291 4201 5265 6495 7903 9501 11301 13315 15555 18033
|
||||
20 35 53 83 140 245 425 713 1148 1775 2645 3815 5348 7313 9785 12845 16580 21083 26453 32795 40220
|
||||
10 26 63 132 248 429 694 1074 1663 2751 5098 10427 22235 47044 96239 188667 354200 638496 1109225 1864062 3040786
|
||||
6 -1 -9 -15 -17 -13 13 141 635 2188 6391 16606 39556 88146 186315 377108 735668 1389501 2549183 4553679 7935653
|
||||
9 15 43 117 265 514 885 1388 2017 2745 3519 4255 4833 5092 4825 3774 1625 -1997 -7533 -15495 -26471
|
||||
7 22 41 65 106 207 489 1245 3117 7431 16845 36609 76972 157632 315649 618971 1188707 2234572 4109585 7392185 13006510
|
||||
10 9 5 -1 3 51 224 700 1840 4321 9327 18809 35825 64971 112914 189038 306214 481705 738217 1105107 1619759
|
||||
12 16 30 69 148 282 486 775 1164 1668 2302 3081 4020 5134 6438 7947 9676 11640 13854 16333 19092
|
||||
1 0 10 42 98 172 270 462 979 2368 5718 12970 27324 53756 99658 175614 296325 481696 758098 1159818 1730710
|
||||
8 19 38 73 142 283 562 1079 1973 3430 5708 9217 14739 23954 40566 72513 136014 262573 510546 983505 1858428
|
||||
9 24 57 114 205 359 643 1184 2197 4026 7209 12582 21441 35785 58667 94684 150641 236428 366153 559578 843909
|
||||
8 14 22 32 44 58 74 92 112 134 158 184 212 242 274 308 344 382 422 464 508
|
||||
24 34 44 54 64 74 84 94 104 114 124 134 144 154 164 174 184 194 204 214 224
|
||||
16 30 63 126 233 405 686 1187 2184 4316 8979 19130 40965 87415 185254 389023 807192 1649322 3307839 6494862 12463897
|
||||
-7 -7 1 32 121 335 787 1666 3321 6479 12739 25563 52073 106047 212569 414805 783321 1428197 2513885 4276266 7040633
|
||||
-2 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58
|
||||
13 27 38 41 36 48 177 688 2156 5707 13455 29337 60698 121182 235783 449463 842011 1554867 2842648 5177133 9461476
|
||||
15 42 93 182 326 549 884 1374 2086 3178 5119 9300 19562 45721 111199 268798 632393 1439844 3177921 6832092 14389654
|
||||
7 28 73 151 265 408 559 679 707 556 109 -785 -2315 -4712 -8253 -13265 -20129 -29284 -41231 -56537 -75839
|
||||
8 5 13 42 97 177 284 446 766 1532 3473 8340 20149 47680 109278 241921 518597 1082840 2220086 4508651 9140126
|
||||
17 27 40 71 149 317 632 1165 2001 3239 4992 7387 10565 14681 19904 26417 34417 44115 55736 69519 85717
|
||||
24 37 47 65 117 257 594 1347 2963 6367 13474 28217 58615 120994 248715 510261 1046343 2144574 4386122 8926186 18016274
|
||||
11 16 36 80 158 277 445 706 1254 2711 6703 16929 40991 93338 199774 404089 777493 1431666 2536382 4342822 7213860
|
||||
0 -2 8 48 141 321 657 1303 2580 5096 9915 18799 34571 61685 107144 181982 303624 499562 812938 1310810 2096097
|
||||
4 15 39 91 211 473 995 1967 3741 7078 13740 27774 58093 123376 261026 543285 1106377 2204300 4310572 8314176 15899538
|
||||
-7 6 36 87 163 272 446 788 1568 3411 7651 16966 36460 75419 150039 287505 531891 952452 1654990 2797097 4608209
|
||||
13 29 56 95 152 244 405 692 1191 2023 3350 5381 8378 12662 18619 26706 37457 51489 69508 92315 120812
|
||||
15 27 59 125 237 417 722 1283 2361 4428 8300 15415 28528 53504 103742 210470 445527 969865 2133765 4678765 10135083
|
||||
20 31 57 122 274 596 1223 2377 4439 8101 14695 26909 50338 96812 191434 387177 794467 1639641 3377468 6902112 13932807
|
||||
10 37 91 200 416 820 1528 2716 4696 8091 14175 25464 46666 86122 157896 284700 501870 862641 1445003 2360456 3765020
|
||||
6 24 54 95 153 251 440 812 1516 2778 4926 8421 13895 22197 34448 52106 77042 111628 158838 222363 306741
|
||||
9 24 49 84 125 162 193 281 693 2172 6405 16762 39393 84782 169869 320863 576881 994560 1653801 2664816 4176661
|
||||
3 10 23 57 149 386 945 2142 4499 8866 16685 30566 55492 101260 187366 352765 675303 1309938 2562335 5026719 9836291
|
||||
15 29 55 109 226 481 1024 2134 4299 8344 15672 28779 52397 95981 178896 340733 660899 1294259 2533505 4914517 9388784
|
||||
14 33 78 166 331 644 1248 2423 4711 9165 17861 34963 68917 136884 273538 548338 1099300 2198986 4383250 8701159 17195603
|
||||
7 5 5 7 11 17 25 35 47 61 77 95 115 137 161 187 215 245 277 311 347
|
||||
0 2 9 21 38 60 87 119 156 198 245 297 354 416 483 555 632 714 801 893 990
|
||||
8 11 29 79 200 478 1087 2365 4957 10076 19965 38689 73433 136495 248086 439830 758518 1269449 2059289 3241351 4974534
|
||||
9 26 71 154 282 459 686 961 1279 1632 2009 2396 2776 3129 3432 3659 3781 3766 3579 3182 2534
|
||||
-8 -9 -1 23 70 147 261 419 628 895 1227 1631 2114 2683 3345 4107 4976 5959 7063 8295 9662
|
||||
14 38 88 183 349 621 1047 1694 2656 4064 6098 9001 13095 18799 26649 37320 51650 70666 95612 127979 169537
|
||||
1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61
|
||||
10 17 33 71 156 319 593 1016 1655 2681 4550 8393 16823 35591 76964 166498 356232 749489 1545759 3118955 6149158
|
||||
-2 5 20 55 147 378 896 1945 3924 7507 13868 25067 44665 78648 136752 234293 394618 652305 1057252 1679807 2617103
|
||||
-2 -3 -3 12 76 250 640 1443 3044 6202 12405 24581 48599 96524 193673 393656 809674 1677915 3482413 7194006 14714566
|
||||
-5 -2 2 11 40 131 388 1045 2594 6015 13162 27362 54272 103007 187497 327953 552225 896728 1406510 2133961 3135644
|
||||
-1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21
|
||||
6 23 51 90 140 201 273 356 450 555 671 798 936 1085 1245 1416 1598 1791 1995 2210 2436
|
||||
22 44 78 135 237 421 758 1410 2772 5783 12540 27421 59046 123639 250801 493519 945638 1772306 3262446 5917591 10599023
|
||||
24 37 60 106 197 375 727 1435 2867 5730 11311 21837 40990 74618 131688 225532 375442 608675 962934 1489396 2256363
|
||||
12 20 49 112 222 392 635 964 1392 1932 2597 3400 4354 5472 6767 8252 9940 11844 13977 16352 18982
|
||||
2 7 24 61 126 227 372 569 826 1151 1552 2037 2614 3291 4076 4977 6002 7159 8456 9901 11502
|
||||
12 11 22 60 158 379 821 1618 2953 5122 8728 15159 27666 53731 110255 234858 510014 1112985 2415218 5172306 10872818
|
||||
17 24 49 120 294 677 1456 2952 5715 10719 19792 36560 68444 130715 254454 501802 994701 1968430 3870295 7539464 14530122
|
||||
25 40 65 122 253 535 1117 2293 4630 9184 17861 34010 63355 115342 204806 353380 588983 939636 1414390 1959381 2372399
|
||||
25 52 90 138 195 260 332 410 493 580 670 762 855 948 1040 1130 1217 1300 1378 1450 1515
|
||||
0 2 24 87 221 468 885 1547 2550 4014 6086 8943 12795 17888 24507 32979 43676 57018 73476 93575 117897
|
||||
19 32 61 117 214 369 603 947 1457 2242 3509 5629 9228 15307 25395 41739 67535 107204 166717 253973 379234
|
||||
23 32 38 44 60 103 197 373 669 1130 1808 2762 4058 5769 7975 10763 14227 18468 23594 29720 36968
|
||||
4 11 19 35 76 180 439 1069 2539 5797 12662 26510 53500 104832 201057 380617 717363 1357502 2598934 5062820 10063437
|
||||
10 19 23 14 -24 -121 -314 -610 -897 -761 888 6598 22021 59353 144459 331532 733040 1580211 3343069 6963206 14293206
|
||||
3 17 48 105 201 354 600 1028 1847 3495 6800 13203 25053 45984 81384 138966 229451 367373 572016 868493 1288977
|
||||
-4 -3 10 49 132 289 583 1147 2252 4449 8873 17855 36050 72341 142802 274973 513588 927669 1618516 2727541 4442064
|
||||
19 39 74 133 236 422 765 1415 2696 5313 10758 22099 45557 93732 192181 392487 797276 1606233 3197558 6267150 12058959
|
||||
-7 -10 -13 -16 -19 -22 -25 -28 -31 -34 -37 -40 -43 -46 -49 -52 -55 -58 -61 -64 -67
|
||||
21 44 74 122 221 432 849 1603 2865 4848 7808 12044 17897 25748 36015 49149 65629 85956 110646 140222 175205
|
||||
18 26 39 66 116 198 321 494 726 1026 1403 1866 2424 3086 3861 4758 5786 6954 8271 9746 11388
|
||||
21 40 78 164 356 766 1605 3259 6420 12322 23187 43106 79841 148586 279840 535679 1042583 2055644 4079972 8092520 15934162
|
||||
20 37 62 95 136 185 242 307 380 461 550 647 752 865 986 1115 1252 1397 1550 1711 1880
|
||||
0 2 15 48 121 283 642 1407 2942 5832 10961 19602 33519 55081 87388 134409 201132 293726 419715 588164 809877
|
||||
8 13 15 13 15 42 131 338 755 1592 3455 8105 20256 51423 127543 303162 686530 1482119 3060047 6065853 11589253
|
||||
12 30 59 93 125 157 214 361 722 1498 2987 5640 10262 18599 34737 67942 137708 281702 566759 1101727 2048287
|
||||
-3 10 49 127 264 492 863 1464 2440 4028 6633 11078 19417 37246 79490 183510 436575 1030078 2361565 5219525 11107638
|
||||
16 33 54 90 174 378 846 1849 3867 7702 14625 26559 46299 77769 126315 199032 305122 456279 667096 955488 1343124
|
||||
19 43 88 176 343 647 1194 2198 4111 7897 15598 31482 64323 131829 269087 544536 1090317 2160903 4249054 8320480 16296305
|
||||
22 41 67 112 212 447 969 2039 4084 7808 14445 26357 48398 90840 175255 345646 688410 1366499 2675535 5132758 9613680
|
||||
12 25 47 89 162 277 445 677 984 1377 1867 2465 3182 4029 5017 6157 7460 8937 10599 12457 14522
|
||||
5 0 -7 -1 49 197 534 1225 2596 5304 10634 21018 41034 79540 154415 302881 602927 1215420 2462671 4968277 9895903
|
||||
-9 -14 -15 1 65 237 627 1430 2974 5775 10594 18507 31038 50464 80459 127293 201992 324897 538038 942790 1811370
|
||||
2 4 0 -10 -11 41 233 709 1684 3458 6430 11112 18143 28303 42527 61919 87766 121552 164972 219946 288633
|
||||
7 26 67 150 317 656 1342 2714 5434 10819 21508 42739 84695 166680 324376 622208 1174037 2177180 3967333 7105608 12513901
|
||||
12 22 38 64 119 247 532 1123 2276 4424 8309 15295 28210 53572 107038 225653 493336 1090494 2385292 5093646 10548309
|
||||
14 12 10 19 59 159 357 700 1244 2054 3204 4777 6865 9569 12999 17274 22522 28880 36494 45519 56119
|
||||
2 14 43 115 280 632 1341 2710 5286 10076 18959 35465 66244 123814 231609 433008 806986 1494370 2740499 4962479 8852304
|
||||
16 36 82 165 307 556 1007 1841 3405 6374 12066 23034 44170 84820 163047 314653 612780 1210538 2432293 4964944 10250289
|
||||
10 8 10 20 58 188 557 1451 3382 7223 14402 27147 48738 83665 137509 216252 324578 462546 619794 766166 837338
|
||||
9 22 46 85 154 288 571 1200 2601 5616 11777 23672 45407 83249 146871 252546 431725 752582 1369644 2629419 5280540
|
||||
16 20 35 87 210 449 878 1653 3133 6129 12402 25663 53593 111897 232285 477770 971150 1946550 3840269 7447123 14183748
|
||||
22 44 94 197 405 821 1643 3250 6376 12465 24392 47913 94545 187207 371116 734593 1448530 2841203 5540681 10747619 20760527
|
||||
4 15 42 101 226 487 1024 2115 4318 8768 17778 36006 72647 145461 288069 563007 1084756 2059673 3853830 7105719 12909204
|
||||
15 23 48 115 271 611 1319 2724 5371 10107 18182 31365 52075 83527 129893 196478 289911 418351 591708 821879 1122999
|
||||
7 6 17 48 107 202 341 532 783 1102 1497 1976 2547 3218 3997 4892 5911 7062 8353 9792 11387
|
||||
-4 3 25 70 153 309 619 1270 2682 5750 12268 25628 51937 101824 193553 358902 655155 1190487 2177891 4048307 7684230
|
||||
-2 4 19 40 65 112 264 766 2210 5847 14057 30979 63235 120551 215877 364424 581237 878545 1269600 1800115 2661524
|
||||
18 30 45 58 64 58 35 -10 -82 -186 -327 -510 -740 -1022 -1361 -1762 -2230 -2770 -3387 -4086 -4872
|
||||
8 20 59 143 292 523 844 1247 1700 2138 2453 2483 2000 697 -1826 -6077 -12688 -22432 -36241 -55225 -80692
|
||||
11 12 8 -7 -28 -26 65 361 1041 2360 4662 8393 14114 22514 34423 50825 72871 101892 139412 187161 247088
|
||||
6 6 19 54 113 189 264 307 272 96 -303 -1028 -2205 -3985 -6546 -10095 -14870 -21142 -29217 -39438 -52187
|
||||
26 40 63 112 222 455 906 1708 3036 5116 8278 13187 21602 38439 76677 167925 383519 874229 1941697 4162964 8603981
|
||||
12 19 31 58 110 209 412 843 1741 3551 7128 14215 28539 58216 120779 253209 531098 1103839 2256973 4519124 8840092
|
||||
14 28 47 71 102 153 266 539 1162 2462 4957 9419 16946 29043 47712 75551 115862 172768 251339 357727 499310
|
||||
19 22 38 89 208 457 958 1941 3833 7447 14380 27796 53861 104226 200137 378978 704206 1279303 2264473 3888958 6437241
|
||||
20 38 83 177 353 665 1204 2120 3650 6152 10145 16355 25767 39683 59786 88210 127616 181274 253151 348005 471485
|
||||
18 33 52 75 103 147 258 596 1573 4137 10313 24197 53757 114135 233848 466630 914030 1767831 3387708 6439669 12137157
|
||||
16 32 61 98 136 164 171 173 281 836 2678 7743 20501 51456 125378 299753 704238 1621680 3648963 8007452 17127734
|
||||
0 9 25 62 141 293 566 1037 1844 3286 6097 12096 25583 56164 124287 271914 582905 1221701 2506400 5046590 10003946
|
||||
-4 12 56 141 280 486 772 1151 1636 2240 2976 3857 4896 6106 7500 9091 10892 12916 15176 17685 20456
|
||||
@@ -0,0 +1,134 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"cmp"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 int
|
||||
}
|
||||
|
||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||
|
||||
var log = aoc.Log
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
var histories [][]int
|
||||
var values []int
|
||||
var rvalues []int
|
||||
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
if len(text) == 0 {
|
||||
continue
|
||||
}
|
||||
histories = append(histories, aoc.ReadStringToInts(strings.Fields(text)))
|
||||
|
||||
log(last(histories...))
|
||||
|
||||
values = append(values, predictNext(last(histories...)))
|
||||
rvalues = append(rvalues, predictPrev(last(histories...)))
|
||||
}
|
||||
|
||||
log("values", values)
|
||||
log("rvalues", rvalues)
|
||||
|
||||
return &result{valuePT1: sum(values...), valuePT2: sum(rvalues...)}, nil
|
||||
}
|
||||
|
||||
func predictNext(in []int) int {
|
||||
log(" ---- PREDICT NEXT ----")
|
||||
defer log(" ----------------------")
|
||||
|
||||
history := makeHistory(in)
|
||||
|
||||
aoc.Reverse(history)
|
||||
|
||||
return predict(history, func(a, b int) int { return a + b })
|
||||
}
|
||||
|
||||
func predictPrev(in []int) int {
|
||||
log(" ---- PREDICT PREV ----")
|
||||
defer log(" ----------------------")
|
||||
|
||||
history := makeHistory(in)
|
||||
|
||||
for i := range history {
|
||||
aoc.Reverse(history[i])
|
||||
}
|
||||
aoc.Reverse(history)
|
||||
|
||||
return predict(history, func(a, b int) int { return b - a })
|
||||
}
|
||||
|
||||
func predict(history [][]int, diff func(a, b int) int) int {
|
||||
log(" ---- PREDICT ----")
|
||||
defer log(" -----------------")
|
||||
|
||||
for i := range history[1:] {
|
||||
lastHistory, curHistory := last(history[i]...), last(history[i+1]...)
|
||||
|
||||
history[i+1] = append(history[i+1], diff(lastHistory, curHistory))
|
||||
log(lastHistory, curHistory, last(history[i+1]))
|
||||
}
|
||||
|
||||
log("last", last(history...))
|
||||
return last(last(history...)...)
|
||||
}
|
||||
|
||||
func makeHistory(in []int) [][]int {
|
||||
var history [][]int
|
||||
history = append(history, in)
|
||||
|
||||
for {
|
||||
var diffs []int
|
||||
|
||||
current := history[len(history)-1]
|
||||
for i := range current[1:] {
|
||||
diffs = append(diffs, current[i+1]-current[i])
|
||||
}
|
||||
|
||||
history = append(history, diffs)
|
||||
log(diffs)
|
||||
|
||||
if max(diffs[0], diffs[1:]...) == 0 && min(diffs[0], diffs[1:]...) == 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
return history
|
||||
}
|
||||
|
||||
func max[T cmp.Ordered](a T, v ...T) T {
|
||||
for _, b := range v {
|
||||
if b > a {
|
||||
a = b
|
||||
}
|
||||
}
|
||||
return a
|
||||
}
|
||||
func min[T cmp.Ordered](a T, v ...T) T {
|
||||
for _, b := range v {
|
||||
if b < a {
|
||||
a = b
|
||||
}
|
||||
}
|
||||
return a
|
||||
}
|
||||
func sum[T cmp.Ordered](v ...T) T {
|
||||
var s T
|
||||
for _, a := range v {
|
||||
s += a
|
||||
}
|
||||
return s
|
||||
}
|
||||
func last[T any](v ...T) T {
|
||||
return v[len(v)-1]
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
_ "embed"
|
||||
"testing"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, int(114))
|
||||
|
||||
is.Equal(result.valuePT2, 2)
|
||||
}
|
||||
|
||||
func TestInput(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result.valuePT1)
|
||||
is.Equal(result.valuePT1, int(1806615041))
|
||||
|
||||
t.Log(result.valuePT2)
|
||||
is.True(result.valuePT2 < 1806615046) // first attempt
|
||||
is.Equal(result.valuePT2, 1211)
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
.....
|
||||
.S-7.
|
||||
.|.|.
|
||||
.L-J.
|
||||
.....
|
||||
@@ -0,0 +1,5 @@
|
||||
..F7.
|
||||
.FJ|.
|
||||
SJ.L7
|
||||
|F--J
|
||||
LJ...
|
||||
@@ -0,0 +1,9 @@
|
||||
...........
|
||||
.S-------7.
|
||||
.|F-----7|.
|
||||
.||.....||.
|
||||
.||.....||.
|
||||
.|L-7.F-J|.
|
||||
.|..|.|..|.
|
||||
.L--J.L--J.
|
||||
...........
|
||||
@@ -0,0 +1,10 @@
|
||||
.F----7F7F7F7F-7....
|
||||
.|F--7||||||||FJ....
|
||||
.||.FJ||||||||L7....
|
||||
FJL7L7LJLJ||LJ.L-7..
|
||||
L--J.L7...LJS7F-7L7.
|
||||
....F-J..F7FJ|L7L7L7
|
||||
....L7.F7||L7|.L7L7|
|
||||
.....|FJLJ|FJ|F7|.LJ
|
||||
....FJL-7.||.||||...
|
||||
....L---J.LJ.LJLJ...
|
||||
@@ -0,0 +1,10 @@
|
||||
FF7FSF7F7F7F7F7F---7
|
||||
L|LJ||||||||||||F--J
|
||||
FL-7LJLJ||||||LJL-77
|
||||
F--JF--7||LJLJ7F7FJ-
|
||||
L---JF-JLJ.||-FJLJJ7
|
||||
|F|F-JF---7F7-L7L|7|
|
||||
|FFJF7L7F-JF7|JL---7
|
||||
7-L-JL7||F7|L7F-7F7|
|
||||
L.L7LFJ|||||FJL7||LJ
|
||||
L7JLJL-JLJLJL--JLJ.L
|
||||
@@ -0,0 +1,140 @@
|
||||
F---7-FJ.7--FJ7.-.7-|7F.|7FJ77F7J-|--.FLF|.F-7-F7.F.J77|--|7--|7|-J-F--7-F7.F7-F7F7F-|-|-F777L7|-.FLF|-77F7-FJF|JF--F.77J-L7-FF--7.FFF7FF7.7
|
||||
|J.F|7F|F7J.J-L-|-|.L7F7JF7-7-LJ|LJ.F7.L|.F|F7FJ7.F7.|F|L7.L7L|-F-|7|L|JFF.F||F777L|-77L-|JF7FJJJLF7LL7|.L77|L7LLLJ.|..LLL7|L7-.-JFFLL-7L-FF
|
||||
F7L7JLLJL-7FL7|F7-J7.-J.7L7J|.|-JF|FLFF7L-JLL|-F7-F|77|.|L7FJ7JJFJL7JJJFF.FJ||||JFF|LL7F-JF|.LJ7F.|F7F|J7LLL-7||||LFFFF77|-L7LL7F7-JL7|FF7L|
|
||||
JFL7FJ7.--JJ7L||.LF|7JJFLFLF7.|.LFF7-FJ|-J-77|-F.|J|LLFF-|-7JL7-J7L|JLF7-7F7|LJL-7|L7F7J-FJ|F|7|77|J-F..FJL.|F77-7F|-FJ|J7J.--7.7J.7-|-||LF|
|
||||
.|LLFJLF--J.FL|-J.F77F-77.L|L7F77F7.F|FJ7.FJ7JF7F7|F-J..7JL|..FF---|J-F|JF|||F--7|-FL7.J-J.|LFFJ-7.L7J|.7-|LJJF7L77LL||.FL--JJ|-L-F|7F-JJ|.|
|
||||
FL77J|LJFJFF7JJ|J7LJ.|.LF.LL7|||7||-FJL---7.LFJL7J7|FLF7J|F77-J|JJFJ-F-7FFJLJL-7LJ7LLLJ7JLL-7||J|||L-7|---L.FFLLFF---|F--J.|.|L.||FJ7.LLL|-J
|
||||
|L-J-JJ-F-F-J7F--7.F7F7F7FF-JLJ|FJ|JL7F-7FJ7-L7FJF-7F7||7FFF7JL7.-JLF|FJFJF7F7FJFFL-|.L-7J|FJFJ-JJ7.L|7.|7J-|J.||||LFLJ-F|F7-7|FF-L7|7-.|L7|
|
||||
7|LF|JLL|.F.F-FJF-7|||LJL7L-7F-JL7L7FJL7LJF77F|||L7||||L-7F||.7F7FLFFJL-JFJLJLJ-F|J.F-FL7.LJ||.|L.F7|.F7.7|FJ||-J|J-J7.7-7---|-LJF|7F|-77-L-
|
||||
|J.7|LF7JF|F7|L.L7|||L7F-J-F||F7FJFJ|F-JF7||F7||-F|||||F-JFJ|7J|L|F-L-7F7L-7F777.|JF77J-F7FFF777LFFF-F-7-7--LJL|-L|.FF-F.JL|.LFJ-77-F|7F77FJ
|
||||
JJ--JLJL-J|J.FLF-J|||L||F77FJ||||FJFJ|F7|||LJLJ|JFJ||||L77L7|F--7F7-F7LJ|F7|||F7F7.L|.F-JL7FJL7F---7JL7L7F7.L|F--7L-L7.J-.-7JJ|L-7L.|JFJLJF|
|
||||
|JFLJF|-77F-7.FL-7LJL-J|||FJFJ|||L7|FJ|LJ|L---7L7|FJ|LJFJ7FJLJF-J||.||F-J|LJ|LJLJ|7-J7L-7FJL7FJ|F--J--L7|||7FFF-FJ|JLL|FLFLJ.-L7FLL-|L|.7.FF
|
||||
L-77LJJ|FJ|7J.--LL----7|||L7|FJ||FJ||FJF-JF7|FJFJ|L7L7FJF7|F7FJ-FJL-J||F7L-7L7F--J.7|F-7||F7||FJL7L|-F-JLJL-7-|FJLJ77.|7.L7JF|L|7.|---|F--.F
|
||||
7JFF7||FJJJJL7J7.F-7F-JLJL-JLJFJ||7|LJFJF7|L7L7L7L7|-|L7|LJ|LJJ.L---7|LJL7FJ|||F-77LLL7||LJLJLJF-J-|LL---7F-J|||..JJF-.F7.F-7|L|7F77JFJ-L|FJ
|
||||
|-|LLJF-7LJ|LL|--L7|L7F--7F--7L-JL7L7FJFJ||FJF|FJFJ|FJFJL-7L-7F-7LF7|L7F7|L7FJ||FJF7FFJLJF-----JF-7F7F-7FJL--777-7L-|JF|77LLLL7JFJ|F-JJ.L|7|
|
||||
77LJ7F--7J7L7L|.F-J|FJ|F-J|F-JF-7FJFJL7|FJ|L7FJL-JFJ|FJF7|L7FJL7|F|||FJ|LJFJL7||L7|L7L--7L7F-7F7|FJ||L7||F---JL|-L7J.-77J-F.||JF|.L--J.--L7|
|
||||
L77--L-7J-|7LFF7L-7|L-JL-7||F7|FJL7|F-J|L-JFJL-7F7|FJL7||F-J|F-J|FJLJL7|F7L7-||L7LJFJJF7|FJL7LJLJL7||FJ||L--7F-7-|7.F.|7JL-L7J-7JFFL--JFFL.L
|
||||
..FFJL7L7-LLF7|L--JL-7F--J|LJ||L7FJ|L7F|F--JF7-LJ|||F-J||L-7LJF-JL--7FJLJ|FJFJL7|F-JF7||||F7|F----J||L7LJF--JL7|F--7LFLJ--||||FLLF7-J.FF-.F|
|
||||
F-J|7L|-77|-J7|F7F--7|L---JF-JL7|L-JFJFJL-7FJL7F7|||L7|||F7|F-JF7.F7||F7FJL7L7FJ||.FJ||LJ||LJL-7-F7||JL7FJF7F7||L-7|-FJ-7LL77-F7-F|J.F7||F-7
|
||||
LL7L77L-7-7-LLLJLJF-JL-----JF--JL--7L-JF7FJL7FJ||||L7L7|LJLJ|F7|L7||||||L-7L7||FJL-JFJL-7||F---JFJLJ|F-J|FJLJLJ|F7|L7JF7.7JL7|LF-7.F-FF77JJ.
|
||||
FF--.7.LJLL7|.|FF-JF--------JF7F7F7|F--J||F-JL-JLJ|FJFJL7F--J|LJFJ|||||L7|L7LJ||F---JF--JLJL--7JL7F-JL7FJ|F----J|||FJFJ|7JF-J-7|JL||LLLJL7-F
|
||||
7|..L-FFJJFL7FFLL-7|F---77F7FJLJLJ||L7F7LJL--7F---JL7|F7||F--JF-JFJ||||FJF7L7FJ||F--7L---7F---JF-JL7F7|L-JL7F--7|||L-JFJF7L7F7JJ.FJF-7L7J|7|
|
||||
F7.L7LJJ.FJL|F7L|7LJL7F7L-J|L----7|L7LJL7F7FFJL7F-7||||LJLJF--JF7L7||LJL7|L-JL7|LJF7|F7F-JL-7F7L7F-J|||F---J|F7||LJF--J||L7JLJ.LFLJ|LJ--7JL|
|
||||
J7-FJ.|7.|J-F7L7LF7F-J||F-7|F7FF-JL7|F--J||FJF-J|FJFJ||F7F7L--7||FJLJF-7|L---7||F-JLJ||L--7FJ|L7|L7FJLJL7F-7LJ|LJF-JF7F7L7L7||--|..|F7|LJ|F|
|
||||
|F7LF77J.LF-LJJ.FJLJF7|||FJLJL7L--7LJL7F7|||FJF7||FJFJLJ||L---J||L--7|FLJJF--J||L-7F7||FF-JL7|FJL7|L-7F-J|FJF7L-7L7FJLJL7|FJ7|F7|F.|--7-LL|7
|
||||
|L||F---F.F7LJ-FL---J||||L--7FJF7L|F--J|||||L7||||L7L-7FJL-7F-7||F7FJL7F-7L--7LJF-J|||L7L7F-J|L7FJL-7|L-7|L7||F7|FJ|F---J||F---77-|J|7L-F.L7
|
||||
-7F77JJF-|7JJ.F-F--77||LJF--JL-JL-J|F7J||||L7|||||FJF7|L7F-JL7|||||L7FJ|FJF-7L7FJF-J||FJFJL7FJFJL7F-J|F-J|FJ|||||L7|L7F7FJ||F--JJ7|.L7|F|.LJ
|
||||
.L.|L|.F-L|7|FFLL-7L7LJF7L--------7LJL-JLJ|FJ||LJ|L7|LJFJ|F7FJLJ||L-J|.||FJFJFJL-JF-J||FJF-JL7|F-JL7FJ|F7||FJLJLJFJ|FJ||L7LJ|F-7JF777.LFFJL|
|
||||
J..L.LL|J-J-|7J.LLL7L-7|L---------JF--7F7FJL7|L-7L-JL77L7LJLJF--JL7F-JFJ|L7|FJF---JF7|LJFJF7FJ|L-7FJL7||||||F----JFJL7|L-JF-J|FJ-LF77.|L||.F
|
||||
.F-.L7.|7.F7.F-7.FLL7FJL----------7L-7LJLJF7|L7FJF-7FJF7|F--7L--7FJL77L7L7|LJFJ|F7FJ|L-7|FJ|L7L--J||FJLJ||LJ|F7F7FJF-JL7F-JF7||F77.JJ-L-|-LJ
|
||||
FF|-.FFF-JJLLJL|FF--JL7F77F7F7F--7|F-JF7F7|||FJL-JFJL-JLJL-7L---JL7FJF7L7|L-7L7FJ||FJF-J||FJ7L---7L7|F--JL-7LJLJLJFJF-7||F-JLJLJ|-J7|-|F7-L7
|
||||
|L-JLLJL-J7F||.J|L---7LJL-JLJLJF7LJL7-|||||LJL7-F7|F7F---7FJF7F-7FJL7||FJ|F7|FJL7||L7L-7|||F7F7F7|FJ||F7F7FJF----7L-JFJ|||F---7FJFL7.FFJJ|F7
|
||||
..|.|F7L77LL77J|F-7F7L--------7|L--7L-JLJ|L--7|FJ||||L7F7LJ|||L7LJF-J||L7LJ||L--J||FJF-JLJ||LJLJ||L7|LJ|||L7L-7F7L--7L-JLJL7F7LJ-7F|-7.|7FLJ
|
||||
F.L|-|J.F7.|L|-LL7LJL----7F-7FJ|F-7L7F---JF7FJLJFJLJ|FJ|L--7||FJF-JF7||JL-7LJF7F-J|L7L--7FJL7F--J|FJ|F-J||FJF-J|L--7L7F7F--J|L7L|F-J|F|JLJ|J
|
||||
|F-L.|.-JL7|JF-L|L------7|L7LJFJL7|FJ|F--7||L--7|F7FJL7|F--J||L7|F-J|||F7-L-7|LJF7|FJF7FJ|F7||F7FJL-J|F7|||FJLFJF--J-|||L---JFJ.-JF|JLJ|J.JJ
|
||||
7-LJFJ7|J.F-.J77FF------JL-JF-J..||L7||F-J||FF7||||L7FJ||F7L||F||L-7|||||F7F||F7|||||||L7|||||||L7F--J||||||F7|FJF77FJ||F-7F7|F7-|FL-F.7-7J|
|
||||
F7-|7.FF-FJ-|JF7FL--7F7F7F--JF7-FJL-J|||F7||FJ|||||FJ|FJLJ|FJ|FJL7FJ||||||L7|LJLJ|||FJ|FJ||||||L7||F-7|LJLJLJLJL-JL7L7||L7||LJ|L--7J7|FL-|-F
|
||||
LJ--F7L---JFLJL-JJ-LLJLJLJF--JL7L7F77||LJLJ||JLJ||LJL|L-7.||FJL-7|||LJ||LJFJL7F--J|LJFJL7LJ||||FJ|||L||F----------7L7||L7|||F-JF--JJ-F7LLJ-J
|
||||
|.LF-JF-F|.|J7.L77|.F--7F7L---7L-J|L7|L7F--JL-7F||LF-JF7L7LJL7F-JLJF--J|F-JF-JL7F7L77L--JJFJ|||L7|LJFJ|L---------7L7||L7|||LJF7L7|7|F|L..L7J
|
||||
|7F-J7.FFLLJ|F..F7F-JF7LJL---7L---JFJL-JL--7F-JFJL7L7FJL7L-7FJL---7|F-7||F7L7F7LJ|FJF7LF--JFJ||FJL77|FJF---------J|LJL-JLJL7FJL7L--7J-J-7...
|
||||
.-J|||-|7L|7FJF7||L-7|L-7F--7|FF7F7L--7F7F-JL7FJF7|FJL-7L7FJL7F7F-J||FJ|||L7LJ|F-J|FJL7L7F7L7LJL-7|FJ|FJF--7F7F--7F-----7FFJ|JFJF--J-7.FF--F
|
||||
J7|FLJF-L7|LF7|LJL7|LJF7LJF-JL-JLJL---J||L7F7|L7|||L7F7|FJL7-LJ|L77LJ|FJ||FJF-J|F7LJF7L7|||FJ|F--J|L7|L-JF7LJLJF7LJF7F-7|FJFJ|L7|JLJF7-FJ7||
|
||||
||L7.FL|LL-L.LL7F7L7LFJ|F7L------------JL7||||-LJ|L7||||L-7L--7L7L7JFJL7LJL7L7FJ|L7FJL-J||||F7L---JJ||F--JL----SL--JLJJLJ|FJF--J|7FL-.F77.F|
|
||||
J.||F--7.J7J|-LLJL7L7L7||L---------------JLJ|L--7L7|LJ|L-7L7F-JJL7L7L7FJF--JFJL7L7|L-7F7LJLJ|L-----7LJL7F----------7F7F7|LJ7L---J777.L7LJ--|
|
||||
L-|-|..L7-|LF.LJ-LL7L7||L--------7F--7F7F77FJF-7L7||F-JF7L7|L-7.FJFJFJ|-L-7FJF-JFJ|F7LJL7F7FJF-7F-7L7F7LJF7F-7F----J|||L7.LJJFLL-7|F7JJ.||.|
|
||||
L7F-JF-F|7.F77J|-F7L7LJL7-F---7F7LJF7LJLJL7L7|-L7|||L-7|L-J|F-JFJFJFJFJF--J|LL-7|J|||F--J|||FJFJL7L7LJL--JLJFJL-----JLJFJF|..|LL7JJ-LJ-F7FJ-
|
||||
.F.|FFFF--7||F7LFJL7L7F7|FJF-7LJL7F|L-----JFJL7J||LJF-JL-7FJL7.|FJFL-JLL7F7L-7.|L7|||L---J||L7L7FJ7L7F7F-7F7L----------JJF7-.|L-.||LJ.FLJJ|.
|
||||
FJF|--JL-7||||L7L-7L7LJ||L-JFL7F7L-JFF7F7F7L-7L7|L7.L-7F7||F7L7|L-7|F---J||F-JFJFJ||L7F---JL-JFJL7F7LJLJJLJL-----7LF7F7F7|||.F-J7LJ7.7|J.L|-
|
||||
|7JL|..L||LJLJFJF7L7L7|||7F7F-J|L7F--JLJLJL-7L-J|FJF--J||||||FJ|F7|FJF7F7|||FFJFJFJ|FJL---7F--JF-J||F7-F7F------7|FJLJLJLJL-77LLF7L7-L77L.|7
|
||||
-J7.F----|F7F7L-JL7L7L-JL-JLJF7L7LJF-------7L--7|L7L7F7|||||LJL|||||FJ||||LJFJFJ7L7|L--7F-J|F7FJF-JLJL-JLJF7F--7LJL7F-------J..|JF.77LJ-J-||
|
||||
L-FFF77|-LJLJL---7|JL-7F7F7F7||FJF7L------7|F7FJ|FJ-LJ||||||7F-J||||L7LJ|L7FJFJ|F7LJLF-JL7-||LJ7L----7F---JLJF7|JF7|||F-----7.F7FF7FJ-|...||
|
||||
|7|FJL-7-F-7F7F7FJL7F-J|||||LJLJFJL-------JLJ|L7LJLF7FJ|||||FJF7|LJ|FJF-JFJL7L-7|L--7L7F7L7LJF------7|L7F----J|L-JLJL-JF-7F-J-|L-J|JL-J7.F-7
|
||||
---L7F-J7|FJ||||L-7|L--JLJ||F7F7L7F---------7L-J|F-JLJFJ||||L7|||F-J|FJF7|F-JF7|L--7L-J||FJF7|F----7|L-JL--7F7L--7F7F7FJ.|L-7-|F--J7J|LF-J-F
|
||||
L7LFJ|F7-|L-JLJL--JL7F7|F7LJ|||L7LJF----7F-7L---7L7F7FJ|||||L||||L-7|L-J||L-7|||F--JF7FJ||FJ|||F---JL------J||LF7LJLJLJF7L7FJFJL-7LF-7LL7FF7
|
||||
FL-L7|||F|F7F-7F7F-7LJL-J|7FJ||FJF7L---7|L7|F7F-J.|||L-7|||L7|||L7FJL-7FJ|F-J|||L7F7|LJFJLJFJLJL7F7F--7F----JL-JL----7L|L7LJFJF--J7|FJ.LLLLJ
|
||||
LLF-JLJL-J|LJFJ|||FL-7F-7L7L7LJL-JL----JL7|LJLJF-7LJL7FJ|||FJ||L-J|F--J|FJL7FJ|L7||||F-JF7FJLFF7LJLJF7||F------------JFJFJF7L7|JFLFF|J.L|7L|
|
||||
F-L---7F7FJF7L7|||F--JL7L7L-JF-7F7F--7F7FJL---7|FJF7FJ||LJ|L7LJJF7|L--7||7F|L7L7||||||F7|||F7FJL-7JFJLJ|L-----7F7LF7F7L7L7|L7|L77FF7|LF.F--|
|
||||
L77LJLLJ||FJL-J||||F---J||F-7|FLJLJF-J||L7F--7LJL-J|L7|F-7|FJF--JLJF7FJ|L7FJFJFJ|LJ|||||||LJ||F-7L-JF-7|LF7F7FJ|L-JLJL7|FJ|FJ|FJFLF7F7|L.FL|
|
||||
F-LJFLLFJ|L-7F7|||LJF----JL7||F----JF7|L7|L-7|F---7L7|LJFJ|L7|F7F--J||-L7|L7L7|FJF-J|||LJ|F-JLJ||F-7L7||FJLJLJJ|F--7F-J|L-JL-J|F7F|LJL7FFLJJ
|
||||
||LFJ-LL7L7FJ|||LJFFJF7F7F7||||F-7F7|||FJL-7||L--7L-JL--J.L-J|||L--7|L-7|L7|FJLJJ|F7|||F-JL7F---J|FJFJLJL------JL7FJL--JF----7LJL-JF7FJJJJJ|
|
||||
F7|JFF|.L-JL7|LJ7F7L-J||LJ||LJLJFLJLJLJ|FF7LJL---JF-----77L-FJ|L7F7||F7|L7|||JFF-J|||LJ|F--JL----JL7L7LF7F7F-7F7FJL-----J.F-7L-7F7FJLJJJ..|J
|
||||
|L--|FFF---7||F--JL---J|F-J|F-7F7F-----JFJL7F--7F7|F---7L7|||FJFLJ||||LJ|LJLJ77L-7|LJF7LJF--7LF7F77L-JFJLJLJ.LJLJF7F-7F--7|FJF7LJLJJ|J-7-7..
|
||||
J|LF-7.L--7LJ||F7F7F-7FJL--JL7|||L---7F7|F-J|F7LJLJ|F7LL7L7-||.J|LLJLJ7.-JJLFF---J|F-JL--JF7L-J|||F--7L----7F7F--JLJFJ|F-J|L-JL-7JJJ|JF7JFJ7
|
||||
|F-JF-JL|FJF-J||LJLJFJL7.F7F-JLJL-7F7LJLJ|F7||L---7LJL7JL-J7LJ7.FF|-J--7LF-7-L-7F7|L--7F7FJL7F7LJ|L7FJJF---J|LJF7F7FJF|L--JF---7L77FF7JJFFJJ
|
||||
LL7.LJ|FFJFJF-J|F---JF7|FJ|L-7F7F7LJL---7LJ||L---7L--7L---7-..F-F|.LJ7LL.7J||LLLJ|L--7||LJF7LJ|F7L-JL--JF---JF7||||L--JF--7L-7|L7L-7||J.J.77
|
||||
J..F|.|LL7|JL-7|L----JLJ|FJF-J|||L-----7L7FJ|F---JF-7|F---J-F|..L|L.|L..F|-||F7F-JF7FJLJF-JL-7LJL--7F---JF---JLJLJL7F7FJF7L-7L-7|F7LJ|JL.7L-
|
||||
.FF-J.|FJ||J.F||F-----7L||FJF-JLJF--7F7L7|L-JL----JFJ|L-77JL7J--J|FFF7|.L|-|-F-|F-J||F-7L---7|JF7F7LJF7F7L-----7F7-||LJ7|L-7|F-JLJ|F-J|.FL-J
|
||||
FF|-7.-JFLJ.FLLJL----7L-JLJFJ|F-7L-7LJL-J|F-7F-7F7FJ-L-7L-7J|...F7F7|FL7-JJL7J|LJJ|LJL7L-7F7||FJLJL--JLJL-----7LJL7|L---JF-J|L--7||L7J7--JJ|
|
||||
L-7--JLLJL|.J.F77F7F-JF7F--JF-JFJF7L----7|L7LJFJ|LJF7F7L--J-L.|.FJ|L77..7J.FF.FLJ.J7.|L-7LJLJ|L7F7F--7F------7|F--J|F-7F7L-7L---J-L-JJ|-7.F7
|
||||
FL77L||.F--J-FJL-JLJF7|||F--JF7L-JL-----J|FJF7L-JF-J||L-7J.LL7L-JL..L-J7..JFLF-|FJ.|.F7FJF7F7L7LJ||F-J|F--7F-JLJF7LLJFJ||F7L7F7||7||.L--7.-7
|
||||
JJL7-77.JJLJ.L7F---7|LJLJL---JL---------7|L-JL7-FJF-J|F-J.|.|L-|FL--77|7F7F7||.|7F-F-J|L-JLJL7|F7LJL-7||F7LJF7F7||F-7|FJ||L7LJL-7-7-7-L7J-L|
|
||||
|.-7L||-J--JFFLJF--J|F--------------7F--JL7F-7L7|FJF7||F-7F-77FJ7J|7JF7JJFL-7J-7F77|F7L------JLJL7JF7LJLJL--JLJLJLJFJLJ-LJFJF7F-J.|||..L-..F
|
||||
77|J.LF-J|.|LFF7L--7|L---7F7F-7F7F-7LJF7F7LJFL7LJL7|||LJFJ|FJF7|L777JFJ|FL7F|7..L|-LJL-7F------7FJFJL7F-7F-7F------JF7F--7L-J|L7J77F7-|.||FJ
|
||||
LFL-77|.F7-FF7||JF7LJ7F77LJLJLLJLJ|L--JLJL7F-7L---J|||F-JFJL-J|J.JLJJ|||F|JLJF-JLJ7L7|FLJ7F----JL-JF-JL7LJJLJ|F7F---JLJF-JJF7L-J-7-7F7FL7.FL
|
||||
FF|7|FL|--F-JLJ|FJL---J|F7F7.F------------J|FJ.F--7||||F7L7F--J7F7F7F-L-77FFJJJJFLL7|JFF-7L-7F7F7F7L-77L-7F7F7|LJF-----JF7FJL7F-77J|-F|7|FJJ
|
||||
||L|--.JJ|L---7LJF7F--7LJLJL7L---------7FF7|L7FJF-J||||||.|L--77.|LL7-J-7--|||-F|||-.L|L7|F7LJLJ|||F7L-77LJLJLJF7|7F7-F7|||F-J|FJF7LF-|F7J7.
|
||||
-LJ||.LL7F|JLLL--JLJ7FJF-7F7L7F--------JFJLJFJL7|JFJLJLJL-JF--JJ7L-7J-|-FJ..|7.-|F|77|F-J|||F7F-J||||F7L7F--7F7||L-JL-JLJLJL--JL-JL7|LJ-J.L7
|
||||
|F-|-J.FF7L7F||F7F---JFJFLJ|FJL7F--7F7F7|F--JF7|L-JF--7F7F-JJJL-JF|--.7L|.7FL--.L|FF-7L-7LJLJ|L--JLJLJL7|L-7|||||F--------7F----7F-J-FLJ-7-|
|
||||
F7||-F-F-JJF7-FJLJF--7L7F--JL7JLJF7LJLJ|||-F7|LJF-7L-7|||L-7.7JFLFJ-7FJ7|7L7--LF7F7L7L-7L---7|F7F--7F--JL--JLJLJLJF---7LF7LJF7F7||F77JF-7-F7
|
||||
7JF|.L--7J7F7-L--7|F-JFJL--7FJF7F||F---J|L7|LJF-JFL--JLJL--JF7.|J|.|F7F7JFJL|.F||||-|F-J|F--JLJ||F7|L--7F---7F7F7FL-7FJFJL--JLJ|LJ||F7FL7JJ|
|
||||
..F--77JJFFFJJ|.LLJL--JF---JL-JL-JLJF7F-JFJ|F7L--------7F7F7|L7JFLFLJL7L-F--LF-J|||FJL-7FJF7F-7|LJ||F7JLJF--J|LJL7F-JL-JF7F7F-7L--JLJL7FJJF-
|
||||
L7|L|LJ.77F77LF7F---7F7L--7F7F-7F---J||F7|J||L-------7FJ|LJLJFJFF-L7JF7FL|.LLL-7LJ|L--7|L-JLJL||F7||||F--JF7FJF7FJ|F---7|||LJF|F-7F--7|-J.LJ
|
||||
.F|7|L-F--|L7FJ|L--7||L--7LJLJ7LJF---J||LJFJL-------7LJFJF7F-J.L77LJ.-77-LJ..|7L7FJF--JL-7F7JFJLJLJ|||L---JLJFJLJ-||F-7|||L--7LJ-LJJLLJJF7-F
|
||||
FF.JJ7|LJ-L7|L7|F7FJ||F-7L-------JF7|FJL--JF-7F--7F7L7FJFJLJJF7JJL|J77.F7JFFF-7FJL7L----7LJL7L----7||L-------J|F7FJLJFJLJL7F7|.F7F7|.||.---J
|
||||
FJ-|7F-7F|L|L-J|||L7|LJFJF7F7F7F-7|L-JF7F-7|FJL-7LJL-JL7L7F--JL-7.77F7-|J|FJ|FJL7FJF---7L--7L-7F7FJLJF-7F7F-7F7|||F--JF--7LJ|L-JLJL7-777-|-7
|
||||
|J-77|J|F7JL7F7LJL-JL7.L-JLJLJLJJLJF--JLJ|LJL7F7L7F7-F-JFJL7F---JF7FJL--7F7FJ|F7|L7L--7|F7FJF7LJLJF-7|FJ|||FJ||||||.F7L7FJF7L7F7F7FJ.J..F||F
|
||||
|LFJFJ7LF--FJ||F7F-7FJF7F7F-7F-----JF7F7F-7F7||L7LJL7L7FJF7|L-7F7|LJF7F-J||L7LJLJFJF7J|LJLJFJ|F7F7|.LJL-JLJL-JLJLJL-JL7|L-JL7LJ||LJLF.FF7LL|
|
||||
|-7F|JF.LL.L7|LJLJFJL-JLJ|L7|L------JLJ|L7LJ|LJLL---JFJL7|||F-J|||F-JLJF7||LL--7FJFJL7|F7F7L7||||LJF7F7F7F7F7F-7F7F7F7LJF7F7L7FJL7F--7-.|7|F
|
||||
J||FF7..-7FLLJF---JF----7L-JL----------JFJF7L------7FL7FJ||||F7|LJL-7F7||||F7F-JL7L7FJLJLJ|FJLJLJ.FJLJLJLJLJ||F|||||||F7|LJ|FJL-7LJF-JFF7JF-
|
||||
J-|L--|7LL7J|-L----JF--7L------------7F-JFJL7F-7F--JF7|L7|LJ||||F---J|||LJ|||L7F7L7|L-7F7|LJF-----JF-7F----7|L7LJ||LJ|||L-7||F-7|F7|7.LJJ7||
|
||||
||JLJ7|F.|J.F-F-----JF7L-------------J|F-JF7LJJ||F-7|||FJ|F-J|||L7F-7||L7FJ||-||L7||F-J||F7JL-7F7F7|FJ|LF--JL7L-7|L-7LJ|F-J|LJFJ|||L-7.FJJ7L
|
||||
FF7-7|F7FF77.FL--7F7FJL7F------7F--7F7|L--JL--7||L7|||||F|L7FJ||FJ|FJ|L-J|FJL7||FJ||L-7|LJL--7LJLJLJL7L7L-7F7L--JL--JF7LJF7L7FJL|||F-J-F|FFJ
|
||||
F-J-7-7||-L7-F--7LJ|L-7||F-----J|F7LJLJF--7F--J||FJ||||L7|FJL7LJL7|L-JF--JL7FJLJL7LJF-JL---7FJLF-7F--JFJF-J|L--------JL--JL7|L-7LJLJJJJLL-7|
|
||||
77F.|LFJJL-|JL-7|F7L--J||L------J||F7F7L-7LJF77||L7||LJFJ||F7|F--J|F--JF-7||L--77L-7L7F-7F7||F-JFJL--7L7L--JF--------------JL--J-|JJ|-FJJ.FJ
|
||||
|L-.LF-J7JF7-F-JLJ|F--7LJF--7F7|FJLJ|||F7L7-|L7LJFJLJF7|FJ||LJL---JL--7L7|FJF--JF--JFJL7LJ||||F-J|F-7L-JF---JF7F----7|F7LF--7.F7F|J.|7L77-L7
|
||||
J-J7.LJL--F--JF--7|L7FJF7L-7|||FJF-7LJLJL7L7|FJF7|F--J||L7||F---------JFJ|L7|LF7L--7|F7L-7LJ||L--7L7L-7|L----JLJF---JFJL-JF-JFJL7--F7|LJL77|
|
||||
L-J777-F|LL---JF-J|FJL7||F-JLJLJFJ.L----7L-J|L7|LJL--7LJJ||||F--7F7.F7FL7|FJL7||F7FJLJ|F-JF7|L-7FJFJF7L----7F---JF7JFJF-7FJF7L7FJLFJ|7JLFFFL
|
||||
FFJFFJ7-F.|FF--JF7|L7FJ||L---7F7|F7F----JJF7L7|L7F---JF-7||||L7FJ|L7||F7|||F-J|LJ|L-7FJL--J||F7||JL-JL----7|L----JL7|FJ|LJ7||FJL-7L7|--77FJ.
|
||||
FJ-LL.L7F--7|F--J||FJ|.|L----J|LJ|LJ|F7-F7||FJ|FJL-7F7L7LJLJL7|L7L7LJ||||||L-7|F7|F7||F7F--J||||L7F-7F7F7FJL7F--7F7LJL77F-7|||F--J-||J-JF7L.
|
||||
|F-F7FFLL7|F||F--J|L7L7L-----7L7FJF--JL7|||LJFJL7F-J|L7L7F-7FJL7|FJF-J|LJLJF-JLJ||||||||L7F7||||FJL7LJLJLJF-JL7.|||F-7L7L7LJLJ|F7F7||J|FL7J7
|
||||
F7J.L7|-JLLLLJL7F7L-JFJF7F7F-JFJL-JF---J|||F7L--J|F7|FJ|LJFJ|7FJ||FJF-JF---JF-7FJ||||LJ|FLJ|||LJL7FJF7F--7L--7L7LJLJ.L7L7|F---J||||||F-7.7J|
|
||||
LJ-F-FJJ--J-L|LLJL7F7L-J||||F7|F---JF7F7||LJL-7F7||||L7-F7L7L7L7|||J|F-J-F7FJFJL7|||L7FJF7FJ||F--JL-JLJF7L--7L7L-----7L7LJL-7F7|||||||FJ7L7.
|
||||
LFFF7JF-7J|-FJ-F--J||F-7LJ|LJLJL----JLJLJ|F7F7||LJ|LJFJFJ|.L7L7||||FJL7F7|||FJF-J||L7|L7||L7LJ|.F-7-F--JL---JFJF-7F--J|L7F--J|||LJLJLJL-7L||
|
||||
.|J.77|F7F-.|--L-7FJLJJL-7|F7F7F--------7||LJ|||F7L7FJ-|FJF7L7LJ|||L-7LJ|||||FL-7||FJ|FJ||-L-7L7L7L7L----7.F7L-J7LJLF7-FJL---JLJF7F-7F7FJ.L-
|
||||
F.|7|-F|F--|.L|F-J|F7F-7FJLJLJLJF---7F-7LJL-7||LJ|FJ|F7||FJL7L-7|||F-JF-J|||L7F7|||L7|L7||F7FJFJFJFJLF--7L-JL-------JL7L-7F---7FJLJ.LJLJ|FF|
|
||||
|7L-J.LJ7J||-FFJF-J||L7|L-7F7F7FJF--J|FJF7F7|||F-J|FJ||||L7FJF7||||L7FJF7||L7||||||FJL7|||||L7|LL7|F7L7FJF-------7F7F7L7-||F-7LJF-7F77LL|7-F
|
||||
FFL7|FFJLF|.|L|FJF-JL-JL--J||||||L--7||FJ|||||||F-J|FJ||L7|L7|LJLJL7|L7|||L7|||||||L7FJ||||L7||F7||||FJ|FJF----7.LJ||L-JFJLJFJ|FJFJ||7LL|J.7
|
||||
F|L|-|7J-J|FL7LJ7L--------7|LJLJF7F7|||L7||||||||F-J|-||FJL7|L-7F--J|FJ|LJFJ||||||L7||FJ|||FJ|LJ|||||L7|L-JF--7L--7|L7F7|F-7L--JFJL|L7F-LJ-F
|
||||
F--..L7...F7L|J.FF---7F7F-J|F---JLJLJ||FJ||LJ|||||F7L7LJL7FJ|F7|L7F7|L7L7LL-J||||L7|LJ|FJ||L7L-7LJ|||FJ|F-7L-7L---JL7LJ|||FJF7F7L7||FJ-7|7.|
|
||||
7J|F7JL77-FJJ|.-JL--7LJLJF7|L------7FJ|L7|L7FJ|LJ||L7L-7F|L7||||FJ|||FJFJF--7LJ|L7|L-7|L7||FJF7L7L|||L7|L7L-7L-----7|F7|||L7|LJL7L-J|J-L.F-F
|
||||
7-J-7-FF-7LJ.F-F7JF-JF7F7|LJ-F-7F7FJL7L7||FJL7L77LJFJF7L7L7|LJ|||FJLJL7L-JF7L7FJFJL7FJ|FJ||L7||FJFJ|L7||FJF-JF7F---JLJLJ|L7|L--7L7F7L-7-FJFF
|
||||
L|.|LFFJ|F|JF|LLF-JF7|||LJLF7L7LJLJF7L7LJLJF7|FJF--JFJ|FJFJL-7||||F---JF-7||FJL7L-7||FJL7||FJ|||-L7L7LJ||7|F-J||LF7F7F7J|FJL7F-JF||L--J7F7..
|
||||
FL|F-J.FF-||-77JL-7|LJLJ7F-J|FJF7F7|L7L---7|||L7L7F7L7||FJF-7|||LJL7F7FJFJ|||F7|F-JLJ|F7|||L-JLJF-JFJF-JL7LJF-JL-JLJ||L7LJF7|L--7|L-77-7|.F7
|
||||
7J.FLF--JLL|F7-F-7LJF7-F7L-7LJFJLJLJFJF7F7LJ|L7L7LJ|FJ||L7L7LJ||7F-J||L7|FJ|LJ||L---7||LJ|L-7F--JF7L7L-7FJF-JF--7F-7LJFJF7||L---JL7FJ7|||-||
|
||||
|FLL7J||L|FJ7|.L7L--JL-JL-7|F7L7F--7L7||||F7L7|FJF-JL7LJ7L7L7FJL7|F7||FJ|L7|F7|L7F7FJLJF-JF-JL7F7||FJ7FJL7|F-JF-J|7|F-J7|LJL---7JLLJ..FLL--L
|
||||
JJ|.|F|FFL|FLL-LL--------7|LJL7LJF-J-LJ||||L7||L7L7F7L-7F7|FJL7FJLJ|||||L7||||L7||LJF7LL--JF7-||LJ|L-7L7FJ|L-7|F7L7||F--JF-7F7FJJ|J-F7--J777
|
||||
FLJ.LLJJ7L|7.LF7F7F------JL---JF7L-7|F-J|LJF|||FJFJ||F7||LJL7FJ|F--J||L-7LJLJ|FJ|L--JL7F---J|FJL-7|F7|-LJFJF7||||FJ|LJF7FJ||||L7FL-F|L|F7L-L
|
||||
LJL|.FL.|LL.FF|LJLJF7F7F7F---7FJL-7|FJF7L--7|||L7|FJ||LJ|F7FJL7|L--7||F7L7F--JL7L7F-7FJL7F-7LJF--J|||L--7L7|LJ|||L7|F7||L-7LJL-J-||FJFJL-JLL
|
||||
|J-|JJ|-F7|LFFJF7F7|||||||F7F|L--7|||FJ|F--J||L7||L7|L7FJ|||.FJ|F--J||||FJL--7FJFJL7LJ.FJL7|F7L--7||L7F-JL|L-7||L7||||||F7L----7|L|.F||F7||J
|
||||
|.|F7JL7|FFJFJFJLJLJ||LJLJ|L-JF7FJLJ||F|L--7||FJ|L7||FJ|FJ|L7|FJL--7|LJ||F7F7||JL-7L-7FJF-J||L7F-J||F|L--7|F7|||FJ|||LJ|||F---7|J.-7.F7.F7|.
|
||||
F7-LL.LJLJL7L-JF7F--J|F---JF7FJ||F7-LJFJF-7||||FJFLJ||-|L7L7|LJF---JL-7|||LJLJL7F7|F7||FJ.FJL7|L7FJ|FJF--JLJ||||L7||L-7LJ|L--7LJJ7LL7L7FFJ-J
|
||||
.|JJL7.7|FFLF--JLJF7FJL-7F-J||L||||F--JFJJ||||||F---JL7L7L7||F7|F-7F7FJ||L-7F7FJ||LJLJ||F-JF-JL7||FJL7L----7||||FJ||F-JF-JF-7L-7.|7.|-|FJ.L.
|
||||
|..FFLLJF7JJ|F-7F-J|L7F-J|F-JL7LJ|LJF7FJF-J|LJ||L7F7F7L7L-JLJ|LJ|FJ||L7|L7LLJ|L-JL7F-7|||F7|F--J|LJF7L7F7F-J||LJL7||L-7|F7L7|F-J7LF.|.|7|J|L
|
||||
|J77L-JL|L|7LJLLJFFJFJL--JL7F7L7FJF7||L7|F7L-7LJ-||||L7L---7JL7FJL7|L7||FJF--JF--7LJFJLJLJ||L--7L-7|L-J||L-7|L-7FJ|L7FJLJ|FJ|L-77JJF7JL7|-7|
|
||||
7.FL7J|...J7.J-LL-L7|JLFF--J||FJL7|||L-J||L7FJ7F-J||L7L-7F-JF-JL7.||FJ|||FJF-7L-7|F7L-7-F-J|F--JF-J|F7FJ|F-J|F-JL7L7||F|||L7L-7|--FFJLF|7LL|
|
||||
L-L7L-JJ7.LFJ|.LJFLLJJJFJF7FJ|L7FLJ|L7F-JL7|L-7L7FJL-JFFJL7FJF-7L7|||FJ||L7|-L7FJLJL-7L7|F7|L--7L-7|||L7LJF7LJJ|L|FJLJ-L-L7L7.LJJF.||F|F77FJ
|
||||
7|||L|-||..||-.77LF-F--JFJ|L7L7|F--JFJL--7|L7FJFJL-7F--JF-JL7|7L-JLJ||LLJFJ|F-JL----7|FJLJ||F--JF7|||L7L--J|FJJ-LLJJJ|.L--L7|J.LJF-7FJJLL7||
|
||||
.-JLFJF7L7.F|7|-7|LFJF-7|FJFJ-LJL7F7L7.F7LJFLJFJF7FJL7F7L--7LJ77LF--JL-7FJFJL-7F7F7FJ|L-7FJ||F7FJ|||L7L7F--JJ|.FLJ-JF--.LJFLJ|.LF-L|JLL|FJJ-
|
||||
FJ7F7JL|JL-LJ-L7FF-L7|FJ|L7|J-|F-J|L7L-JL7L|7.|FJ||F-J|L7F7L-7JFFJF-7F7||FJJF-J||||L7|F-J|FJLJ|L7||L7|FJL7|J7L77.|LF|JF-7F|JL7JFL7||F|F.L-|.
|
||||
F-|JJ7.JJ-|F77-LLJJ-LJL-JLLJJJFJF7|FJF---J-||7LJ-LJ|F7L7LJ|F7|F-JFJFJ|||||F-JF7|||L7||L7-||-F-JFJLJ-|||F-J-77|L--L-L|.|-F|.LLJL|.7FF7L7J--F7
|
||||
LF-.|FL-F-F|7.LFJ-|.|7|L|7J77|L7|LJL7L---7-7|FJJJ.FLJ|FJ.LLJ||L7FJLL7|||||L-7|LJLJ.||L-J-LJ-L--J7|J-||LJJL7|LF7||.LLL7J-F|-J.7-F--FJL7|F7JLF
|
||||
F-.F||..LFJLL7FJ.F|-7-77FL.JFFLLJ-F7|F---J.||7J|.F7.LLJ-7-L7LJ-|L7-LLJLJ|||F|L----7LJ7F7JLL.LJ.LFJ|.LJJL--.|-F7-77.F7J|FL|JF7JF|LJLJFJL-F.FF
|
||||
F-F||-7-FLF7JFLJ7F|-JJ.LJJJ|-JJ|JF|LJ|F7LJ-JL77-F7JFJLL7FJ.F7.LL-J7LJJJL||F-JF7F-7L---J|LFJ-.J7JJ7L||..LL-JJ7J|F||FFF.LF.|.|L-LF-JFFLJ-FJ-J|
|
||||
L7J||.L-JLLJ--7.FL-7||.F|-L7.|.|-FJF7LJ|..7-LFJ.|L7L-||L|7-|-L.|.|L|.FF7LJL7FJLJJ|F----J.|7L|--7.|.LJ-7..|JF7|L-L-7F--L|FJ7|FLL|FJ7|-7.|-|JL
|
||||
FL7F||.||7L-F--|JF-.-F-JLF7J||L..L7||F-J7J.-.|.FL|J-FLF.|J7JFL-|-7.--F|L---JL7LF-JL--7|JF-7L7.L-FJ7|LJ7F77JJ.|JL|.-LL.|L-L-|-7.||.L7-F-7.|JL
|
||||
L|7-FLJ--F77|-LJ.|--JJJL.|JLJFJF7-LJLJ-F|7L.FJ-77J..F-|-|J|F7.|LLL-7|LL--7F7FJ.L-7F--J7F7F7-JJ.LJ--FJL|FF-7LF|7.L7FFJ-J|.L.|.LFL7.LJFJFF-|..
|
||||
.|..|.|7L.L|J.LL-L-7F7-LFJ|.FF.F7.J.|L--|7.|--7|F7FJJ.|L|-L7|--JF|.|-7F|LLJ|L77LFLJ-J.J-.JJ.|||FJF|J..|-LJF-L|7L|-7L|7L7J-JJ.L-J-||-|-LJ|LLF
|
||||
LJ-F---J.F7|77JFL-||-F7||-J-LJ-FJLJF-7|F|F-JFFJ|.F--7-LJ|LFL|-7||JFF-|LF.JL|FJ7FFJL7J-|7L77F|FFJJ|7..LL-J.777F7F|JF-77J|LFFF77FL|LL-|-.LJJJ|
|
||||
.|JF|-L|.J7LJJ77|F7|7F--|-|JL7-L7LFFJ-77-J|F-JFJ7JF|J|7|F-|7|-L|||F7.|L7-F|LJJ7-|7.|FLLF7LL-FFJ|.-L--7.LF||F-J.L|F7.L7F7.F7LLJ7J|F|-|J|L|L77
|
||||
F-7|L77L..F-J7F---7J7||.|-F.LL7.|F7.JL|F7LF|-FF-LF7|-7-|.L--|...FL|L-JFF-J-.|.7F||JF||.FL7L.7||L7JJ-7FF-7|F|-|-LF--J7L7LL7JL||LF|F--LJ|-FJ|7
|
||||
L|L--JJJ-LLJ-FF.JJLLJ7-L7-JLJJ|-.F7..-|LJ.FJ.|J..L7J.L-.--JL|.-FJ-L-LL.|.JJ-FJ.F|JLLJF-7J7JJJ|7JLJ..FL--JJ-77L7.|JLL-JL-L.LL-|7-L|J.LLL-L-|.
|
||||
@@ -0,0 +1,331 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
// var log = aoc.Log
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 int
|
||||
}
|
||||
|
||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
m := &Path{s: -1}
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
_ = text
|
||||
|
||||
m.readLine(text)
|
||||
}
|
||||
dist := m.buildPath()
|
||||
// log(m)
|
||||
|
||||
r := &Region{List: m.List, w: m.w, l: len(m.m)}
|
||||
count := r.Count()
|
||||
|
||||
return &result{valuePT1: dist, valuePT2: count}, nil
|
||||
}
|
||||
|
||||
type node struct {
|
||||
value rune
|
||||
pos int
|
||||
whence int8
|
||||
left *node
|
||||
}
|
||||
|
||||
func (n *node) add(a *node) *node {
|
||||
if a == nil {
|
||||
return n
|
||||
}
|
||||
n.left = a
|
||||
return a
|
||||
}
|
||||
|
||||
func (n *node) String() string {
|
||||
if n == nil {
|
||||
return "EOL"
|
||||
}
|
||||
return fmt.Sprintf("node %s from %s", string(n.value), enum(n.whence))
|
||||
}
|
||||
|
||||
type List struct {
|
||||
head *node
|
||||
n *node
|
||||
p map[int]*node
|
||||
}
|
||||
|
||||
func NewList(a *node) *List {
|
||||
lis := &List{
|
||||
head: a,
|
||||
n: a,
|
||||
p: make(map[int]*node),
|
||||
}
|
||||
lis.add(a)
|
||||
|
||||
return lis
|
||||
}
|
||||
func (l *List) add(a *node) {
|
||||
l.n = l.n.add(a)
|
||||
l.p[a.pos] = a
|
||||
}
|
||||
|
||||
type Path struct {
|
||||
m []rune
|
||||
w int
|
||||
s int
|
||||
|
||||
*List
|
||||
}
|
||||
|
||||
func (m *Path) String() string {
|
||||
var buf strings.Builder
|
||||
n := m.head
|
||||
|
||||
buf.WriteString(fmt.Sprintf("head %d", len(m.p)))
|
||||
for n != nil {
|
||||
buf.WriteString("\n ")
|
||||
buf.WriteString(n.String())
|
||||
n = n.left
|
||||
}
|
||||
return buf.String()
|
||||
}
|
||||
func (m *Path) readLine(text string) {
|
||||
if m.w == 0 {
|
||||
m.w = len(text)
|
||||
}
|
||||
if m.s == -1 {
|
||||
if i := strings.IndexRune(text, 'S'); i != -1 {
|
||||
m.s = i + len(m.m)
|
||||
}
|
||||
}
|
||||
|
||||
m.m = append(m.m, []rune(text)...)
|
||||
}
|
||||
func (m *Path) buildPath() int {
|
||||
m.start()
|
||||
for m.next() {
|
||||
}
|
||||
return (len(m.p) + 1) / 2
|
||||
}
|
||||
func (m *Path) start() {
|
||||
m.List = NewList(&node{value: 'S', pos: m.s})
|
||||
|
||||
switch {
|
||||
case m.peek(UP) != nil:
|
||||
m.add(m.peek(UP))
|
||||
case m.peek(DN) != nil:
|
||||
m.add(m.peek(DN))
|
||||
case m.peek(LF) != nil:
|
||||
m.add(m.peek(LF))
|
||||
case m.peek(RT) != nil:
|
||||
m.add(m.peek(RT))
|
||||
}
|
||||
}
|
||||
func (m *Path) next() bool {
|
||||
var n *node
|
||||
switch m.n.value {
|
||||
case '7':
|
||||
if m.n.whence == LF {
|
||||
n = m.peek(DN)
|
||||
} else {
|
||||
n = m.peek(LF)
|
||||
}
|
||||
case '|':
|
||||
if m.n.whence == UP {
|
||||
n = m.peek(DN)
|
||||
} else {
|
||||
n = m.peek(UP)
|
||||
}
|
||||
case 'F':
|
||||
if m.n.whence == RT {
|
||||
n = m.peek(DN)
|
||||
} else {
|
||||
n = m.peek(RT)
|
||||
}
|
||||
case '-':
|
||||
if m.n.whence == LF {
|
||||
n = m.peek(RT)
|
||||
} else {
|
||||
n = m.peek(LF)
|
||||
}
|
||||
case 'J':
|
||||
if m.n.whence == LF {
|
||||
n = m.peek(UP)
|
||||
} else {
|
||||
n = m.peek(LF)
|
||||
}
|
||||
case 'L':
|
||||
if m.n.whence == RT {
|
||||
n = m.peek(UP)
|
||||
} else {
|
||||
n = m.peek(RT)
|
||||
}
|
||||
}
|
||||
if n == nil {
|
||||
return false
|
||||
}
|
||||
if n.value == 'S' {
|
||||
last := n.whence
|
||||
next := m.head.left.whence
|
||||
|
||||
switch last<<4 | next {
|
||||
case UP<<4 | UP, DN<<4 | DN:
|
||||
m.head.value = '|' // UP UP, DN DN
|
||||
case LF<<4 | LF, RT<<4 | RT:
|
||||
m.head.value = '-' // LF LF, RT RT
|
||||
|
||||
case UP<<4 | RT, LF<<4 | DN:
|
||||
m.head.value = 'J' // UP RT, LT DN
|
||||
case UP<<4 | LF, RT<<4 | DN:
|
||||
m.head.value = 'L' // UP RT, RT DN
|
||||
|
||||
case DN<<4 | RT, LF<<4 | UP:
|
||||
m.head.value = '7' // DN LF, LF UP
|
||||
case RT<<4 | UP, DN<<4 | LF:
|
||||
m.head.value = 'F' // DN LF, RT UP
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
m.add(n)
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
const (
|
||||
ST int8 = iota
|
||||
UP
|
||||
DN
|
||||
LF
|
||||
RT
|
||||
)
|
||||
|
||||
func enum(e int8) string {
|
||||
switch e {
|
||||
case ST:
|
||||
return "ST"
|
||||
case UP:
|
||||
return "UP"
|
||||
case DN:
|
||||
return "DN"
|
||||
case LF:
|
||||
return "LF"
|
||||
case RT:
|
||||
return "RT"
|
||||
default:
|
||||
return "XX"
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Path) peek(d int8) *node {
|
||||
switch d {
|
||||
case UP:
|
||||
x, y := toXY(m.n.pos, m.w)
|
||||
if y == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
p := fromXY(x, y-1, m.w)
|
||||
r := m.m[p]
|
||||
if any(r, '7', '|', 'F', 'S') {
|
||||
return &node{value: r, whence: DN, pos: p}
|
||||
}
|
||||
case DN:
|
||||
x, y := toXY(m.n.pos, m.w)
|
||||
if y == m.w {
|
||||
return nil
|
||||
}
|
||||
|
||||
p := fromXY(x, y+1, m.w)
|
||||
r := m.m[p]
|
||||
if any(r, 'J', '|', 'L', 'S') {
|
||||
return &node{value: r, whence: UP, pos: p}
|
||||
}
|
||||
case LF:
|
||||
x, y := toXY(m.n.pos, m.w)
|
||||
if x == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
p := fromXY(x-1, y, m.w)
|
||||
r := m.m[p]
|
||||
if any(r, 'F', '-', 'L', 'S') {
|
||||
return &node{value: r, whence: RT, pos: p}
|
||||
}
|
||||
case RT:
|
||||
x, y := toXY(m.n.pos, m.w)
|
||||
if x == m.w {
|
||||
return nil
|
||||
}
|
||||
p := fromXY(x+1, y, m.w)
|
||||
r := m.m[p]
|
||||
if any(r, '7', '-', 'J', 'S') {
|
||||
return &node{value: r, whence: LF, pos: p}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func fromXY(x, y, w int) int { return y*w + x }
|
||||
func toXY(i, w int) (int, int) {
|
||||
return i % w, i / w
|
||||
}
|
||||
func any[T comparable](n T, stack ...T) bool {
|
||||
var found bool
|
||||
for _, s := range stack {
|
||||
if n == s {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
return found
|
||||
}
|
||||
|
||||
type Region struct {
|
||||
*List
|
||||
inLoop bool
|
||||
count int
|
||||
w int
|
||||
l int
|
||||
}
|
||||
|
||||
func (r *Region) Count() int {
|
||||
for i := 0; i < r.l; i++ {
|
||||
if i%r.w == 0 {
|
||||
r.inLoop = false
|
||||
// fmt.Println(": ", i)
|
||||
}
|
||||
|
||||
a, ok := r.p[i]
|
||||
if ok && any(a.value, '|', '7', 'F', 'X') {
|
||||
r.inLoop = !r.inLoop
|
||||
// fmt.Print(string(a.value))
|
||||
continue
|
||||
}
|
||||
|
||||
if !ok && r.inLoop {
|
||||
// fmt.Print("I")
|
||||
r.count++
|
||||
continue
|
||||
}
|
||||
|
||||
if ok {
|
||||
// fmt.Print(string(a.value))
|
||||
continue
|
||||
}
|
||||
// fmt.Print(".")
|
||||
|
||||
}
|
||||
return r.count
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
_ "embed"
|
||||
"testing"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example1.txt
|
||||
var example1 []byte
|
||||
|
||||
//go:embed example2.txt
|
||||
var example2 []byte
|
||||
|
||||
//go:embed example3.txt
|
||||
var example3 []byte
|
||||
|
||||
//go:embed example4.txt
|
||||
var example4 []byte
|
||||
|
||||
//go:embed example5.txt
|
||||
var example5 []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample1(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example1))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
// t.Log(result.valuePT1)
|
||||
is.Equal(result.valuePT1, 4)
|
||||
}
|
||||
|
||||
func TestExample2(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example2))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
// t.Log(result.valuePT1)
|
||||
is.Equal(result.valuePT1, 8)
|
||||
}
|
||||
|
||||
func TestExample3(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example3))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
// t.Log(result.valuePT1)
|
||||
is.Equal(result.valuePT1, 23)
|
||||
|
||||
// t.Log(result.valuePT2)
|
||||
is.Equal(result.valuePT2, 4)
|
||||
}
|
||||
|
||||
func TestExample4(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example4))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
// t.Log(result.valuePT1)
|
||||
is.Equal(result.valuePT1, 70)
|
||||
|
||||
// t.Log(result.valuePT2)
|
||||
is.Equal(result.valuePT2, 8)
|
||||
}
|
||||
|
||||
func TestExample5(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example5))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
// t.Log(result.valuePT1)
|
||||
is.Equal(result.valuePT1, 80)
|
||||
|
||||
// t.Log(result.valuePT2)
|
||||
is.Equal(result.valuePT2, 10)
|
||||
}
|
||||
|
||||
func TestInput(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
// t.Log(result.valuePT1)
|
||||
is.True(result.valuePT1 != 51)
|
||||
is.Equal(result.valuePT1, 6649)
|
||||
|
||||
t.Log(result.valuePT2)
|
||||
is.True(result.valuePT2 != 0)
|
||||
is.Equal(result.valuePT2, 601)
|
||||
}
|
||||
|
||||
// first: 51 false
|
||||
@@ -0,0 +1,10 @@
|
||||
...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....
|
||||
@@ -0,0 +1,140 @@
|
||||
..............................#.........................#.......................#..............................#.........................#..
|
||||
....#.....#...................................#.............................................................................................
|
||||
.....................................#..................................#...................................................................
|
||||
...................................................#....................................................................#...................
|
||||
...............................................................#..................#...............................#.........................
|
||||
...............#.......................................#...................................#.....#.......#.........................#........
|
||||
............................................................................................................................................
|
||||
............................................................................#...............................................................
|
||||
.......#.......................#....................#.......................................................................................
|
||||
........................#..................#....................................................................#...........................
|
||||
..#.......................................................#.........#....................#....................................#.............
|
||||
..............#...........................................................#..........................................................#......
|
||||
......................................#...........................................#..........................#..............................
|
||||
.....................................................#.........#..........................................................................#.
|
||||
#.......#....................................#.................................................#............................................
|
||||
..............................#.......................................#..............#....................#..........#......................
|
||||
....#...................................#...................................................................................................
|
||||
....................................................................................................#.......................................
|
||||
.....................#...........#...............................................#..................................................#.......
|
||||
...............................................#.........#..................................................#..................#............
|
||||
..........................................................................#...............#........................#........................
|
||||
.................#.......................................................................................................#..................
|
||||
......................................................................................#..................#..............................#...
|
||||
.............#...................................................................................#..........................................
|
||||
#...........................#..........#....................................................................................................
|
||||
.........#........................................................................#...............................#.........................
|
||||
.....................#.........................#.....................................................#....................#......#..........
|
||||
.....................................................................#......................................................................
|
||||
................................#.....................................................................................................#.....
|
||||
...............#..........................................#.................#................#..............................................
|
||||
....................................#...........................#...........................................#...............................
|
||||
.......#...................#................#.......................................#..............................#......................#.
|
||||
......................#.................................................#................................................#..................
|
||||
....................................................#......................................#............#...................................
|
||||
.............#........................#..........................................................#.............#............................
|
||||
...................#..............................................................#.........................................................
|
||||
.........................................................#..................#..........#....................................................
|
||||
........................#.....................#..............................................#.........................................#....
|
||||
.................................................................#.........................................#...................#............
|
||||
...................................................#........#.....................................#......................#..................
|
||||
.........#....................#.......#................................................................#............#.......................
|
||||
#.............................................................................#.....................................................#.......
|
||||
..................#.......#.................................................................................................................
|
||||
.............#........................................................#........................#................#..........#..............#.
|
||||
.....................................................#......................................................................................
|
||||
.......#...............#.................#......................#................#..........................................................
|
||||
...................................#.....................................................#............................#.....................
|
||||
............................................................................................................................................
|
||||
...............................#........................................#.........................#.........................................
|
||||
.....#.........#...............................#...................#.....................................................................#..
|
||||
............................................................................................................................................
|
||||
..........#......................................................................#..........................................................
|
||||
.........................................#.............................................#......#...................#...................#.....
|
||||
........................#.....#........................................................................#....................................
|
||||
...................................................#.....#...................#..............................................................
|
||||
....................................................................#...............#....................................#........#.........
|
||||
...........................#..............................................................#.................................................
|
||||
...#........................................#.........#.......................................................#..............#..............
|
||||
..........#....................................................#................#...........................................................
|
||||
..................................#..................................................................................#...............#......
|
||||
.................#..........................................................................................................................
|
||||
............................................................................................................................................
|
||||
............................#.............#................................#.........................#.....................#................
|
||||
.........#.........................................#............#.........................#............................................#....
|
||||
....#................................................................#.........................#..............#.............................
|
||||
...................#......................................#.................................................................................
|
||||
..............................#......#..............................................#..............#................#.......................
|
||||
.............................................................................#..............................................................
|
||||
.......#.........................................................................................................................#..........
|
||||
..............#............#....................#...................#............#.......#.................................#................
|
||||
................................#......................#................................................#.................................#.
|
||||
............................................................................................................................................
|
||||
.#......................#......................................#...............................................#............................
|
||||
........................................................................#............................#......................................
|
||||
..................................................#..........................#..........................................#.......#...........
|
||||
.........................................#..........................................#....................#..............................#...
|
||||
......#...............#.................................#...................................................................................
|
||||
....................................#.......................................................................................................
|
||||
...............................................................#................#........#.........................#..........#.............
|
||||
..#........#.....#..........#...................#...................................................#.......................................
|
||||
.......................................#...........................#...........................................#............................
|
||||
.............................................................................#..............................................................
|
||||
.......................#..................................#............#...............#.......#.....................................#......
|
||||
............................................................................................................................................
|
||||
............#.....#................................#...........#...................................................#............#...........
|
||||
...........................................#..............................................#.................................................
|
||||
..................................#..............................................#.....................#....................................
|
||||
..................................................................#.........................................................................
|
||||
...#..........................#............................................#................................................................
|
||||
.......................................................#..........................................#........#........#.......................
|
||||
.......................................#.................................................................................#......#...........
|
||||
.................................................#..........#.........#.......................#.............................................
|
||||
............................................................................................................................................
|
||||
....#...........#........................................................................................#.......#...........#..............
|
||||
......................#...........#.......#....................#..............#.....#.......................................................
|
||||
.........#...............................................................................#..................................................
|
||||
..................................................#.........................................................................................
|
||||
...................#......................................#...........................................#...........................#......#..
|
||||
.............#..........#.....................#....................#........................................................................
|
||||
...............................................................................#.....#.....#.................#......#.......................
|
||||
...#.........................#...................................................................#........................#.................
|
||||
............................................................................................................................................
|
||||
.......#.........#..........................................#...............................................................................
|
||||
.................................#..............................................................................................#...........
|
||||
........................................................................#..............#.......#..................#........................#
|
||||
.#...................................#......#......#........................................................................................
|
||||
............................................................................................................................................
|
||||
.............#................#............................................................#..............#.................................
|
||||
......#.....................................................#.......................#................#...............................#......
|
||||
...................#..............................................#.......................................................#.................
|
||||
....................................#.....................................#.................................................................
|
||||
........................................................................................................#.......#...........................
|
||||
....#.....................................#...............#...................#...............#.........................................#...
|
||||
.....................................................................................#......................................................
|
||||
....................................................#...........#......................................................#............#.......
|
||||
........................#...................................................................................#...............................
|
||||
............................................................................#.....#.........#......................#........................
|
||||
...#.....#.....#.......................#....................................................................................................
|
||||
............................................................................................................................................
|
||||
......................................................................#.....................................................................
|
||||
......................................................................................#............#..........................#.............
|
||||
.....#.............#.........................................................#................#.............................................
|
||||
..............................#..........#............#.....#...........................................................#.............#.....
|
||||
........................................................................#................#..................................................
|
||||
..................................................................................#.........................................................
|
||||
......................#.............#....................#........................................................#.........................
|
||||
.................#................................#.............#.............#.............................................................
|
||||
............................................................................................................................................
|
||||
...#..........................#.............#....................................................#.......#...............#.........#........
|
||||
........#...........#.................#..................................................................................................#..
|
||||
..............#.................................#.....#..........................................................#..........................
|
||||
...........................................................#......#.........................................................................
|
||||
............................#..................................................#.....................................#......................
|
||||
...................................................#.......................................#................................................
|
||||
.#................#................#...............................................#...........................................#.....#......
|
||||
.............#....................................................................................................#.........................
|
||||
.........................#...........................................#.....#......................#..........#..............................
|
||||
........................................#...................#...........................................#...................................
|
||||
...#......#............................................................................#....................................................
|
||||
...............................................#.......................................................................#....................
|
||||
@@ -0,0 +1,197 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
// var log = aoc.Log
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 int
|
||||
}
|
||||
|
||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
m := NewMap()
|
||||
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
m.readLine(text)
|
||||
}
|
||||
|
||||
return &result{
|
||||
valuePT1: m.expand(1).sumPaths(),
|
||||
valuePT2: m.expand(999_999).sumPaths(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
type Map struct {
|
||||
rows int
|
||||
cols int
|
||||
|
||||
emptyRows map[int]bool
|
||||
emptyCols map[int]bool
|
||||
|
||||
*aoc.List[rune]
|
||||
}
|
||||
|
||||
func NewMap() *Map {
|
||||
return &Map{
|
||||
emptyRows: make(map[int]bool),
|
||||
emptyCols: make(map[int]bool),
|
||||
List: aoc.NewList[rune](nil),
|
||||
}
|
||||
}
|
||||
func (m *Map) String() string {
|
||||
buf := &strings.Builder{}
|
||||
fmt.Fprintf(buf, "Map size %d x %d\n", m.rows, m.cols)
|
||||
fmt.Fprintln(buf, "empty rows:", all(m.emptyRows))
|
||||
fmt.Fprintln(buf, "empty cols:", all(m.emptyCols))
|
||||
|
||||
n := m.Head()
|
||||
for n != nil {
|
||||
fmt.Fprintln(buf, toXY(n.Position(), m.cols), n.String())
|
||||
n = n.Next()
|
||||
}
|
||||
|
||||
for row := 0; row < m.rows; row++ {
|
||||
for col := 0; col < m.cols; col++ {
|
||||
if n := m.getRC(row, col); n != nil {
|
||||
buf.WriteRune('#')
|
||||
} else {
|
||||
buf.WriteRune('.')
|
||||
}
|
||||
}
|
||||
buf.WriteRune('\n')
|
||||
}
|
||||
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
func (m *Map) readLine(text string) {
|
||||
if m.cols == 0 {
|
||||
m.cols = len(text)
|
||||
}
|
||||
|
||||
emptyRow, ok := m.emptyRows[m.rows]
|
||||
if !ok {
|
||||
emptyRow = true
|
||||
}
|
||||
|
||||
row := []rune(text)
|
||||
for col, r := range row {
|
||||
emptyCol, ok := m.emptyCols[col]
|
||||
if !ok {
|
||||
emptyCol = true
|
||||
}
|
||||
|
||||
if r == '#' {
|
||||
m.Add(r, fromXY(col, m.rows, m.cols))
|
||||
emptyCol = false
|
||||
emptyRow = false
|
||||
}
|
||||
|
||||
m.emptyRows[m.rows] = emptyRow
|
||||
m.emptyCols[col] = emptyCol
|
||||
}
|
||||
|
||||
m.rows++
|
||||
}
|
||||
func (m *Map) getRC(row, col int) *aoc.Node[rune] {
|
||||
return m.List.Get(fromXY(col, row, m.cols))
|
||||
}
|
||||
func (m *Map) expand(rate int) *Map {
|
||||
newM := NewMap()
|
||||
|
||||
newM.rows = m.rows + rate*len(all(m.emptyRows))
|
||||
newM.cols = m.cols + rate*len(all(m.emptyCols))
|
||||
|
||||
offsetC := 0
|
||||
for col := 0; col < m.cols; col++ {
|
||||
if empty, ok := m.emptyCols[col]; ok && empty {
|
||||
for r := 0; r <= rate; r++ {
|
||||
newM.emptyCols[offsetC+col+r] = true
|
||||
}
|
||||
offsetC += rate
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
offsetR := 0
|
||||
for row := 0; row < m.rows; row++ {
|
||||
if empty, ok := m.emptyRows[row]; ok && empty {
|
||||
for r := 0; r <= rate; r++ {
|
||||
newM.emptyRows[offsetR+row+r] = true
|
||||
}
|
||||
offsetR += rate
|
||||
continue
|
||||
}
|
||||
|
||||
offsetC := 0
|
||||
for col := 0; col < m.cols; col++ {
|
||||
if empty, ok := m.emptyCols[col]; ok && empty {
|
||||
offsetC += rate
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
if n := m.getRC(row, col); n != nil {
|
||||
newM.Add('#', fromXY(offsetC+col, offsetR+row, newM.cols))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return newM
|
||||
}
|
||||
func (m *Map) sumPaths() int {
|
||||
var positions []int
|
||||
|
||||
n := m.Head()
|
||||
for n != nil {
|
||||
positions = append(positions, n.Position())
|
||||
n = n.Next()
|
||||
}
|
||||
|
||||
var paths []int
|
||||
|
||||
for i := 0; i < len(positions); i++ {
|
||||
p := positions[i]
|
||||
pXY := toXY(p, m.cols)
|
||||
|
||||
for j := i; j < len(positions); j++ {
|
||||
c := positions[j]
|
||||
if c == p {
|
||||
continue
|
||||
}
|
||||
|
||||
cXY := toXY(c, m.cols)
|
||||
|
||||
path := aoc.ABS(cXY[0]-pXY[0]) + aoc.ABS(cXY[1]-pXY[1])
|
||||
paths = append(paths, path)
|
||||
}
|
||||
}
|
||||
return aoc.Sum(paths...)
|
||||
}
|
||||
|
||||
func all(m map[int]bool) []int {
|
||||
lis := make([]int, 0, len(m))
|
||||
for k, v := range m {
|
||||
if v {
|
||||
lis = append(lis, k)
|
||||
}
|
||||
}
|
||||
sort.Ints(lis)
|
||||
return lis
|
||||
}
|
||||
func fromXY(x, y, w int) int { return y*w + x }
|
||||
func toXY(i, w int) [2]int { return [2]int{i % w, i / w} }
|
||||
@@ -0,0 +1,41 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 374)
|
||||
is.Equal(result.valuePT2, 82000210)
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 9627977)
|
||||
is.Equal(result.valuePT2, 644248339497)
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
???.### 1,1,3
|
||||
.??..??...?##. 1,1,3
|
||||
?#?#?#?#?#?#?#? 1,3,1,6
|
||||
????.#...#... 4,1,1
|
||||
????.######..#####. 1,6,5
|
||||
?###???????? 3,2,1
|
||||
@@ -0,0 +1,1000 @@
|
||||
?#.??????#??#?#?#?#? 1,1,15
|
||||
.???#??.????#?? 6,5
|
||||
???????#?#?#?#??#?? 1,1,6,1,1,2
|
||||
##?..???#?????# 2,1,7
|
||||
.?????????? 2,2
|
||||
??????##????#?.?.??. 1,7,4,1,2
|
||||
?.???..???.?..?## 2,1,1,3
|
||||
??...??.??? 2,2
|
||||
????????#?#????#.?? 1,1,7,1,1
|
||||
.#..??##?.#.?? 1,4,1,1
|
||||
???#????????.???#??. 1,1,5,6
|
||||
.?.??.?#?#?.???#?? 4,2
|
||||
.??#??#?.??.# 2,2,1,1
|
||||
#.??..?.????.??? 1,2,1,2,1
|
||||
?.?.?#??.???##??#. 1,1,1,2,2,1
|
||||
?????.??.??? 1,1,1,1
|
||||
..?????.????? 2,1
|
||||
#?##??.??#??#?..?? 6,3,2,1
|
||||
.???????#?####??#.# 1,13,1
|
||||
?.#??.????#?.? 3,4
|
||||
.??.#??#.????????? 1,1,1,4,1,1
|
||||
???#???????#??#.??? 1,12
|
||||
???????#??? 1,3
|
||||
???????.??##???.. 1,6
|
||||
??????.?#.? 3,1,2
|
||||
?#.#?????????? 1,1,3,1
|
||||
?????????? 1,3
|
||||
?????#?????#? 4,4
|
||||
????????.?# 1,2,1
|
||||
?..?????.?.. 1,2,1,1
|
||||
.?#??#..???##????.#. 5,6,2,1
|
||||
?..?#?#????#?# 1,7,1,1
|
||||
????#?#?..???? 1,6,2
|
||||
.#???.?????. 2,3
|
||||
???#.?.#??.?##?????# 2,3,2,3
|
||||
.??????#???. 1,2,2
|
||||
???##???????##?. 6,1,1,3
|
||||
??????????..##.? 5,2
|
||||
#.#?#??#????.?#? 1,3,6,2
|
||||
??#?????#??? 1,2,2
|
||||
#?#.???#..#?? 3,1,2,3
|
||||
.#?????????#??????. 5,8
|
||||
.?#??.#????????? 2,1,2,1,1
|
||||
..?????.#?##?.#.#?? 2,1,5,1,2
|
||||
?#????#???#?#?? 1,1,6,1
|
||||
.?????#?????? 1,3,5
|
||||
.#.?.??#?#?#??#?#?#. 1,12
|
||||
#???.#?????.????#?# 1,1,1,1,2,5
|
||||
?.???????.#?????#??? 1,1,3,7,1
|
||||
?????????? 1,1,2
|
||||
..????#??#?????.?.? 1,10
|
||||
???#?###?#??????##.? 8,6
|
||||
..???????#??#????. 11,1
|
||||
.?#?.?????. 2,4
|
||||
?.###??##?..?????? 7,4
|
||||
#??????#????##????#? 1,3,1,5,1
|
||||
???#.?.???????#??#? 1,2,1,1,6
|
||||
??#???#?#?##??? 4,7,1
|
||||
?##?.??.??? 2,1,2
|
||||
??.??.??###? 1,1,1,3
|
||||
?#..#???.#??????? 1,4,7
|
||||
??#?.??##.? 1,3
|
||||
.??#??..???.?? 5,3
|
||||
??????.?#??#???#?? 2,1,2,5,1
|
||||
.????#?.??? 2,1
|
||||
.#??##??#????#.?.? 9,1,1,1,1
|
||||
??.???????.??.?#?#. 2,1,5,2,1,1
|
||||
??????????#??#?#? 1,14
|
||||
??#???##?. 1,4
|
||||
?..#????.##?#?. 4,4
|
||||
??#??#???.?????? 8,1
|
||||
?.#.#??.??#.## 1,3,1,2
|
||||
???##?#?.##??. 5,2,1
|
||||
?.???..?..??????#? 1,1,1,1,1,4
|
||||
?#????????????? 12,1
|
||||
??????##??.#????? 6,1,3
|
||||
????#???#?.?? 1,2,4,1
|
||||
????????????#??? 1,1,8
|
||||
?????##?.?#? 1,3,2
|
||||
??????.#..?????#. 4,1,2,2
|
||||
?#?#????????? 2,2,4,1
|
||||
..#?.????? 1,1
|
||||
??#??#...?. 5,1
|
||||
?????.???? 3,3
|
||||
?????##.????. 1,3,1
|
||||
..?.?????????? 1,8
|
||||
?#?#?#??.#??#.? 1,1,1,1,4
|
||||
?#?????????## 2,1,7
|
||||
#?##?##??.?.?#.?#.? 8,1,1,1
|
||||
?????#???.##??.?.. 4,1,2,1
|
||||
?#?#??#.?????????.# 4,1,2,3,1,1
|
||||
??#?#?#???.????#???. 1,1,1,1,1,7
|
||||
?????#??????????? 10,2,1
|
||||
???????.?? 4,1,1
|
||||
?..????.?????###? 1,3,8
|
||||
???#????#??#??#.? 6,1,5,1
|
||||
#.????..#? 1,2,1
|
||||
.#?.#?#.??.?###?. 2,3,1,4
|
||||
????##???????.?# 1,5,1,2
|
||||
.##??##???????.? 7,2,1
|
||||
???#?#.??????? 3,4
|
||||
.?##.?.????.? 3,3
|
||||
#.???#.?????#???.#. 1,4,4,1,2,1
|
||||
.?.?.##?##??#?? 1,1,6,1,1
|
||||
????#.?#?#?.?.. 2,4,1
|
||||
???????#?.?? 9,1
|
||||
????.#.#.??.????.#? 1,1,1,1,4,1
|
||||
?.?#??????????#??# 1,4,10
|
||||
.?.?????????#??? 1,10
|
||||
.?#??#????#?..?## 5,3,2
|
||||
#?#?.?#??? 1,2,3
|
||||
???????#??.?????. 1,7,1,1,1
|
||||
?.??#?.???????##??. 1,4,2,1,4
|
||||
?#??#?#???#??# 1,3,3,1
|
||||
.?.??#.???.????.???? 3,2,4
|
||||
??#????.?. 2,1,1
|
||||
?..??#?.#???.?.?# 1,2,3,1,1
|
||||
##??#????????## 3,1,4,2
|
||||
??????#?.????.#??#? 2,2,4,4
|
||||
#???????##????## 1,1,11
|
||||
#???#?#??#.#??.?#?. 1,5,1,2,3
|
||||
?##..??.????????? 2,2,3,3
|
||||
..??#??#???.?? 2,3
|
||||
#???.??#?.???.?##?? 1,2,2,1,4
|
||||
??##?#????.??? 1,5,2,1
|
||||
??###?????.??? 8,2
|
||||
????????.?#???? 1,1,1,1,2
|
||||
??#?????#?#?.#???.#? 4,1,5,2,1,1
|
||||
.????.?????# 1,1,1,1
|
||||
..???.?.???.? 3,2
|
||||
??#??.????. 4,2
|
||||
???#?????#????? 1,1,3,1
|
||||
.#??#??.?#?###? 4,5
|
||||
??#??#??..??.????? 2,1,2,3
|
||||
???#??????##??### 2,1,1,7
|
||||
????.??#??????.???? 2,1,9,1,1
|
||||
.#?.###????? 2,4,2
|
||||
.####?.?.?# 4,2
|
||||
.?##??????##.?. 7,3,1
|
||||
????.?##??# 1,5
|
||||
###??#?#????????.. 8,6
|
||||
?.???#????.?.?#????? 6,1
|
||||
????..?????? 2,1,1,1
|
||||
.????##.????. 6,1
|
||||
?#??????????? 3,1,1,1
|
||||
??.???#????#?##?. 1,13
|
||||
?.?#??#?##???.???..? 9,1,1,1
|
||||
??#?#?#.?#???? 7,4
|
||||
??###???????. 6,2,1
|
||||
??##?#.???.?##?? 3,1,2,3,1
|
||||
????????.#?##?????.? 1,2,1,4,4,1
|
||||
??.??????????.?????? 9,1
|
||||
.#?.?#???#?????.# 1,8,1
|
||||
??.?????#????# 1,2,1,2
|
||||
??#.??#..#?? 1,1,2,3
|
||||
#?..??##??#?? 2,8
|
||||
????#???#????# 10,1
|
||||
????????#?#??? 1,6
|
||||
???????.??.#????## 1,4,1,1,1,2
|
||||
???#?????.??#.??.?? 1,3,2,3,2,1
|
||||
?.?.#???#??#?????? 2,7
|
||||
..#?.?.??#? 1,3
|
||||
???#?#??..???.?? 5,1,1,1
|
||||
.????#?.??##??#?# 4,7
|
||||
???#???#?##?????? 2,6,5
|
||||
.?##?#?##??#?#?.???# 2,1,8,1,2
|
||||
???????.?#???? 3,4
|
||||
#.?#??????.??? 1,4,1,1
|
||||
?????#???.. 1,5
|
||||
.#???#???????#?#?? 1,1,6,2
|
||||
#???####.#??.??? 1,5,3,1
|
||||
??#??..#?.?? 3,2
|
||||
?#.????#??#.#? 1,1,6,2
|
||||
..?##?.?#??.#?? 3,4,2
|
||||
?..?????.? 1,2,1
|
||||
..??#??#??#????.#? 11,2
|
||||
????????.????##??? 1,2,1,6,1
|
||||
???????#??#.?.?#??? 10,3
|
||||
.#.???#.?. 1,2
|
||||
??????#???#..?? 2,3,1,1
|
||||
?????###?.??????.?# 9,1,1,1,2
|
||||
??##????.?????????? 8,1,1,3,1
|
||||
??##??.#?.#??# 3,1,1,1
|
||||
?#???.?##?????..? 3,5,1,1
|
||||
#??????????.#???#??? 5,1,3,2,2,1
|
||||
??.#..????????? 1,6
|
||||
?.?#??#??..?? 3,1,1
|
||||
??????.?..???. 3,1
|
||||
??#???#??.??? 8,3
|
||||
??????.#??????? 3,5
|
||||
??#..?#?.???#?.. 3,2,4
|
||||
????..???#? 3,3
|
||||
?.#????????.??.#??# 4,1,2,1,2,1
|
||||
??.?##???##???? 1,3,6
|
||||
#?#.??#?.?### 1,1,3,4
|
||||
?.#?.??#?????? 1,2,6
|
||||
??.#.?.?????????#? 1,1,7,1
|
||||
?.???##???#.?? 5,2,1
|
||||
????????#?#..# 7,1,1,1
|
||||
?#?.??.?????.??# 2,2,3,1,1
|
||||
.??#?####??????? 10,1
|
||||
.????.##??????#??#. 4,12
|
||||
.?.??#?##???#? 6,2
|
||||
????##????? 1,3,3
|
||||
?#?.????#??#???????# 2,11,4
|
||||
??..???.??. 1,2,1
|
||||
????????#??.?????.?? 2,4,2,1
|
||||
??????#??..#?? 1,1,5,1
|
||||
???.#???#? 1,4
|
||||
???.???????????? 1,1,1,3,1
|
||||
??#???..?#?#?? 2,1,6
|
||||
?.??#?.??.?.???.?? 1,4,1,1,1,1
|
||||
.?.??.?##??#. 1,2,4,1
|
||||
????.#???????##??# 1,1,1,8,2
|
||||
?.?#????.?.#??#?#?#? 1,1,1,1,1,9
|
||||
??##??##??#???? 3,2,1,1
|
||||
#?.?.?#??#??#.? 1,1,6,1,1
|
||||
?????.?????? 1,2,2,2
|
||||
.???#??????#??#?. 5,7
|
||||
.????##?#?#????.??? 8,1
|
||||
?.??#?#???.#????. 1,6,1,1
|
||||
.?.????.?.?.#???#?? 1,1,1,1,1,6
|
||||
??##??##.????????.. 7,3,1
|
||||
..#?.###?#??????#?#? 1,8,3
|
||||
???##..???? 2,2
|
||||
?.???#???????##?##? 1,6,6
|
||||
?...?..?#?.? 1,1,1,1
|
||||
???#??#?.?#?. 1,2,1,2
|
||||
??????????.???????.. 3,4
|
||||
?????.?????.?#?#?# 3,1,4,6
|
||||
?#???.?????..# 3,2,2,1
|
||||
#?.#???#???.?#? 2,1,2,1,1
|
||||
?.#????#?#??? 1,3,1,1
|
||||
.?#???.??? 4,2
|
||||
??????##?????.#?? 2,6,2,1,1
|
||||
#??#?#??????. 1,2,5,1
|
||||
?#??##???.??#????.? 2,3,1,1,1,1
|
||||
#.?????#?#..#? 1,1,5,1
|
||||
.??.#.?#???? 1,5
|
||||
?##??#?????. 7,1,1
|
||||
??.???.??# 2,2
|
||||
?.????.#??##??#???#? 1,1,1,2,5,4
|
||||
???????#???? 4,1,2
|
||||
?#.?.????????? 2,1,4,1
|
||||
#????##?#??????.?.?? 1,2,10,1,1
|
||||
##?.#???#??????? 2,1,1,8
|
||||
???.?????????# 2,1,1,5
|
||||
???#.??#??.?.??. 1,2,4,1,2
|
||||
??#?#?##???.# 1,8,1
|
||||
???..#?????????#? 1,1,1,6
|
||||
??##??..??????#?.? 1,2,1,2,5,1
|
||||
???#??###?#.?? 2,5,1
|
||||
?#?#????.????##? 5,2,6
|
||||
?##??.???.??##?###?? 2,3,1,6,1
|
||||
#####????????.? 5,6
|
||||
.?.??#?.#?.?? 4,2
|
||||
?#????.??#?. 5,2
|
||||
????#??.####?. 5,5
|
||||
???????##?#???#?.#?. 2,11,1
|
||||
??###?#??????.??.## 4,1,2,1,2,2
|
||||
?####????#.??#.? 7,1,1,1
|
||||
????#?.#?? 4,2
|
||||
??.??..??#????? 2,2,6,1
|
||||
#??????#?#?..??? 1,1,7,1
|
||||
#?????????????#??# 1,1,1,1,6,1
|
||||
?#??.?????.???.# 3,4,1,1
|
||||
??#????????.?#????? 1,4,3,7
|
||||
??????.??.#????????? 2,1,1,1,5
|
||||
?..??##.?# 4,1
|
||||
??#???.#?? 4,1
|
||||
?.??????????????? 1,2,6,4
|
||||
.???.#????.?# 1,2,2
|
||||
.##?#?????# 4,1,2
|
||||
.??#?##.?#?#?##.. 6,6
|
||||
???.?#?###??? 1,8
|
||||
??#?#?#??.?.??#?? 7,4
|
||||
????##????#?????#? 14,2
|
||||
.#.#?#??.?..???? 1,5,1,1,1
|
||||
#?#?????#?.???#???? 10,5
|
||||
?????#?..?.??. 5,1
|
||||
?#?#????#? 5,3
|
||||
??##.???.???# 2,1,3
|
||||
?#?.?????? 2,1,3
|
||||
.????#???? 3,1
|
||||
?????.???..? 3,1,1
|
||||
???????#?????? 7,3
|
||||
?????????# 3,1
|
||||
????.??#???.?? 2,4
|
||||
??????????#?? 1,8
|
||||
???#??????##??#?..?. 14,1
|
||||
????.????????.???. 1,1,1,1,1,3
|
||||
?#????#???? 2,4,1
|
||||
##?????#?. 3,2
|
||||
??#???..?#.???? 2,2,1
|
||||
??#???????##.?? 2,2,4,1
|
||||
?#???#?#.?# 8,1
|
||||
.??????.?? 1,1,1
|
||||
?#??##?????????? 6,2,2,1
|
||||
#????..##???? 1,1,2,1
|
||||
????##???#?.???..? 10,1,1
|
||||
??????#????# 4,6
|
||||
??.??#.??.? 1,1
|
||||
.?.?.?##??.#???? 1,4,3,1
|
||||
????#?...??##??#?#?? 4,8
|
||||
?#?????#????.??????? 12,1,1,2
|
||||
?###??????#? 6,4
|
||||
#.?#?#?#??#?#? 1,1,9
|
||||
?.???##??#??#??????? 11,3
|
||||
?#????#????????...# 3,3,3,3,1
|
||||
.#?..#?.#???? 2,1,2,1
|
||||
??..?#.??????? 1,2,3,1
|
||||
?#..??#??#??? 2,8
|
||||
??#???.???##?. 1,3,1,4
|
||||
????#?#?#?#?.??.# 3,8,1,1
|
||||
??????#??? 2,1
|
||||
#??????#??#.#??# 5,5,1,1
|
||||
?.???.?##??? 2,3
|
||||
?????????.?? 1,1,1,1
|
||||
????????#????.#??? 1,1,6,3
|
||||
?##.???.?##? 3,1,2
|
||||
?????????????????#? 1,1,1,1,1,5
|
||||
???#.?#.??##???? 2,1,4
|
||||
.????.?..? 1,1,1
|
||||
??????.##?#?? 1,1,4
|
||||
?#???.???? 2,1,2
|
||||
#????#??#?#..?? 11,1
|
||||
?..????###?????#? 1,1,4,1,2
|
||||
?.#???#???#??. 1,9
|
||||
.???#????..???.? 3,2
|
||||
???.??#???.???? 1,1,6,1,1
|
||||
???##???#? 2,2,3
|
||||
???????#????.??#?? 1,4,2,2,1
|
||||
#.#??#??????#? 1,4,1,4
|
||||
.??#?????###?.??# 4,5,1,1
|
||||
.??????#?. 1,3,2
|
||||
#?#?????#?.????#?? 4,3,3
|
||||
????.?#?.?? 2,1,3
|
||||
?.??????????????.?# 1,1,4,1,1,2
|
||||
?.#.#?????#? 1,3,1,1
|
||||
??.#??.?#???#????#.? 1,2,3,6
|
||||
??...?##?????. 1,4,2
|
||||
.??.???.?? 1,1,1
|
||||
.#??#.??.#?.?#?. 1,2,1,1,2
|
||||
#?.????#?. 1,5
|
||||
???##??????#??#. 8,3,1
|
||||
.?.????#?##?## 1,1,7
|
||||
???#??#?????? 2,1,1,1
|
||||
???#??##???.?? 2,6,1
|
||||
####??#??.?#??? 9,1,1
|
||||
???.#??.?.?##?????.# 1,1,1,1,8,1
|
||||
##.??????#?? 2,7
|
||||
.??..????????#???? 1,8,1
|
||||
#????#?#?#?? 4,1,3
|
||||
?##??????????#??? 4,3,7
|
||||
??????????#?##????? 1,7,6
|
||||
??????#?.??. 1,2,1
|
||||
??.?.?#??.?.##? 1,1,2,1,2
|
||||
????.??#?#????? 1,5
|
||||
?????#??#.???##??.# 1,4,3,1,1
|
||||
.??#????????.?.?# 1,9,1,2
|
||||
????#??.#???#??##?# 3,11
|
||||
?###.??#?????#???#?. 4,1,1,2,1,3
|
||||
?##?#.?????.????. 4,1,2,1,1
|
||||
????#?.??##?.#???? 1,2,5,2,1
|
||||
?#?#??.?#?? 4,1,2
|
||||
.?#?.???#? 1,3
|
||||
#????##?.##?#?.?? 8,4,1
|
||||
.#.?.???#?? 1,1,2
|
||||
?????##?????????#? 2,10,1
|
||||
????..?#?#???????##? 1,13
|
||||
????#?#????.??### 8,1,4
|
||||
???????#???. 1,1,4
|
||||
.??.#?##?#?.?#???.?. 7,4
|
||||
#??..#???#?????.??#? 1,1,8,1,1
|
||||
???.??.???#?? 3,1,1,1
|
||||
?#??#???.???? 5,1
|
||||
?#?.??#??##??##??.? 1,11
|
||||
#?#??#??##???????? 1,1,1,8,2
|
||||
???##?????#???.?.?? 1,9,1,1,1
|
||||
??.???????????? 1,1,2,3
|
||||
???.?.?#????#??? 1,8
|
||||
??##??..#..? 2,1,1,1
|
||||
??????#??????? 1,8
|
||||
?????.#?#??.#. 1,2,4,1
|
||||
?#.?#?#?##????#? 1,7,2
|
||||
???#??????????? 1,6,3
|
||||
?????#?????#.???. 1,8,2
|
||||
???##..???????#???? 3,5,1
|
||||
.??#.?.#?? 1,1,1
|
||||
???.?#???? 1,1,1
|
||||
##???.?#??.?.?.#..?? 5,2,1,1,1,2
|
||||
???#??.?.?? 4,1
|
||||
.???????###????#?? 6,4,5
|
||||
???.??#?#???#????### 2,1,4,1,1,4
|
||||
#?..???.????..?## 2,2,1,3
|
||||
????#??.#????#??#.? 1,2,6,1,1
|
||||
#??.##?#.?.?##????? 1,1,2,1,5,1
|
||||
?????.#?#?#?? 2,1,5
|
||||
????????????#???? 4,1,3,1,1
|
||||
?.?#??#???.???? 6,2
|
||||
.?..???.?#.??? 1,1
|
||||
??#???#.??????? 1,2,1,5
|
||||
#####?#????????? 8,1,2
|
||||
???.???#???.. 1,1,4
|
||||
??###..?..#???# 5,1,3,1
|
||||
.?####?##.????? 7,2
|
||||
?#???#??#???..? 1,3,3,1
|
||||
.??##??????. 1,3,1,1
|
||||
????.????#??##?????# 4,1,9,1
|
||||
??#??.???#.#??? 3,1,1,3
|
||||
??????#??.?..??#..?. 1,7,1,3,1
|
||||
#???#.??????.???..? 5,2,1,1,1,1
|
||||
??????????.???? 2,1
|
||||
##?##???#????.? 5,5,1
|
||||
..??.?.???.?? 2,2
|
||||
#????.??#?#????.?? 4,4,1,1,1
|
||||
??.??.????????#. 1,1,3,1,1
|
||||
.#####?#??????#??. 10,4
|
||||
?????????????#?.?? 2,7,3,2
|
||||
?????#??#?? 1,3,4
|
||||
.?#?????????#??? 2,1,4
|
||||
#.??#??##????#??#? 1,15
|
||||
??????.???.? 1,1,1,1
|
||||
???.#.##??#.?###? 1,1,1,5,4
|
||||
..?#?##.??????# 5,2,3
|
||||
#???????????.?????. 6,2
|
||||
??#??#.#???#?? 4,1,4
|
||||
????.???#?. 1,1,3
|
||||
????#????#?#.???#?? 1,8,1,2
|
||||
?????.##????#???? 5,4,1,1,1
|
||||
??????.????? 2,1,1,1
|
||||
?##?????.???#? 6,1,1,2
|
||||
?.#??#?#.??#??.#. 1,1,4,4,1
|
||||
#?.#???.?.?#?????? 2,1,1,1,4
|
||||
????#??????.????.. 2,2,1,1,2
|
||||
?.###??.?????.# 5,1,2,1
|
||||
???..######.? 1,1,6,1
|
||||
.##???????.# 3,1,1,1
|
||||
#????.????????? 1,1,1,1,2
|
||||
#??#.#?????#??.???# 4,1,1,2,1,1
|
||||
?#???#??#.???.. 5,1,1
|
||||
???#?????#???? 3,1,4
|
||||
.???.?????? 2,1,1
|
||||
???#???#????##?? 4,1,7
|
||||
??#.??.???#?????#.? 2,1,1,6,1,1
|
||||
?##.??#????.?#?#??. 3,2,3,6
|
||||
.#??#??????#?? 2,9
|
||||
?.???#??.???#?# 1,1,1,1,6
|
||||
????#??#???.? 1,1,4
|
||||
??????#?.????#?###?# 6,11
|
||||
#????#????#??#..?? 1,4,3,1,2
|
||||
???#??..#??#??# 1,3,1,5
|
||||
??.???##??####? 1,1,3,4
|
||||
???????????#.. 3,4,1
|
||||
#?#??.#?#?#?? 5,1,4
|
||||
?.??#??#???##???? 1,1,1,3,2
|
||||
?#???????#????? 12,1
|
||||
?.?????#?? 1,2,1
|
||||
#????#??#????#???##? 1,1,1,2,9
|
||||
??###??#?#???#.??? 11,2,2
|
||||
#?..??#???.? 1,5,1
|
||||
??#.?#????#?????? 1,3,2,1,2
|
||||
??#??????##???? 6,3,1
|
||||
.#?.?#.#??#??.#?#?#? 1,2,1,1,1,5
|
||||
?#?#???.?#??#.. 1,1,1,2,1
|
||||
????#????##.?# 1,7,1
|
||||
.??????????????#... 3,3,1
|
||||
..?..?.?##?? 1,5
|
||||
??#?...##?#?#? 2,2,4
|
||||
.????.?#.?.. 4,1
|
||||
??.????#??##??#???? 1,9,6
|
||||
...?#??.?.. 4,1
|
||||
?.?.#..??..# 1,1,2,1
|
||||
???##??.??. 2,3,2
|
||||
?#?#????????.?#???? 1,3,2,2
|
||||
???##?????. 5,2
|
||||
???#??#??###???#.? 6,5,1,1
|
||||
???.???..##??#?#### 2,1,1,3,6
|
||||
??#??.?#..#.? 1,1,2,1
|
||||
.????#??#.?###?##.? 1,1,1,1,6,1
|
||||
.####?????? 4,2,2
|
||||
?.?#?#??????.??#?. 1,6,1,2
|
||||
????????????? 8,3
|
||||
#?##?????.?? 4,1,1,1
|
||||
??#????#????#???#? 3,1,1,3,1
|
||||
.#.?.#.?#?#.? 1,1,3,1
|
||||
?#.??#???.?????? 1,5,1,1,2
|
||||
..????????. 2,3,1
|
||||
.????.#????#????? 1,1,3,2,2
|
||||
..??.???.#?.?##?#? 1,2,2,4
|
||||
??#?#?#??##????? 1,10,1
|
||||
.??????#???. 1,1,1,2
|
||||
.?....#???? 1,4
|
||||
?##??..???????.?? 5,1,1,2
|
||||
.?.??????#?. 2,4
|
||||
?????.??#??#? 1,2,7
|
||||
?#????.??????..??#? 5,5,3
|
||||
#???.#?###????.? 3,5,1,1,1
|
||||
#?#????.??#??#?? 6,5
|
||||
#?#????.??##????.? 7,4,1,1
|
||||
.#?.?????# 2,2,1
|
||||
?.??#?.#????? 1,2,1,3
|
||||
???#?.???..# 1,1,2,1
|
||||
?###??#?????? 6,1
|
||||
?????#?????.? 4,1
|
||||
.???..#?.?????#? 3,2,3,1
|
||||
.?#?????.?# 6,1
|
||||
#???????.?? 1,6,1
|
||||
?#..?#???? 2,3,1
|
||||
?###??#??#.?.???. 9,1
|
||||
?#?#.????#. 3,3
|
||||
???..?..???#????? 1,1,2,5
|
||||
???..?##???.?.?#??# 1,4,1,1,5
|
||||
#?????#.?? 3,2,2
|
||||
.?.????#???????. 1,5,2,2
|
||||
.????????#???? 8,1
|
||||
??.??#??????#???#?? 2,6,1,1,1,1
|
||||
?#????##??????#??? 13,1,1
|
||||
???.?#..#??#?#??#?## 2,2,12
|
||||
.???#????????.. 5,2
|
||||
.#??.???#??..?#?? 1,2,3,2
|
||||
??.?????##??.??? 2,1,1,4,1
|
||||
?#.???#??##.? 2,5,1
|
||||
???????#?#??###???# 2,1,9,3
|
||||
?#???.??#???. 3,4
|
||||
.#..????#??????#.??? 1,4,3,1,1,1
|
||||
#???#..??#? 5,4
|
||||
?.??#?.???????#?#? 1,1,1,1,2,5
|
||||
.?????.??.??.? 2,2,1,1
|
||||
?##?#?#?... 4,2
|
||||
###??.????????.?.?.? 4,1,1,2,1,1
|
||||
???#.?#?????.???? 1,1,7,1,1
|
||||
???????.??.????? 7,2,4
|
||||
??#?###??.????????? 9,2,3,1
|
||||
?#?#?#???#.???#??#. 6,1,1,4
|
||||
?.?#???#..? 2,1
|
||||
????.???#?#?.?#?.?? 4,6,1
|
||||
?????#?????#.? 1,2,1,1
|
||||
?#.#.?.??###??? 1,1,4,1
|
||||
?#.???.#?.?? 1,1,1,1
|
||||
??..?#?##? 2,6
|
||||
??????.?##?.??????? 1,1,1,4,1,1
|
||||
???#??????? 4,1
|
||||
???????#?? 5,2
|
||||
?#?????#?#?? 3,4,1
|
||||
#?###????#?..??##??? 10,4,1
|
||||
.???????#?# 4,2,1
|
||||
#???????.?#?? 1,3,2
|
||||
..????#?...??????. 2,4
|
||||
.?????????? 1,1,2
|
||||
??.?.??????####? 3,5
|
||||
?.??#??????#??.???# 1,1,9,1,1
|
||||
???.?.?#?#??? 1,4
|
||||
?.??##??#? 1,2,2
|
||||
#??##.???.? 5,1,1
|
||||
?????.?????????. 3,2,3
|
||||
?.??.??#?#??. 1,5
|
||||
?????##??#????#. 1,3,2,4
|
||||
.??.?#????.#???#???. 2,1,1,1,5,1
|
||||
.#?.?.??#.?? 1,1
|
||||
???#?#?#.?.?????.? 1,6,1,1,1
|
||||
###??#..#..??#?. 4,1,1,1,2
|
||||
.#???????#.?# 1,5,1,1
|
||||
????????#???#??????# 1,15,1
|
||||
.?#??#?#?#??#.??? 2,9,2
|
||||
????##????#?###???. 12,2
|
||||
?##??.??.#?#####?#.? 2,1,1,7,1,1
|
||||
#??????..?#?##?#? 5,6
|
||||
.?.#????.??????.??? 1,2,6
|
||||
?#?##?#??????.???#? 7,1,1,1,1
|
||||
.????????#?##.?.?? 1,8
|
||||
?????##?#.??###?..? 5,3
|
||||
#..?#?###?#????.? 1,7,2
|
||||
???????#.??#? 7,1
|
||||
?#????????.? 8,1
|
||||
.?##?#?#?.#??? 7,1,1
|
||||
.?????????.?????? 7,1,1,4
|
||||
????#?#.???????#??#. 5,10
|
||||
.?#???????.?? 3,1
|
||||
?????.?#?? 1,1,1
|
||||
????#?????#?.?#. 1,9,2
|
||||
???.???.#?# 3,2,3
|
||||
??#.###??#.?.? 1,6,1
|
||||
#??#?#??????#????? 1,3,6,1
|
||||
.??#????????? 2,1,1,3
|
||||
???????.????????? 6,4,3
|
||||
?###?#?#?..???.??? 9,2,2
|
||||
?#?###?????.???# 6,2,2,1
|
||||
?.?.??#?.. 1,1
|
||||
.?#??#?.???? 6,2
|
||||
???##??????#?.?.. 9,1
|
||||
??##?#???????? 8,1,1
|
||||
?##?#?#?#?#????##.#. 16,1
|
||||
#???.????#?#?#? 4,1,5
|
||||
?.??..??#??.????# 1,1,5,2
|
||||
.???.??????? 2,7
|
||||
?##??????#?? 3,3
|
||||
.?#.?.??#? 2,2
|
||||
..?.???..? 1,1,1
|
||||
.???.#??????? 1,6
|
||||
????#???#???###?.? 1,6,4
|
||||
????.#????##.#?#?? 3,1,4,1,2
|
||||
.??#??#?.?????. 6,4
|
||||
?#?#???.??#??? 1,1,1,5
|
||||
???#?#????#???? 1,5,1,1
|
||||
??.##??#????.?? 1,2,2,2,1
|
||||
?#..?????????#??.... 2,1,3,2
|
||||
??#.????.? 1,1,1
|
||||
?.??#?..???. 3,1
|
||||
???????.??#?? 1,1,3,2
|
||||
?##?????.??###.. 2,2,4
|
||||
????????#???#???? 1,2,4,2,2
|
||||
????.?.?????#???? 1,1,1,6,2
|
||||
???????#?????.??# 10,1,1,1
|
||||
???#??#??## 1,4,2
|
||||
????#???#.?????? 7,1,3,1
|
||||
?????????.?. 1,7
|
||||
.#???.????#?.#.? 4,5,1
|
||||
###???#.??. 7,1
|
||||
???#??.???...?????? 1,3,2,1,1,1
|
||||
????.?.???.? 3,1,2,1
|
||||
##??????.???## 3,3,1,3
|
||||
??.?.?????#??#??# 1,6,2,1
|
||||
.?????????????# 4,2,1
|
||||
#??.?#?.?.?##### 1,1,1,1,6
|
||||
?#.???.????. 1,2,1,1
|
||||
.?#???.???? 2,3
|
||||
????.#?????????. 1,1,2,4
|
||||
???#??????#??#?# 1,3,1,6
|
||||
.#??#?..????#?#? 5,4
|
||||
?.#.??.?##???#??#? 1,10
|
||||
??#.#?..???#?#????.? 1,1,10
|
||||
...???.#????...??? 3,1
|
||||
???#?.?????????. 4,1,7
|
||||
??#??#????? 2,3,2
|
||||
??????#.??#? 3,1,1
|
||||
???.?.?????#??.##? 3,1,3,2
|
||||
.?..??#????.?.??.? 1,5,1,1,1
|
||||
?..?..##??.??##..? 3,3
|
||||
#??????#?#?? 1,1,2,2
|
||||
#?.?????????????#??. 1,6,1,1,1,1
|
||||
?.????###???? 1,7,2
|
||||
?.????####???# 1,9
|
||||
???????#??.#?????? 1,5,1,1,1,1
|
||||
??.#?#???#.?. 1,5,1,1
|
||||
###??#???# 3,2,2
|
||||
?##..?????# 2,1,4
|
||||
.??????##????. 8,2
|
||||
?.?????.#?.??????#?? 1,2,1,1,7
|
||||
.??#?#??.??? 1,1,1,1
|
||||
#?.#???#?.???. 1,1,3,2
|
||||
?.??.????????#? 1,1,3,1,1
|
||||
???????#??????#????# 1,4,9
|
||||
.?#????????#.##?# 4,1,2,4
|
||||
??#.?.?##??.. 1,4
|
||||
???.??.?#?..? 3,1,3,1
|
||||
?????...????? 4,4
|
||||
?###?????.?.? 7,1,1
|
||||
.?.???##?.??.?.?. 1,1,3,2,1
|
||||
?#??????#????#.????? 2,2,4,1,1,4
|
||||
.?.??????? 1,2,2
|
||||
????#?#??#?????#?.?? 1,7,2,2,1
|
||||
.#???##?#??#?##?#??? 6,1,9
|
||||
?????????? 3,2
|
||||
????#???####?.? 1,1,6
|
||||
??.????.?..?? 1,2,1,1
|
||||
??????.#?#??? 1,1,3,2
|
||||
????????.??? 6,1
|
||||
?#?#????????.? 7,1,1
|
||||
??#?.#??##???## 3,2,4,2
|
||||
??????#?##?#.?? 11,2
|
||||
???????????#??? 1,1,1,4
|
||||
???#?#?.#?????#? 5,1,1,1
|
||||
#.????????#? 1,2,1,3
|
||||
?.?#??###?.#?? 7,1
|
||||
???#.#.???.#??? 2,1,1,3,3
|
||||
??????#??.? 2,4
|
||||
.##???#?????????. 10,2
|
||||
?.??????#????#????? 6,5
|
||||
???#??#?.? 2,2
|
||||
?.?????#???? 1,1,1,3
|
||||
??????###???#?##? 3,4,6
|
||||
????#.???#????? 3,6
|
||||
.??#?.??.????#.?.??. 2,1
|
||||
??#??#??????#?#? 2,6,4
|
||||
.#???.???#???.# 4,7,1
|
||||
#.?.#??#????. 1,2,2,1
|
||||
???#.?#??#?????? 2,2,3,2
|
||||
#.??#?#??#?###??? 1,12
|
||||
.???..#?#????.#?? 3,3,1,2
|
||||
.????##?.#???? 5,5
|
||||
??.??.?.??? 1,2
|
||||
??????????#? 1,1,3,1
|
||||
#???#??.??? 1,3,3
|
||||
..????..#? 1,1,1
|
||||
??????#???????? 3,3,1,1
|
||||
???????#??#?????#? 2,9,1
|
||||
.###?.??#?## 4,1,2
|
||||
???????????.?.?##?? 8,1,5
|
||||
??????#.?#???? 4,1,2,2
|
||||
?#??.?#????#.????? 3,2,2,1,1,1
|
||||
???#??.?#?##? 3,4
|
||||
????##????????#??? 3,7
|
||||
??#?????????.#.?? 7,1,1,1
|
||||
#??#??..#??. 6,1
|
||||
??????#???. 2,1,1
|
||||
..?#??.??#??.?? 4,3,1
|
||||
?..????.?????###? 2,1,5
|
||||
.?..???#?#.??.? 6,1
|
||||
..###??#.?##?##.??#. 6,5,3
|
||||
??#?.????# 2,3
|
||||
??????#?#????##?? 3,1,1,5
|
||||
???????????? 4,3
|
||||
#??#??#??#?. 5,5
|
||||
??#???.##???????? 5,3,1,1
|
||||
??????#?????????# 8,1,2
|
||||
??#???##?????.#. 3,7,1
|
||||
.???#.#????????#.?? 3,10,1
|
||||
.?#?????#??.# 6,2,1
|
||||
?.#??#####???..? 1,1,9,1
|
||||
?#..?????#?.?? 2,1,4,1
|
||||
?.?##?.?#?.?..? 1,3,1,1,1
|
||||
?##.#??#?..?##?####? 3,1,3,8
|
||||
.??#####?.?????# 7,4,1
|
||||
?????#?#?????? 1,1,1,7
|
||||
????#.#?????.??? 2,1,5,1
|
||||
??????????#?????#?? 4,1,1,4
|
||||
#???#???.. 2,4
|
||||
??##???.?##??? 5,5
|
||||
?.??##?.????..#.??? 1,1,3,2,1,3
|
||||
..?????.#?.?. 1,2
|
||||
?#??.?.?..#.? 2,1,1,1
|
||||
??.#.??#.?#. 1,1,1,1
|
||||
?#?#??#??##?????#?? 1,1,6,6
|
||||
...??##?###?.?? 7,1
|
||||
?#.?#????.. 1,3,1
|
||||
??.????#??? 1,1,4
|
||||
????##????????.??? 2,7,1,1
|
||||
???????###??#.? 1,1,1,6,1
|
||||
?.???#????# 1,5,1
|
||||
..?????#????????. 1,11
|
||||
?.?????#???###??.? 1,5,3,1
|
||||
.????.#?.##?? 2,1,2
|
||||
??.???###???????.# 1,1,4,3,1,1
|
||||
.??#??????? 3,2
|
||||
.?????#?????.????# 1,5,1,3
|
||||
?..#.????#??.?? 1,3,2,1
|
||||
.?????.???.#..??.? 3,1
|
||||
?#.?.????#??.???#?# 1,7,6
|
||||
.#???#??#?#??#? 11,1
|
||||
#.?????#?????## 1,7,2
|
||||
???#?##???#.???? 7,1,1,1
|
||||
?????#??#???? 1,9
|
||||
#?#??.???#????##? 3,11
|
||||
.#?#??????.?#??#??# 7,1,5,1
|
||||
??#?#????? 1,5,1
|
||||
????#????#.?.. 9,1
|
||||
?##.?.?.??.# 3,1,2,1
|
||||
??#?.?.??#??#?###? 2,1,1,1,1,3
|
||||
?.??..?#???##? 1,1,8
|
||||
#..#????#?.# 1,2,1,1
|
||||
#??.#??.??.?. 1,1,1,2
|
||||
??#??????#??#????##? 1,6,7
|
||||
???#???????#??. 2,1,5
|
||||
#???????#??. 1,3,4
|
||||
.?#?????????#?????? 1,10,1
|
||||
?????##?#??. 3,5
|
||||
???.?#???#?? 1,2,2,1
|
||||
#.?#?.?#?.?# 1,2,1,1
|
||||
????????????????.. 2,1,3,2,3
|
||||
??#???#.???#?#?? 4,1,6,1
|
||||
?.#?.????? 1,1,1
|
||||
.#?????.?##??#. 1,2,1,6
|
||||
#?##??#?.???????. 1,5,1,3,1
|
||||
?#..?#?.???#. 1,2,4
|
||||
??.????.?????#??# 2,1,1,6,1
|
||||
???#?????#? 3,1,1
|
||||
.#?#?#?.??? 6,1
|
||||
??##??????? 2,2,1
|
||||
#????#???? 1,1,4
|
||||
?#?.?#??????? 2,1,4
|
||||
??.???.##???#?#???? 1,1,1,9
|
||||
????#?.??####? 1,1,6
|
||||
#??##????.????#. 9,2,1
|
||||
?#?????.?# 1,1,2
|
||||
?.#?????#??# 1,1,2,4
|
||||
?.??#??###??#..#? 1,9,2
|
||||
?#??.?.?#?.? 2,2
|
||||
???.??.??#? 1,1,1
|
||||
?#??...#????###?#?? 3,11
|
||||
?????##??#??#??# 1,1,6,1,2
|
||||
????????.#? 2,1,1
|
||||
??#?.??..#?##?.??. 1,1,1,5,1
|
||||
..?#.?.???. 1,2
|
||||
??###.##??? 1,3,4
|
||||
???#?#..???????# 6,1,2,1
|
||||
?.?.?????##?#?????. 9,2
|
||||
.???##.?.. 1,2
|
||||
?.????????##?. 1,4,1,3
|
||||
?.????.##?????? 1,1,1,5,2
|
||||
.??????##??#?#???? 1,9
|
||||
?.#.???##??????? 1,1,1,4,4
|
||||
.?#????#????. 2,3
|
||||
.?.?##????.? 1,3
|
||||
#?.?#??#?.?..??#??#? 2,4,1,3,1
|
||||
??#????####?? 2,8
|
||||
?.??#????????##?? 4,4
|
||||
.##..????? 2,1
|
||||
#????#????.??.? 1,4,1,1,1
|
||||
#?#??????.??###?#??? 1,1,1,1,8
|
||||
??.?#??#??????? 2,1,5,1
|
||||
..?.???.??????? 2,3
|
||||
?.????.?#???.?#?? 1,2,5,2
|
||||
.#?????#?.?? 7,1
|
||||
?#??.?????#?????#? 4,1,4,2,1
|
||||
????#..???. 3,1,1
|
||||
????##????#?#??#??? 1,3,9
|
||||
.#??#??.?????#? 5,2,2
|
||||
?#?..???#?? 1,4
|
||||
???##?.?????#???#. 5,8
|
||||
###?.?????? 3,3
|
||||
?..???#?.#??#.??#.? 1,4,2,1,3
|
||||
.?.?????#???? 1,3,1,3
|
||||
?##?????????#?#??.. 3,1,8
|
||||
??#?#??#????.? 4,2,2
|
||||
#?????.#????#?#???#. 1,1,1,12
|
||||
.??##????????.#??#? 10,4
|
||||
#????.???.#?.##??#?? 1,3,1,2,2,2
|
||||
#?????.?#.??? 4,1,1,3
|
||||
.#??.??#?????##??#? 3,11
|
||||
?.?????.??.???##? 1,2,5
|
||||
.???.#??#??? 2,6
|
||||
.????.?.#? 4,2
|
||||
??##??????.#?#????. 8,3,1
|
||||
.##??.?##?#??#??? 3,8
|
||||
##.??#??..? 2,2
|
||||
??.???#?####? 1,1,8
|
||||
..???#??.???????###? 4,1,8
|
||||
?????????#??????? 1,13
|
||||
?.#??????#???#.?? 8,1,1
|
||||
.??###??#??????# 1,6,1,1,1
|
||||
????..??#??? 1,1,3,2
|
||||
#??.???????. 1,3,1
|
||||
?#?##???#?#?? 9,1
|
||||
????#???#.?#??#?#??? 7,5,3
|
||||
??.????????????? 1,1,1,5
|
||||
??..????????#??.?? 1,1,6,1,1
|
||||
.??????.#???? 3,1,2
|
||||
?#???.#?#???.#??? 3,5,3
|
||||
????????#??####?#? 4,11
|
||||
??#??#???? 6,2
|
||||
.#?????#??.??.???.?? 9,1,1,1
|
||||
????.#?#?.???? 4,1,1,4
|
||||
#?????????.? 2,1,2,1
|
||||
.###?????# 6,2
|
||||
????????????#??##??# 1,1,5,5
|
||||
??.??????. 1,3
|
||||
??#??????##?#?? 1,1,1,1,5
|
||||
?.#???????#?? 1,3,5
|
||||
????????.###???? 1,2,1,7
|
||||
.??#????#???..#?# 2,5,3
|
||||
???##??##?#????????? 1,9,2,3
|
||||
#??##??????..?? 1,6,1,2
|
||||
??????.?.????? 3,1,1,2
|
||||
??????????????? 9,2,1
|
||||
.??????#.??.??# 1,1,1,1,3
|
||||
??????#???##?###??# 1,1,1,11
|
||||
???????????.#???.?#? 4,2,1,1,1,2
|
||||
?.???????#????#? 6,2,1
|
||||
#?#??????????##. 3,2,5
|
||||
.?.#??.?????.???#??? 3,3
|
||||
??..??.?##??#? 1,1,3,1
|
||||
?#???#????.???.?? 8,1
|
||||
#.??.?????.##???.? 1,2,1,1,5
|
||||
?.??#?.?###? 3,3
|
||||
..????????? 3,1
|
||||
????#..?#? 1,1,1
|
||||
?#?????????? 2,1,1,1
|
||||
???#.?#?..?.?#? 2,2,1
|
||||
..#?????.?. 1,2,1
|
||||
?.#????#?????#?.? 8,3
|
||||
?????????#?????. 2,1,1,1,2
|
||||
???#?##????? 1,4,1
|
||||
????.?#?#????.?#? 5,2
|
||||
.??#???###? 3,5
|
||||
.#?.?.??#??##. 1,1,6
|
||||
.?..?#????..????? 2,1
|
||||
.?#.##???.?#?. 2,5,1
|
||||
#.????.#???#?#. 1,3,1,3,1
|
||||
.?.?????#?###?## 1,1,6,2
|
||||
?#?????.??????.? 4,1,3,1
|
||||
??#??.#??.? 5,2,1
|
||||
?.???.??.???#? 3,1,1,1
|
||||
???.???.??????#??? 2,6
|
||||
??.?##??#???## 7,2
|
||||
??.????#??.??#? 5,3
|
||||
#??####???????.? 12,1
|
||||
?.???#??#?#?#?# 2,10
|
||||
???.?????#???. 1,1,9
|
||||
??.???##????#?#? 1,10,1
|
||||
???.???.???#.. 3,4
|
||||
.?#?.??#?#...????#.? 2,2,1,3,1
|
||||
.????#?.?????#?# 1,3,2,4
|
||||
???##????????????#?? 5,11
|
||||
?##?????#??????? 6,2,1,1
|
||||
??#.????#?#??#? 1,6,1
|
||||
???????.?#? 1,3,2
|
||||
???#???.??##?#?. 1,2,2,4
|
||||
#????##???.???.. 10,2
|
||||
##.??????. 2,1,3
|
||||
.??????.???.??.#??# 1,3,1,2,2,1
|
||||
#?.???####??#?#??. 1,11
|
||||
????#?????#?.? 3,5
|
||||
??????#???#??.??? 1,5,3,1,2
|
||||
..???.??##??#???. 3,2,2,1
|
||||
#?#.#?????#??#??# 3,10,1
|
||||
.???##?##?????#?.. 5,9
|
||||
?????#????#.? 1,4,1
|
||||
###??#???#? 3,1,2
|
||||
?.?????#?#????#?? 1,14
|
||||
?#??#???????#?????#? 1,1,1,2,5,2
|
||||
???#????.?.? 2,2
|
||||
???##????##????? 11,2
|
||||
??#.???.?. 3,2
|
||||
??##??##??.#??. 8,1,1
|
||||
??.?????#?? 1,2,1
|
||||
.#?#.#??????..#. 3,1,1,1,1
|
||||
???####?#.???#?#. 1,4,1,1,4
|
||||
#?????##?#..???? 1,6,1,1,1
|
||||
.#?????.?? 1,1,1
|
||||
???#?#???#?#?#.#??#? 6,1,1,3,4
|
||||
.???##??????##.?? 3,5
|
||||
##???#??.???????## 3,2,1,1,1,2
|
||||
?..##?????? 1,2,3
|
||||
????##??.?##??.???? 4,4,3
|
||||
##?#?.?.?.??.? 2,1,1,2
|
||||
?..??.#?.???#. 2,1,1,1
|
||||
??????.?#???? 1,1,4
|
||||
????.?????#????? 1,9
|
||||
.???#??#????#???? 1,10,1
|
||||
?.?#?.?.???#?.???# 1,1,2,2,3
|
||||
#???..?#.#.#?#?.?? 1,2,2,1,4,1
|
||||
??????.?.??????? 2,2,1,1,1
|
||||
?####?#.##?.?#?. 5,1,3,1
|
||||
.?????#??? 1,5
|
||||
??.#???#.??# 2,2,2,2
|
||||
??#????..???# 2,1,4
|
||||
????.?#???#?? 2,2,2
|
||||
#?#??#?##?#.???.? 1,9,1,1
|
||||
#??????????###?? 1,1,2,1,5
|
||||
.?????##??..?# 6,2
|
||||
..#?????#???.#?.??? 2,4,1,1
|
||||
??.???#??#?????# 1,2,10
|
||||
??#???????.#? 3,2,1,2
|
||||
?????????.???#?? 2,1,3
|
||||
?#?.???????#???.#? 1,1,7,1,1
|
||||
????.??#?.?.? 1,4
|
||||
###?????#???????.? 6,1,1,4,1
|
||||
????.##???. 1,2,1
|
||||
??.?????.# 1,1,1
|
||||
.??.???.?? 1,1,1
|
||||
???#????????.##?.?? 1,2,5,1,3,1
|
||||
???????.??????? 1,1,1,2,1
|
||||
??#.????.. 3,1
|
||||
.??##????#.#???? 9,2,1
|
||||
???#.???#???#??. 1,1,1,7
|
||||
??????.#??.? 1,1,1,1
|
||||
?##..??###??#?#?..? 2,1,9
|
||||
??.??#.###???# 1,2,4,2
|
||||
????????##. 2,4
|
||||
??##.???#??? 3,6
|
||||
?????#.?#???? 2,2,5
|
||||
#???.??.??#.# 3,1,1,1
|
||||
.??..##.??. 1,2,1
|
||||
???#.???????? 2,1,1,2
|
||||
????#?.?#?#? 1,2,2,2
|
||||
???????.?.??#???. 5,5
|
||||
???#??????#??#???? 1,2,1,2,3
|
||||
?#.?..???#??#??.???. 2,1,9,1,1
|
||||
????.#?#.???? 2,1,3,1
|
||||
#.??##???..#? 1,6,1
|
||||
?????#???????## 8,2
|
||||
??.??..?#???.?? 1,1,2,1,1
|
||||
????.##???.?.?##? 2,5,1,4
|
||||
?#?#?..?????#?? 1,1,5
|
||||
?##??????#?? 2,4
|
||||
#.?????#??.##????.# 1,5,1,5,1
|
||||
?##?.???.? 3,2
|
||||
?##?#????#???.??? 12,1
|
||||
?..?????## 1,7
|
||||
?#?#??????#?? 1,9
|
||||
?.#??##???.????? 1,4,3,1
|
||||
?###??????? 3,1,2
|
||||
??????.??. 1,1
|
||||
???.??#??#??#?.#. 2,5,2,1
|
||||
?.??????.? 2,1
|
||||
.?#???????????? 2,3,1,2,1
|
||||
.??.?.??????? 2,1
|
||||
.?#.???#?????#??.? 1,9
|
||||
??????#??.# 5,2,1
|
||||
@@ -0,0 +1,187 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
// var log = aoc.Log
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 int
|
||||
}
|
||||
|
||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
var matches []int
|
||||
var matches2 []int
|
||||
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
status, text, ok := strings.Cut(text, " ")
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
// part 1 - brute force
|
||||
grouping := aoc.SliceMap(aoc.Atoi, strings.Split(text, ",")...)
|
||||
pattern := []rune(status)
|
||||
// sp := spring{pattern: pattern, grouping: grouping, missingNo: countQuestion(pattern)}
|
||||
// matches = append(matches, sp.findMatches())
|
||||
matches = append(matches, countPossible(pattern, grouping))
|
||||
|
||||
// part 2 - NFA
|
||||
b, a := status, text
|
||||
bn, an := "", ""
|
||||
for i := 0; i < 5; i++ {
|
||||
bn, an = bn+b+"?", an+a+","
|
||||
}
|
||||
b, a = strings.TrimSuffix(bn, "?"), strings.TrimSuffix(an, ",")
|
||||
matches2 = append(matches2, countPossible([]rune(b), aoc.SliceMap(aoc.Atoi, strings.Split(a, ",")...)))
|
||||
}
|
||||
|
||||
return &result{valuePT1: aoc.Sum(matches...), valuePT2: aoc.Sum(matches2...)}, nil
|
||||
}
|
||||
|
||||
type spring struct {
|
||||
pattern []rune
|
||||
grouping []int
|
||||
missingNo int
|
||||
}
|
||||
|
||||
func (s *spring) findMatches() int {
|
||||
matches := 0
|
||||
for _, pattern := range s.genPatterns() {
|
||||
pattern := []rune(pattern)
|
||||
target := make([]rune, len(s.pattern))
|
||||
i := 0
|
||||
for j, r := range s.pattern {
|
||||
if r == '?' {
|
||||
target[j] = pattern[i]
|
||||
i++
|
||||
continue
|
||||
}
|
||||
target[j] = r
|
||||
}
|
||||
|
||||
if slices.Equal(countGroupings(target), s.grouping) {
|
||||
matches++
|
||||
}
|
||||
}
|
||||
|
||||
return matches
|
||||
}
|
||||
func (s *spring) genPatterns() []string {
|
||||
buf := &strings.Builder{}
|
||||
combinations := aoc.Power2(s.missingNo)
|
||||
lis := make([]string, 0, combinations)
|
||||
for i := 0; i < combinations; i++ {
|
||||
for b := 0; b < s.missingNo; b++ {
|
||||
if i>>b&0b1 == 1 {
|
||||
buf.WriteRune('#')
|
||||
} else {
|
||||
buf.WriteRune('.')
|
||||
}
|
||||
}
|
||||
lis = append(lis, buf.String())
|
||||
buf.Reset()
|
||||
}
|
||||
|
||||
return lis
|
||||
}
|
||||
func countPossible(s []rune, c []int) int {
|
||||
pos := 0
|
||||
|
||||
cstates := map[state]int{{}: 1} // current state
|
||||
nstates := map[state]int{} // next state
|
||||
|
||||
for len(cstates) > 0 {
|
||||
for st, num := range cstates {
|
||||
si, ci, cc, expdot := st.springIndex, st.groupIndex, st.continuous, st.expectDot
|
||||
|
||||
// have we reached the end?
|
||||
if si == len(s) {
|
||||
if ci == len(c) {
|
||||
pos += num
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
switch {
|
||||
case (s[si] == '#' || s[si] == '?') && ci < len(c) && !expdot:
|
||||
// we are still looking for broken springs
|
||||
if s[si] == '?' && cc == 0 {
|
||||
// we are not in a run of broken springs, so ? can be working
|
||||
nstates[state{si + 1, ci, cc, expdot}] += num
|
||||
}
|
||||
|
||||
cc++
|
||||
|
||||
if cc == c[ci] {
|
||||
// we've found the full next contiguous section of broken springs
|
||||
ci++
|
||||
cc = 0
|
||||
expdot = true // we only want a working spring next
|
||||
}
|
||||
|
||||
nstates[state{si + 1, ci, cc, expdot}] += num
|
||||
|
||||
case (s[si] == '.' || s[si] == '?') && cc == 0:
|
||||
// we are not in a contiguous run of broken springs
|
||||
expdot = false
|
||||
nstates[state{si + 1, ci, cc, expdot}] += num
|
||||
}
|
||||
}
|
||||
|
||||
// swap and clear previous states
|
||||
cstates, nstates = nstates, cstates
|
||||
clear(nstates)
|
||||
}
|
||||
return pos
|
||||
}
|
||||
|
||||
type state struct {
|
||||
springIndex int
|
||||
groupIndex int
|
||||
continuous int
|
||||
expectDot bool
|
||||
}
|
||||
|
||||
func countQuestion(pattern []rune) int {
|
||||
count := 0
|
||||
for _, r := range pattern {
|
||||
if r == '?' {
|
||||
count++
|
||||
}
|
||||
}
|
||||
return count
|
||||
}
|
||||
func countGroupings(pattern []rune) []int {
|
||||
var groupings []int
|
||||
inGroup := false
|
||||
for _, r := range pattern {
|
||||
|
||||
if r == '#' {
|
||||
if !inGroup {
|
||||
groupings = append(groupings, 0)
|
||||
}
|
||||
|
||||
inGroup = true
|
||||
groupings[len(groupings)-1]++
|
||||
|
||||
}
|
||||
if inGroup && r != '#' {
|
||||
inGroup = false
|
||||
}
|
||||
}
|
||||
return groupings
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 21)
|
||||
is.Equal(result.valuePT2, 525152)
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 8193)
|
||||
is.Equal(result.valuePT2, 45322533163795)
|
||||
}
|
||||
|
||||
func TestPower2(t *testing.T) {
|
||||
is := is.New(t)
|
||||
|
||||
is.Equal(aoc.Power2(1), 2)
|
||||
is.Equal(aoc.Power2(2), 4)
|
||||
is.Equal(aoc.Power2(3), 8)
|
||||
is.Equal(aoc.Power2(4), 16)
|
||||
is.Equal(aoc.Power2(5), 32)
|
||||
is.Equal(aoc.Power2(6), 64)
|
||||
}
|
||||
|
||||
func TestCountGroupings(t *testing.T) {
|
||||
is := is.New(t)
|
||||
is.Equal([]int{1, 3, 1}, countGroupings([]rune(".#.###.#")))
|
||||
is.Equal([]int{1, 3, 1}, countGroupings([]rune(".#.###...#.")))
|
||||
is.Equal([]int{1, 3, 1}, countGroupings([]rune("#.###...#.")))
|
||||
}
|
||||
|
||||
func TestCombination(t *testing.T) {
|
||||
s := spring{
|
||||
pattern: []rune("???"),
|
||||
grouping: []int{1},
|
||||
missingNo: 3,
|
||||
}
|
||||
s.findMatches()
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
#.##..##.
|
||||
..#.##.#.
|
||||
##......#
|
||||
##......#
|
||||
..#.##.#.
|
||||
..##..##.
|
||||
#.#.##.#.
|
||||
|
||||
#...##..#
|
||||
#....#..#
|
||||
..##..###
|
||||
#####.##.
|
||||
#####.##.
|
||||
..##..###
|
||||
#....#..#
|
||||
@@ -0,0 +1,7 @@
|
||||
#.##..##.
|
||||
..#.##.#.
|
||||
##......#
|
||||
##......#
|
||||
..#.##.#.
|
||||
..##..##.
|
||||
#.#.##.#.
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,11 @@
|
||||
##.#.##.#
|
||||
...#..#..
|
||||
.##...#..
|
||||
.##...#..
|
||||
.#.#..#..
|
||||
##.#.##.#
|
||||
.#...####
|
||||
..#.#..##
|
||||
...#...##
|
||||
.#....#.#
|
||||
.#....#.#
|
||||
@@ -0,0 +1,179 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
var log = aoc.Log
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 int
|
||||
}
|
||||
|
||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
maps := []Map{}
|
||||
m := Map{}
|
||||
r := &result{}
|
||||
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
|
||||
if text == "" {
|
||||
maps = append(maps, m)
|
||||
m = Map{}
|
||||
} else {
|
||||
m = append(m, []rune(text))
|
||||
}
|
||||
}
|
||||
maps = append(maps, m)
|
||||
|
||||
for _, m := range maps {
|
||||
sum, sum2 := findSmudge(m)
|
||||
|
||||
if sum == -1 || sum2 == -1 {
|
||||
mr := Map(aoc.Transpose(m))
|
||||
Hsum, Hsum2 := findSmudge(mr)
|
||||
|
||||
if sum2 == -1 {
|
||||
sum2 = Hsum2 * 100
|
||||
}
|
||||
|
||||
if sum == -1 {
|
||||
sum = Hsum * 100
|
||||
}
|
||||
}
|
||||
|
||||
r.valuePT1 += sum
|
||||
r.valuePT2 += sum2
|
||||
}
|
||||
|
||||
return r, nil
|
||||
}
|
||||
|
||||
type Map [][]rune
|
||||
|
||||
func (m Map) String() string {
|
||||
var buf strings.Builder
|
||||
for i, row := range m {
|
||||
if i == 0 {
|
||||
fmt.Fprint(&buf, " ")
|
||||
for j := range row {
|
||||
fmt.Fprintf(&buf, "%d", j)
|
||||
}
|
||||
fmt.Fprint(&buf, "\n")
|
||||
}
|
||||
|
||||
fmt.Fprintf(&buf, "%d ", i)
|
||||
buf.WriteRune(' ')
|
||||
buf.WriteString(string(row))
|
||||
buf.WriteRune('\n')
|
||||
}
|
||||
buf.WriteRune('\n')
|
||||
return buf.String()
|
||||
|
||||
}
|
||||
|
||||
// func findReflection(m Map) (int, bool) {
|
||||
// candidates := make(map[int]bool)
|
||||
// var candidateList []int
|
||||
|
||||
// for _, row := range m {
|
||||
// for col := 1; col < len(row); col++ {
|
||||
// if v, ok := candidates[col]; !ok || v {
|
||||
// candidates[col], _ = reflects(row[:col], row[col:])
|
||||
// }
|
||||
// }
|
||||
// candidateList = all(candidates)
|
||||
// if len(candidateList) == 0 {
|
||||
// return 0, false
|
||||
// }
|
||||
// }
|
||||
|
||||
// if len(candidateList) == 1 {
|
||||
// return candidateList[0], true
|
||||
// }
|
||||
|
||||
// return 0, false
|
||||
// }
|
||||
|
||||
type level struct {
|
||||
blips int
|
||||
nequal int
|
||||
fail bool
|
||||
}
|
||||
|
||||
func findSmudge(m Map) (int, int) {
|
||||
candidates := make(map[int]level)
|
||||
|
||||
for _, row := range m {
|
||||
for col := 1; col < len(row); col++ {
|
||||
candidate := candidates[col]
|
||||
if candidate.fail {
|
||||
continue
|
||||
}
|
||||
|
||||
eq, bl := reflects(row[:col], row[col:])
|
||||
if !eq {
|
||||
candidate.nequal++
|
||||
}
|
||||
candidate.blips += bl
|
||||
|
||||
if candidate.nequal > 1 || candidate.blips > 1 {
|
||||
candidate.fail = true
|
||||
}
|
||||
|
||||
candidates[col] = candidate
|
||||
}
|
||||
}
|
||||
|
||||
a, b := -1, -1
|
||||
for i, cand := range candidates {
|
||||
if !cand.fail && cand.blips == 1 {
|
||||
b = i
|
||||
}
|
||||
if !cand.fail && cand.blips == 0 {
|
||||
a = i
|
||||
}
|
||||
}
|
||||
|
||||
return a, b
|
||||
}
|
||||
|
||||
func reflects(a, b []rune) (bool, int) {
|
||||
c := min(len(a), len(b))
|
||||
|
||||
a = append([]rune{}, a...)
|
||||
b = append([]rune{}, b...)
|
||||
aoc.Reverse(a)
|
||||
a = a[:c]
|
||||
b = b[:c]
|
||||
|
||||
blips := 0
|
||||
for i := range a {
|
||||
if a[i] != b[i] {
|
||||
blips++
|
||||
}
|
||||
}
|
||||
|
||||
return blips == 0, blips
|
||||
}
|
||||
|
||||
func all[T comparable](m map[T]bool) []T {
|
||||
lis := make([]T, 0, len(m))
|
||||
for k, v := range m {
|
||||
if v {
|
||||
lis = append(lis, k)
|
||||
}
|
||||
}
|
||||
return lis
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 405)
|
||||
is.Equal(result.valuePT2, 400)
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.True(result.valuePT1 > 1704) // attempt 1
|
||||
is.Equal(result.valuePT1, 30705)
|
||||
is.Equal(result.valuePT2, 44615)
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
O....#....
|
||||
O.OO#....#
|
||||
.....##...
|
||||
OO.#O....O
|
||||
.O.....O#.
|
||||
O.#..O.#.#
|
||||
..O..#O..O
|
||||
.......O..
|
||||
#....###..
|
||||
#OO..#....
|
||||
@@ -0,0 +1,100 @@
|
||||
...#.O.#.#.O.O....#...O....#..#........OO.O#...O..O#O#.......O.O....O.....#...OO#.O....OOO..OO#..#..
|
||||
.##.....#.OOO.OO#...O.......O#..O.##OO.O.......O##....O....#O..O..#.#....#OO..#...O.O#.#...#....#O.O
|
||||
O...##.O.O.O.O..#.#.....#O....#..#O..O...O..OO..O...##.......OO#..OOO..#O..#.O#.O......#..#O..O..O.O
|
||||
..OO....OOO....O.O..OOO.....O........#...O.O.O.O..O#.O...O..#.#O........O.....#O...##....#...#.#....
|
||||
##.O.O#..O..##O.....O.#.....O.O#O.O..#...#...OO.##OOO...OO#...O...O........O.#.O.........#O.#...#.#.
|
||||
.#.O.O.....#..O###..O#.#..O....O.O....#...##.O..O.OOO..O.O..O#.O..O....#.#.O..#..##O...O....#O#.....
|
||||
.......O...##..O..O##..##...O....###.O.#.#.O......O...O.O......#O.....#..O..O#..##O.O#O##O....O#....
|
||||
.#O..#....##.##..O#..#..#..O........OO....#..##.O.#.O.O..OO.O.O#..#O##O......OO...O...OO...#....OO..
|
||||
#.....O#......O#.....#..O...#O..OO..OO.#O...O...O.........O...#O...O.....#.....#...#.....O##.O.....O
|
||||
OO.O..O...O......#.O......#O....#..#.#...O.O....O.#.O#...O........O......#.#O#.O...O.........#O....O
|
||||
O.O..O..#......O.O.OO...OO..##.....OO.....#.O...O.#.#...OO..OO.O.........#O..#.O...O#.#..O..OO.##O..
|
||||
..#.......O....#...#....##..O.O......O....O#.O..O..#.#.O#O.O.#...#.##.....O...O.O...O.#...O...O.#...
|
||||
.O...#..O.....O.O.....OO.O.O.......O..O..........#...O..O..O......O....#OOO...O#O...#.O#........O...
|
||||
.OO#....#.....O...#.###..#..O..O.....#O..#..OO...OOO#.O#..O#O........#..#.O..OOO#O#..O..OO........#.
|
||||
..O.....#..#..O.............#..O.O..O#.......#.O.........O.#..OO.O..#..##..O.O#O....OO.O.O.O.....O#.
|
||||
........#O..O#OO...#.##O.O....O...O..........##.#O..O......O..O.#...#O.O.OO...#.#OOO.#...O#....#.O.#
|
||||
.....O.O...#OO#.OO#......#..O.O..#.OO.......#...#.O.O#.O.#O.O#..#O##..OO...#......#.O....#.....O.#O.
|
||||
.O#OOOO...#.#..........O#.#.#.#.O....O..O...O...OOO.O.O.O..OO..O..O#.#...#....#...#O#.OO.O..#.O#....
|
||||
OO#OO..#.O.#....#..#.#..#O#.O#O#.#..O.O....#..O...OO..O..#........#.O...O#.#.....#....O.....#.O.....
|
||||
.O.....#...OO...#..O..#..O..O##..OO...O....#.O.#............###.O.#..O..O.........O..#.O..O.#OO.#...
|
||||
.##O.#.O.#....O..O..#..O.#.O..##O..O......OO...#...O..OO#....O..O#O.##.OO#...O#...#.......O.O#.#OO..
|
||||
.OO#O#...O..##.O......O..O.O....O...OOO.O..#...O#.#.O.OOO..#...#.##..OO..................OOOOO...###
|
||||
.#..##...####.O#...O........O...#O..O..O....O##O..O..OO..#.....#...O.....OO......OOO.#..O.##OO##...#
|
||||
....O#........O##.O...O#..#.O#O...O...O.O........#..#.#.O......O..#.....#.O..#.#..#..#O....O##...#..
|
||||
.O..OO.O##..O...O.OO....O.OOO..#O#.O##......O.O#....O#O.O......#.O..#O..#O.........#..OO....#.OO..O.
|
||||
.#OO..#OO.###........#...#..#.O..#O.O#O...O.#.....O...#......O.......#.O.#.##.O..#O.O###OOOO...#..O.
|
||||
##...OOO.#..........O#...O#.....OO...O#..OO.OO.#.OOO..OO....O..OOO...##O...O.........##O...#.#O.....
|
||||
.#....O.....#OO.O.OO..O......#.OO..#O...O..##O.#O....#O.OO..#O.OO...O..O.#..##...O......#O##OO.#.O..
|
||||
.#..O....O....#......#.O.##...OO.O.O...O.OO.O....#...#..O....O#O..#...#.#..#...OO......OOO...O..#...
|
||||
#.#OO.#....O.#.OO....#........O.O.##...O.#.................OOOO....O..#......O..#.#...O....#.O#OO.#O
|
||||
....O.O.......##..O.........OO#O..O.O#.#.#.O....#..OO.O..O#O....O..O.O......O.O.#..O.......O.O..O.O#
|
||||
...........#OO...O....#.O.#..#O.O#.....O..O.....O#.....OO.#O...#O.#O.#.....OO.O.O....OO......O#O.O..
|
||||
OOOO.OO..O....O.O...O..#.........O#.##OOO#.O..O.O.O......O..#..O..#..#.O..O....O#O.#OO..O.O...O#.##.
|
||||
##.O.#O.#OO#..........OO#.OO.#..#.#......#.OO...#.O.O.......O##....O..O..#.#.#O....O..##.#OO.O..O..O
|
||||
#O...OO..#.#....##.O#.#...##OO#........O#.O..O#.........O.O.#....O.#.O.......O..OOO......O#O.###.O..
|
||||
....O#....#..O...#.#.....O.O#O..#O....O...O.OO#...O..O#.##.O.....O...#..#.O.....O...O#..O.#...#.#O..
|
||||
O.OO......#..O...O.O....#...OO..O#.O..OO..#.##.....#....O.O#O#.O....O..#..OOO..O....O.O..#..O.O..O..
|
||||
.#..#..##O..O.....O#.#.O.O..O..OO..O.O..OO.##.O...O..O#........O.............#.OO..#......O..#O#OOO.
|
||||
.#..##...O.#..OO...O..#..#O#..#..##.O#.#.....#....O.O..O.........#.###...#.O##..O...#.O.OO..........
|
||||
........#O.......O...O#.#....#.O#....#..O.....OO........O...#.........##.....O...O#.O...O.O..#OO.O.#
|
||||
.#..#.O##..##.O#.#.......OO...OO#...#O#............#.#...#...O...#.O..#O.#.O.........O..OO.O...O.#..
|
||||
#.O#OO...OO.O.#...##........#....O.#.O.....##.#.O.O.O.#..O#...O..#......#..O...###O..OO..##..OO.#OOO
|
||||
.OO...#O....O##.O...O.#....O...#O.......O.....OO.O...O..#...OO.OO.O#...O##.....O..#.#...#OO......O..
|
||||
..O..#...O...##..O...O..OO.O.O.O.....#.....O.....O..#OOO.....OOOO#.#.O..O..#........O.#O#.#O..O.##..
|
||||
.....##.....O.....O#...##.OOO....O.O..O.#.#O........OO.....#...##...#.#......#....OO.O.....#O....#.#
|
||||
..O.OO#....O..O.#O.#OO#..#.O.##.#..#.OO##....O#...#..O.#..#...#.#....OOOO.#...OOOO..O.........##O.O.
|
||||
O.O.#......O#...O..#.......#O.O..OOOO..#....#.#.OO.O..#O......#.#....#...#..O....#O.OO..O.......#.#.
|
||||
...O.O....O#......#.O.O....O#.#..#O.#.....#...#...#.O#.........O.OO..O###...O....O.#.O.#.....##..O..
|
||||
.#.OO...O#O.....O#....O......OO...OO.OOOOOO##....#..#..#O.#.OO....O#..OO.#O........O#..O.O#.#.......
|
||||
#OO#.#.....O#OOO#...O.........#......O#.......O.....O#.#O...O........#....O...O.....#.......##.OOO#.
|
||||
..#.O##..#OO..#....#O....#....#..........#O...#...O.#.O.O###O..O..#...#.OO....##..O.O.O.....O..O....
|
||||
....OOO#.#......#..O.O......##O.#.O.#.O.OO....#..O.......#.....#O.O...##O###.##.##..#.O.#.O#..#..O#.
|
||||
......O#OO......#.#..#.O#OO#O..O#O.O##.......O...O........O......O#.....#..#....#...#.#..O...O##.#O.
|
||||
#..OO..O.O.....#O.O.#.#......O......O.#....O.#OO.........#.O.O#..#..#.O..O.#..#...#...O.#..........O
|
||||
..O#OOO#.#.....O.....O..##.#..OOO.O..#..O#...##O..OO...#....#..#...#...OO.....##OO#.OO...#.O....#.#.
|
||||
#.#O.............#....O#.....O.....O.##O.....#.#.#.....O....O...O...##..O...#........#O..##.#.....##
|
||||
.O.....O...#O.#.O#..O#........#.##...O##O..........O##.O......O..#....##....###......O##..##O..#.O#.
|
||||
.#...#..#..O.O.............#....O.OO.....OO#O.....OO..OOO#O.O.O.O...#...#.........OO..O#.O...#.##..#
|
||||
..O...#O#.......#OO..........OO#..#.....OO#...#OO.O#....OO....O..O..#....#OO......O#O...#......O..O.
|
||||
O.......O..O..#O.....O#O.........O##.O#.#.O.O....##....O.#....O....OOO..#O#...#...O.O#.O.....O.O#.O.
|
||||
O.#O....O..##....O.........##.OO###....O...O...O..O#O#...#O.O.O....#..O..#..#.O.......###..#....#..O
|
||||
.........O..#O...O..OO.....#...O..#O#.....O....#O#....##...#.OOOO.O..O#...O..O.O#.#..O.O..#..#.OO...
|
||||
...#.....#..OO.O.#.#.O.....O#...#..O...O..O..#...O..O.O..#...#.###..#..##O.#.#O.......O..##O.O.O#...
|
||||
.##O......O....#....O....#O..#.....#.O..O.O.O..#.#O.....O#.O...#.#O.#...#.........O....O....OO..O...
|
||||
.OO.O.O.O#O..O##.O...OO.....O..O....O....#..#...O.O...O....O.#.O......#O.#.O#O..O...O.O.#.O..O.#....
|
||||
O#..#.#..#..#...#.O...O.###.##.OO.O.#.OOO..O..#O.#.O...OO...O.OOO....#.....#OO.O##.O.#.#O...#.#.....
|
||||
.#.....#.........O.#.........#...OO..O.#.O...O##O...#..O.O.OO#....###.OO.....#..........#.#OO...O.O.
|
||||
........OO..O.O.#..O.#.......#.#O.OOO...OO.O............O#O#...O...#.O.....#...........O...#..OO.O#O
|
||||
..#.#.#...O....#O.......#...#...O###.O.....O.O.OO....#O...OO.O.O........O.O.#O.O....OO.....OO.....#.
|
||||
#..OOO#......O.#.O#...#..#..O..O.O.O.#...O#OOO.#...O.#.OO.#O..#....#..#O....O.#.O...O...O#OO...#....
|
||||
.....#.....##...O....#..O..O.....O#OO.#O#.....O...O.##.#........O..O........#.#......##......#..#..O
|
||||
O..O....O.##..#.#O##.#.....OO....O.##O......#...#..OO.O.....#...#........O..O#O##.O.......#..##O..##
|
||||
#.....#O....O...#OOO#..O#.O.....O..OO.#..#.#.O#..O..O#.O###....O......O.#.O..#O.....#.......##O.O..O
|
||||
O.O.#..#....O....O.......#.O..O#O#.O..........#O.....#OO.O...#.OO.....#...O....OO....#...O....O.#..O
|
||||
..#...OO....OO......O....#..#..........##..##..#.....##...#..#O.....#OO......#........O.....O..O...#
|
||||
.OO#...O#.O....#.........OO#...O#..O.#..O.O.O.#O......##.O.......O...O...###.O......O....O...#.OO#..
|
||||
..O..O#O.#..O.#O...OOO#O.#.O....O.#......O....#....###....OO......O...#...OO.#....O........O#..#..OO
|
||||
#..OO..O......#...##..O#.O........O.O...##.#O...O...#O#.O.O....#.............#.O#.#..O..#..OO#.....#
|
||||
#..........O...O##.O#..O..OO..O.....#O.#.O......#......O.O....##.O#OO..O.O..O.O.O..#..O....O..#....O
|
||||
.O.O...O.#..O.O....#.#.O.O.##.##..O..#OOOO.###...#O...#...O.....O...#.##.OO..O.#..#.O.#.......O....#
|
||||
#....#....OOOOOOO.#...OO....##O.#..#......O..#..........O......##..O..###..#.O....O.......OO......#.
|
||||
.O.O..##.O.#O.#...#....O..O.....#..##......O.......O..O#.O##.#........O..#.O.#.O.O..##..###..##.#...
|
||||
..OOO..O##..OOOO.O.....OO##..O..O.#....#.....OO......O.OOO#...#O.OO...O.O......O#..O.##....###...#.O
|
||||
....O...O.O....#..O#.O.....O.O.#.......O##...O#..OO.O.O##...#.....O#.###....O....#O.........OO..O.O.
|
||||
O#.O......##..#.#..............#......#.#.OO#......##O#OO..OOO..##.O##....#..O...#......##O.O##...OO
|
||||
...#OO....OO...O#.#..##....OO.#..#O......O#....#.O.....O.#O..OO.#..OO...O#.O#....O.#.OO.O.O#..O.....
|
||||
#..O.OO#O...O..O..........#..#.#..#..#O.....#O#..O....#..O...O.#.#O#.#OO.....OOO.#..#.........O...O#
|
||||
....O......#..........O...#.....OOOO........#.#OO.O............O...#....O........#....#....#........
|
||||
...O.......###...O.O...#O.##O.OOO.........O.###.O.......O....O.O...O.#.....#..#O..#..OO..O.O...O....
|
||||
O.O#....##.O.O.....O....#............OO.#O...O..#...##.#.#O#O.#.....O......O....#.OO#.O#....#.....O.
|
||||
..O####.O.........O...........OO..OO.#.....O.......#..O#.O....O#...##.......#.#....O..O..O#..##.....
|
||||
.#..#......O.##.O.OOO.O.OO....O.......#......#.O...OOOO...O..#..#.O.#......O...O#.#.O.#.O....O....O.
|
||||
##....O.O..O..O.#...O##.......O....#...#OOO.O..##.....#....O.......#O..#.#O..O.#.......O..#.O.O#.O##
|
||||
...O....O#O.#...#......#..O.O.O.O...O.....O..O.#..#.....O#...OO...#.O.O....#..OOO...#.....OO.OO..O..
|
||||
O##.O.##.O#OO...OO...OO..O....OO#O.#O..O.O....OO..........O..#.O.#O#.......O.O..#O#....#..#...#O..#.
|
||||
.#.#..........#.......#..OO#....O.#.#.O.....OO.#.O..#.#.O....#..O....#..#..O.#O#O.....#.O.O.#O.O.#O.
|
||||
.O.#....##O...#..OOO.#......#...#.O.......OO....#.......#..#.OOO........OO..O..###O##..O.....O##....
|
||||
OO##..O#....O.##.......O...#........O.O...#O#.#.OOO....#......#.#O.O.O..O..O...#.#.O.O.OOO.O#O......
|
||||
#O...#....OOO.O...#O....O...O..........O..#..O#.O..#O.....#......#.#..#.OO..#....#O#....O...O....##.
|
||||
.OOOO......##.#O.#O...#......O..#..O..#.O...O.OO...............#O...O..##..#.#....O...O..O.##..O.O..
|
||||
@@ -0,0 +1,157 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
"golang.org/x/exp/maps"
|
||||
)
|
||||
|
||||
// var log = aoc.Log
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 int
|
||||
}
|
||||
|
||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
var maplist []Map
|
||||
var m Map
|
||||
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
if len(text) == 0 {
|
||||
maplist = append(maplist, m)
|
||||
m = Map{}
|
||||
}
|
||||
|
||||
m = append(m, []rune(text))
|
||||
}
|
||||
maplist = append(maplist, m)
|
||||
|
||||
score1 := 0
|
||||
for _, m := range maplist {
|
||||
m = aoc.Transpose(reverse(m))
|
||||
m.Sort()
|
||||
score1 += m.Score()
|
||||
}
|
||||
|
||||
score2 := 0
|
||||
type record [5]int
|
||||
var current record
|
||||
memo := make(map[record]int)
|
||||
|
||||
for _, m := range maplist {
|
||||
// fmt.Println(m)
|
||||
|
||||
m = aoc.Transpose(reverse(m))
|
||||
|
||||
for i := 0; i < 1_000_000_000; i++ {
|
||||
m, current = cycle(m)
|
||||
|
||||
v, ok := memo[current]
|
||||
if ok && v > 1 {
|
||||
counts := aoc.Reduce(
|
||||
func(i int, v int, counts [3]int) [3]int {
|
||||
counts[v]++
|
||||
return counts
|
||||
}, [3]int{}, maps.Values(memo)...)
|
||||
|
||||
// fmt.Println(i, counts)
|
||||
i = 1_000_000_000 - (1_000_000_000-counts[0]-counts[1])%counts[2]
|
||||
clear(memo)
|
||||
}
|
||||
memo[current] += 1
|
||||
// fmt.Println(i, current, v)
|
||||
}
|
||||
score2 += m.Score()
|
||||
}
|
||||
|
||||
return &result{valuePT1: score1, valuePT2: score2}, nil
|
||||
}
|
||||
|
||||
type Map [][]rune
|
||||
|
||||
func (m Map) String() string {
|
||||
var buf strings.Builder
|
||||
for _, row := range m {
|
||||
buf.WriteString(string(row))
|
||||
buf.WriteRune('\n')
|
||||
}
|
||||
buf.WriteRune('\n')
|
||||
|
||||
return buf.String()
|
||||
}
|
||||
func (m *Map) Sort() {
|
||||
if m == nil {
|
||||
return
|
||||
}
|
||||
for _, row := range *m {
|
||||
base := 0
|
||||
for i, r := range row {
|
||||
if r == '#' {
|
||||
base = i + 1
|
||||
continue
|
||||
}
|
||||
if r == 'O' {
|
||||
if base < i {
|
||||
row[base], row[i] = row[i], row[base]
|
||||
}
|
||||
base++
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
func (m *Map) Score() int {
|
||||
if m == nil {
|
||||
return 0
|
||||
}
|
||||
|
||||
sum := 0
|
||||
max := len(*m)
|
||||
for _, row := range *m {
|
||||
for i, r := range row {
|
||||
if r == 'O' {
|
||||
sum += max - i
|
||||
}
|
||||
}
|
||||
}
|
||||
return sum
|
||||
}
|
||||
|
||||
func reverse(m Map) Map {
|
||||
for _, row := range m {
|
||||
aoc.Reverse(row)
|
||||
}
|
||||
return m
|
||||
}
|
||||
func cycle(m Map) (Map, [5]int) {
|
||||
var current [5]int
|
||||
|
||||
m.Sort()
|
||||
current[0] = m.Score()
|
||||
|
||||
m = aoc.Transpose(reverse(m))
|
||||
m.Sort()
|
||||
current[1] = m.Score()
|
||||
|
||||
m = aoc.Transpose(reverse(m))
|
||||
m.Sort()
|
||||
current[2] = m.Score()
|
||||
|
||||
m = aoc.Transpose(reverse(m))
|
||||
m.Sort()
|
||||
current[3] = m.Score()
|
||||
|
||||
m = aoc.Transpose(reverse(m))
|
||||
current[4] = m.Score()
|
||||
|
||||
return m, current
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 136)
|
||||
is.Equal(result.valuePT2, 64)
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.True(result.valuePT2 < 87286) // first submission
|
||||
is.True(result.valuePT2 < 87292) // second submission
|
||||
is.True(result.valuePT2 < 87287) // third submission
|
||||
|
||||
is.Equal(result.valuePT1, 110407)
|
||||
is.Equal(result.valuePT2, 87273)
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7
|
||||
@@ -0,0 +1 @@
|
||||
rr=8,dd-,qck-,hkk=8,xfmqn=4,sx-,mgm=4,rkbh=8,scdp-,jllv=6,vgv-,bth=3,mmx-,vjbx-,jllv-,mnp-,mtcd-,zdxdbr=8,hjxk-,hcj=4,cbss=7,gds=3,lsk-,tc=1,hfjd-,gz-,bjbjs-,zx-,ldd-,kvp-,jllv-,xhmg=5,nzjmq-,xml=1,dz=1,mpl=6,zkp=5,ksl-,jsb=5,pb-,ffk=6,lsx-,hpb=6,gpkm-,dd-,sqn=9,jsb=8,hvghn-,hfjd=7,mtcd-,dq-,cmfkv-,vmch-,bp-,ftfh-,qck=8,dxxp=4,pkhcz=5,hb=5,ln=8,cpq-,nn-,mhr-,qfz=5,pp=8,lfst=9,tz-,rdr-,zlrz=1,lfcfh-,btnp=8,jgc=6,qrcl=9,hqcs-,bnf-,gsj=4,nmtpp-,hh=8,bq-,vzdt=3,hsr=9,jrj-,sbpc=6,ph=4,znqb=5,mfdc-,cpk=3,srkt-,kb-,sbs-,jfs=8,pf-,xsrqvg-,tkf-,pmb-,vzgr-,zjdzq-,tzn=4,lt=6,fsx=1,bfk=5,hfjd-,zpv-,xldjdr-,vmlz-,gn-,bc=7,mpdgm=9,mnl=1,hn=3,bvd-,cp-,ktl=7,xlp-,gj-,snzvpk=5,sp=4,jbf=6,pxs=7,dsxs=4,tc-,vb-,rpfx=5,rkvv=4,kkmdd-,dd=4,hqsd-,hst=1,kqjzrb=6,njf-,sbpc=8,lsx-,mmx=9,xlp=2,qx=6,jq=9,pb-,ds=5,dk=2,vlv=4,njf=7,lvjhdd=3,bxh=6,bvd=1,kcxfg-,ftf-,gql=8,mpl=1,qr=5,ghg-,kn=7,vcrpbh-,zpv=2,rbkzjv=6,jllv-,ldc=3,blm-,qr=5,mnl=2,cmx-,ccmftg=6,dsxs=8,ndvqm=6,tc=8,csdjh=4,gn-,zdr-,fp=3,qmj=4,fh=9,lvrrk=1,tnt=1,cthbt=3,dxz=3,bvd-,tj=9,rx-,ls=1,ttd-,fg=1,ls-,cpk-,jlt-,nt=8,jnkh-,ccmftg=5,nn=3,dtlc-,bdzht=7,zpdbq=3,hqcs=4,fg=3,kqjzrb=4,ghdft=7,vzdt-,vxr-,pb-,hsr-,kpg-,bfk-,snzvpk-,cbt-,hjxk=3,hlprv=5,fsq-,mtvrb=2,mhr=1,xrpgk=7,jd=1,jt=4,tk=5,pmm=2,jsb=8,xldjdr-,znqb=2,dqdl-,sp-,mtcd-,sd-,jzg-,mpdgm-,grl-,ljfx-,mpl-,gj-,ckk-,ltkdp=4,qb=3,qhx=6,gds=1,bhfb=8,qhx=3,zx=7,dxxp=3,hctrqn-,ljfx=6,rpfx-,jmz=7,jsb=4,mvx=5,rf=9,nfxf-,fh=9,gn=8,fgdbf-,scdp-,cthbt=6,lcrqx-,tzn=3,jrj=4,gpx-,vhp=8,xcrjq=7,xrpgk=3,kvp=7,lp-,dqdl-,ksl-,bj-,chp=7,trj=7,xdz=1,sb=6,bnf-,xml-,ftl-,jszb=2,ls-,qt=9,xl-,xhmg=6,xxb-,vfprd-,kkmdd=7,lghn-,grl=2,tcm=9,nlb-,hlt=2,zdr-,tjlg-,jbf-,xl-,gf-,jhp-,htxs=3,dd-,rtz-,slp=8,vhp-,gn=6,pn=9,dnx-,lfcfh-,dm-,hqcs=8,bbf-,dz-,qglr=3,qcm=5,slg-,hkk-,qbz=2,zbk=4,pz=2,rbkzjv-,sgs=9,fthkvq=7,ftf=4,dq-,mmb-,mf=6,hctrqn=7,lhls-,zbrslm=6,kx=9,vxfgd=1,vgv=8,gpx=1,vh=4,bxh=3,cxkt-,qhb=8,gz-,ksd-,mhp=6,xq-,ksl=9,spc-,ttpk=6,ldd=7,rg=4,pm=9,bfk=4,zv=9,xsrqvg=9,qk=2,jrj=6,csdjh-,vbjch=1,dxz-,vmch=4,px-,jdvn=3,cp=9,lghn-,ttpk-,zbk=7,nqh=6,rkbh-,fgv=8,pvqk=8,jd=5,vmch=6,ln-,jmztc-,pmm-,qfz-,mhj-,rjtdf-,jv=2,jskgmj-,gt=1,jv-,pxj=8,hjs=9,gz=3,kh=2,nqq=7,dtj=8,fsq=8,qglr=3,vgv=3,tjlg=3,rdr=3,lx-,vhp-,jnkh-,pkx=2,chtcdj=9,ksl=2,bcb-,tnt-,gkf=7,kh-,nsp=3,pp-,mmx=7,mgv-,vzgr-,bnf-,tv=7,hctrqn-,xhmg-,hkk-,kkmdd=5,bhfb=3,btg-,bqch-,vbhvv=1,pz-,fbklmr=9,hkhs=5,lppmv=9,ltkdp=9,hlprv=9,ttp=6,gs=5,lm-,pz-,gn=6,qb-,vnv-,vhbf=8,gpl-,pmm-,rsn=2,gqlkm=5,lsk-,hst=7,hv-,pgdg-,hst-,csdjh-,fvp-,cxkt=8,gkf=1,kvx-,rjsb=9,pvqk=9,glp=2,ds-,vbhvv=4,xs-,fgdbf-,blm-,kdr=5,grh-,lfcfh=3,mb=9,jh=4,prs=7,gm=3,dz-,ftbdsn-,jd=2,kjgmr-,dxv=2,qmq-,dtlc-,ll=9,tjlg-,plj=8,ccg-,lt-,vq-,ft=6,lsx-,xcrjq-,rkvv=2,sph=7,vb-,lp=6,xnvm=4,ktd=5,txc=6,zbk=4,lxm=9,lq=6,mhr-,gql=9,gpkm=7,lsx-,fz-,bq-,hlt=3,trj=9,pkdd=9,xnvm=4,hv=5,lppmv-,dg-,vq-,rbkzjv-,srkt=3,cpk=6,vds-,xvm-,mpdgm=3,cc-,xml=3,hcj-,dxv=9,lvjhdd=2,mtx-,dz-,mdtzp-,gj-,zrvk-,gds-,kz-,tj=5,tkk=1,qx=9,tmn-,mnp-,ztz=7,qz=6,ndjn-,tcm=7,pgdg=2,ftfh=2,bfk-,nqq=9,zmft-,rvps-,gmvt=3,pkhcz-,qfz-,bth=8,xb=8,lt=2,zx-,mrs-,tgvkt=2,qt-,dqdl-,fsx=8,mnp=6,hpb=6,pgdg-,vmlz-,prmt=7,bqch=7,bxg-,mvbf=4,qm=7,xq=9,prmt=9,qb-,crhh-,ghv=8,nrk-,qhx-,qz=7,sgs-,lmdx-,sbpc=5,nmtpp=8,bdzht=4,blm=2,kz=9,vgv=5,hctrqn=2,nxc=6,pgdg-,pzllx=6,hx=8,slg-,nmtpp-,nt-,skb=6,mb=6,jk-,fd-,jvn=9,jh=2,lz-,vgf=6,nzjmq=5,kqjzrb-,sbpc=7,cm-,sbpc=8,xxb-,jh=4,jvh=5,hjxk=6,lkxmjz-,trj-,prs-,gn-,tj-,fvp=7,ztz-,vq=4,mdtzp=4,zbrslm=2,fz-,xsrqvg-,ktd=6,hl=5,nrk-,nnhv=3,gc=3,rtl=8,tn=6,tnt=9,jd-,gzt=3,bdzht-,tv-,tk=3,mls-,jnbfd=5,kz-,nzjmq=6,qrcl=4,mrsl=1,sbs=7,gqlkm=3,jsb-,mj=3,mrs-,fgdbf-,nv-,cm=1,zrvk-,njf=7,ljfx=1,zpdbq-,zc=6,zpdbq=6,kvp=5,zsd=9,hjs=7,njf=9,xq-,nrk-,lghn=3,rjtdf-,dqdl-,vlv=2,jrj-,nnhv-,vx-,ffn-,xp-,fsx=2,gc=4,qxmqls=8,mhxczx=7,bxh=6,kb-,dnx-,mxrf=6,btnp-,zpv-,mblp=9,kg=9,tv-,fsq=8,kkmdd-,bdzht-,pt=8,zhsns-,hst-,jskgmj-,chtcdj-,hx-,dtlc-,mfc=3,tkf-,pk-,bhfb-,fh=1,bgtj-,nnhv-,blm-,tmn=1,qhzq-,bdzht=2,cx-,mgv=6,sqn=9,qm-,rf=9,nrk-,fh-,trj-,ttd=5,kh=7,bjbjs=2,pmm-,dd-,ksd=7,cbt=9,ng-,xn=6,mq-,kb-,jskgmj=3,cx=8,rf=1,vbv=9,jfs=8,xl=4,xs=4,cpk-,jc=5,sgs-,tsp-,pn=5,pp-,mhj-,nlb-,qs-,xldjdr-,fgdbf-,vr-,md=7,gsj=7,hjxk=8,tnt-,fvp-,bc-,qb-,ksl-,fbklmr=3,cthbt-,vnv-,lsk-,plj-,hlprv=6,gqlkm-,xm-,ksd-,rx-,kmlszs=7,kkmdd-,vzdt-,ftbdsn-,xhmg=2,sp=2,ng=9,hp-,vgv-,mnp-,grl-,tnt=7,bxg=7,pb=6,sph-,pmm=4,rr=2,nn=7,spc=8,hkhs-,lmdx-,hfjd-,ccmftg-,snzvpk-,dg=2,qhzq-,cjhz=4,qjqhhf=6,hqcs-,spc=7,jnbfd=8,chtcdj=7,mmb-,qmj-,kzkn=4,lp-,nsp-,ffk=5,bv-,hlprv-,xdb=8,qbz=9,mx-,zjdzq-,jt=7,bnc-,ltkdp-,xs=6,qhzq-,cbss-,gn=8,hvghn=4,gf-,gzt=1,vp=3,mj=8,qz=9,xxb-,ftfh=1,kdr=9,hv=1,xb=7,vk=8,mnl=5,hx-,xs-,jk=2,cr=1,dsxs-,spc-,dxxp=7,gchjj-,xldjdr-,zkst-,ftl=7,rpfx-,pkx=3,js-,dj-,dtj=2,plj=7,vbhvv=2,hkk=8,gqlkm=9,gmvt-,bjbjs-,skb-,jskgmj-,vbjch-,jmz=3,nrk=8,nsp=4,mtvrb-,sd=8,ph=2,hpb=5,bgtj-,kn=6,ms-,mrq=1,xz=2,tk-,vhp-,ng=8,xdb=6,sbs=9,pzllx-,mrsl=4,hlt-,jvh=2,bnc-,mhxczx-,chp-,gpx-,fsx=1,cxkt=2,dsxs=4,tgvkt-,bnf=4,csdjh-,xmx-,zxn-,mnl=5,xlp=7,btnp-,sbs=5,zjdzq-,nqh-,kn=2,fp=7,btg-,zm=2,mvx-,Line truncated
|
||||
@@ -0,0 +1,136 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
var log = aoc.Log
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 int
|
||||
}
|
||||
|
||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
r := &result{}
|
||||
|
||||
var ops []string
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
ops = strings.Split(text, ",")
|
||||
|
||||
r.valuePT1 = aoc.Reduce(func(i int, t string, sum int) int {
|
||||
sum += hash(t)
|
||||
return sum
|
||||
}, 0, ops...)
|
||||
}
|
||||
|
||||
var boxen boxes
|
||||
|
||||
boxen = aoc.Reduce(func(i int, op string, b boxes) boxes {
|
||||
return b.Op(op)
|
||||
}, boxen, ops...)
|
||||
|
||||
r.valuePT2 = boxen.Sum()
|
||||
|
||||
log(boxen)
|
||||
|
||||
return r, nil
|
||||
}
|
||||
|
||||
func hash(s string) int {
|
||||
var sum int
|
||||
for _, a := range s {
|
||||
sum += int(a)
|
||||
sum *= 17
|
||||
sum %= 256
|
||||
}
|
||||
|
||||
return sum
|
||||
}
|
||||
|
||||
type lens struct {
|
||||
label string
|
||||
value int
|
||||
}
|
||||
|
||||
func (l lens) String() string {
|
||||
return fmt.Sprintf("[%s %d]", l.label, l.value)
|
||||
}
|
||||
|
||||
type box []lens
|
||||
|
||||
func (lis box) String() string {
|
||||
var buf strings.Builder
|
||||
if len(lis) > 0 {
|
||||
buf.WriteString(lis[0].String())
|
||||
}
|
||||
for _, l := range lis[1:] {
|
||||
buf.WriteString(l.String())
|
||||
}
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
type boxes [256]box
|
||||
|
||||
func (lis boxes) String() string {
|
||||
var buf strings.Builder
|
||||
buf.WriteString("Boxes:\n")
|
||||
for i, b := range lis {
|
||||
if len(b) > 0 {
|
||||
fmt.Fprintf(&buf, "Box %d: %v\n", i, b)
|
||||
}
|
||||
}
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
func (lis boxes) Op(op string) boxes {
|
||||
if a, _, ok := strings.Cut(op, "-"); ok {
|
||||
i := hash(a)
|
||||
|
||||
pos := slices.IndexFunc(lis[i], func(l lens) bool { return l.label == a })
|
||||
|
||||
if pos >= 0 {
|
||||
lis[i] = append(lis[i][:pos], lis[i][pos+1:]...)
|
||||
}
|
||||
} else if a, b, ok := strings.Cut(op, "="); ok {
|
||||
i := hash(a)
|
||||
v := aoc.Atoi(b)
|
||||
|
||||
pos := slices.IndexFunc(lis[i], func(l lens) bool { return l.label == a })
|
||||
|
||||
if pos == -1 {
|
||||
lis[i] = append(lis[i], lens{a, v})
|
||||
} else {
|
||||
lis[i][pos].value = v
|
||||
}
|
||||
}
|
||||
|
||||
return lis
|
||||
}
|
||||
func (lis boxes) Sum() int {
|
||||
// return aoc.Reduce(func(b int, box box, sum int) int {
|
||||
// return aoc.Reduce(
|
||||
// func(s int, lens lens, sum int) int {
|
||||
// return sum + (b+1)*(s+1)*lens.value
|
||||
// }, sum, box...)
|
||||
// }, 0, lis[:]...)
|
||||
|
||||
var sum int
|
||||
for b := range lis {
|
||||
for s := range lis[b] {
|
||||
sum += (b + 1) * (s + 1) * lis[b][s].value
|
||||
}
|
||||
}
|
||||
return sum
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 1320)
|
||||
is.Equal(result.valuePT2, 145)
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 503154)
|
||||
is.Equal(result.valuePT2, 251353)
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
.|...\....
|
||||
|.-.\.....
|
||||
.....|-...
|
||||
........|.
|
||||
..........
|
||||
.........\
|
||||
..../.\\..
|
||||
.-.-/..|..
|
||||
.|....-|.\
|
||||
..//.|....
|
||||
@@ -0,0 +1,110 @@
|
||||
\.......................\..........................................-..................-.../................-..
|
||||
....../.......\...-......-.|...\..............\.................|............././....-........................
|
||||
...............-...-........................................\......\..-.............|......-....\....-........
|
||||
..\..|.|...........................-.|........................................./.|....|................|......
|
||||
|../................|............................................................\........../..\..............
|
||||
........\............../................/..........................\...\....|............./....-.........\\...
|
||||
.................-...-...................\../........-|.................../......-...........|................
|
||||
........-............/...|-............-.....\.|..............-....-../\../..................\...\././........
|
||||
........................-|................................................................-........-..........
|
||||
-......./.................|.....\.................\.....//............-........./..../....|...................
|
||||
....-.............-........-..........-|.......|...../...\...................\.....................|..........
|
||||
...|...\.........|.................|.....|....-....\.......\./........................-.../..../.....-........
|
||||
....|....-.-..............\.........|.......................-.......-..............\................/.........
|
||||
.....|.\...........-.................-.-........../...\............|...............|...|......./.......|...../
|
||||
.....\.........................-.../..-./...\...................../......\...-.......|.\........-|............
|
||||
............|.....................................-....../....\.............../-...|...\..\................./.
|
||||
......-./|....../............|.........\............-../...-......./.\..\....../......|/...\..................
|
||||
................................|.......|..-..../.............................../.-..................-..-/..|.
|
||||
...............................-......./......................|./...............-............./....../........
|
||||
..................../....................\........\...........................-............/.../..............
|
||||
.|||......../.................|.................../..\............................-......./..|...|/.-.........
|
||||
......-......./\....../.........|....../.......-...............|.\........-............/.../..................
|
||||
.....................-.\/|................//.../.........|.|......\.-..|.........|.........\..................
|
||||
.........................\/.......|.|............................|........|.............................././..
|
||||
.................................|.................\../..|/.................\.................-...-........-/.
|
||||
......................-...-.........../...........................\....\......-..-.......\.-....\....|........
|
||||
......-......../..............\/..................\..|........-..............|...-...../......|...............
|
||||
|.......|.../....|..............//.....................|..........|/......../................|................
|
||||
...|.|..................../|..../.-.......-...........|.....|./....\......-......-................|...........
|
||||
......\/./.|\..../|.|..|..........-....|...........|.-.|...................-.\.....|....................\.....
|
||||
......../.\......................|.....|...........|.........../.......|....|...|.......-......../......\...-.
|
||||
...|...-...||......-..|..-...........|.-.................|.................................-..................
|
||||
..............-.\.-........|......\..........................................\./.\........../.....|...........
|
||||
../\.........|...............|............|.\/.-/.................-....|...-.................-.....|..../.....
|
||||
....................../......../..../-.....\........................\..-.\....|....-.........../-.............
|
||||
.................................|................|.........|................../|.....|....\\............/.\..
|
||||
...///./.....\.................|/.....................\...................-............|................|.....
|
||||
............-...........................--........\................/.............-\................\.....-.../
|
||||
...............\.........../|............................|.....................\...-...\.....................-
|
||||
...\.............|.............|................\............\|...../...|.........................|...........
|
||||
..................|......|..........-.-..............\.........................\..............................
|
||||
....-................../.........../...|................/...............|./.|.../....\..../......./......//...
|
||||
...../....../..............................|...\../..........-..........-........-..//..../...................
|
||||
...............-......|......................|./........./............/..-...........|../.....-........-./....
|
||||
..\.........................|...-.......\.................|..............-........\....-.............-....|...
|
||||
.......|......|....../........\...........|......-........../......-..................../....................\
|
||||
.......................|....-..|........./.|.-...............|..\......\.....-.......\...-/....|/.........\...
|
||||
\......\..-.....................\..........................\................................../...........\...
|
||||
-....-......../............................................................../.\.......|..............|....-..
|
||||
........|......................|.............-....\................................./..\.......|..........-...
|
||||
...-...............|........./......\...../.......|...|...............\.../...\.../......|.....-.\......\.....
|
||||
............./.....|......................|.....................................\...||.................-....|.
|
||||
./.....-................/........|./....-......../......./..............\..................................\..
|
||||
.../..../\........-..........................|.-/.|..\................\\-.......|......./...||.......|........
|
||||
.....-.........................-...............\...........|.............-.\.../.|......-.|......../...-.....-
|
||||
......\....................|...../......................|.../......-..|............|......./.../.........|....
|
||||
...|...........-....................................../.|............./....|..../........./.....\../..........
|
||||
....../.../................\........................\...\....\......\............../|...............\.-.......
|
||||
./....\.../.............|............................-.../............../............/...........\...|........
|
||||
............................|.................|/..........//.........../..-...............|...................
|
||||
.....\......\.................|.....|...\-./...............\................|....../.....-..\........-....-...
|
||||
........................./-........\................./........-/.|....-.......\............-/\......|.\...-...
|
||||
..../../..|.|...............\.......................................-.........................................
|
||||
...........|...................................................-...-......|..................\............../.
|
||||
/....|......................................................................|\.../.......-...........-...|....
|
||||
......|.-.\......-........|.....-..|.\..............-......./......-|.........................-...............
|
||||
............\......................................|........................|.-...............................
|
||||
.........-.........../....\./....../.-...-..//.........../.......\\...........................................
|
||||
........\......../............./...-......\.../..|..|............................../......../..\..............
|
||||
--.........|.....-...|............../...|.......|..............\|............|.........................|.-....
|
||||
-\......./..............-....-....\...|.-........\/.\./............-/...\........|-.........../../...\........
|
||||
.\|\..............-......-.\...-....\..........................\........|...........-......./.............../.
|
||||
..........................|...\..../.../..........\.............-...//...............\..................-.....
|
||||
........./..........................\............|-.....|..-...|......../........-...........................\
|
||||
.......\.../.....\....../.......|..|...............-......................|....-...................-.|........
|
||||
......|.......\.../..............................-..............................|......-.-...................\
|
||||
/.....|.......-............/|.....|-......./..../......-........../..|......../.-..\..../....../...|..........
|
||||
............/..--..........-............\.......\................\........................../../....|.........
|
||||
..|..-................|.|..|................/.......\............-//.......................\..\...............
|
||||
.......................-......-..................|....\................-......\.|....\....|..../../|.-........
|
||||
........................-..................-...........................-..-................-................|.
|
||||
/.\....|.-.................................\..-.....\./.........../-.|..............\..\.....--|/....\........
|
||||
.......-..-../..................\..--|..............|...............|\........|...--................|./.\.....
|
||||
..........|................-.......|..................................................|...................|...
|
||||
-.-..|....-.|........-./...|.-.........\.....\/........-........\........../................./.../........\...
|
||||
..................../...|/......................................../............\.|./../................/\|....
|
||||
...//.........................\....../..............\../.......-..\....|......................................
|
||||
............................./..|./../.........-/..\..........................................................
|
||||
......\.....|..................|..................\.....\.-..\...../............................../...........
|
||||
..........\...........-..........-.....-....\/................../.................................\.....|..\..
|
||||
..../.\...................................\............\...\....|.................|.....................-.....
|
||||
...........-...........................\.......|-../.|....|.....|......................-...../................
|
||||
.......|.........\..............|....\...-......../...........-.....-..-...........-..................\...\.|.
|
||||
...........|.......................|....-..........\............................\.................../.\.......
|
||||
..../.................\.......-..|.................../........................|...............\...........-.|.
|
||||
............./..|.-\..../.....-............-....|..\......|......../............-.........|................\..
|
||||
...................\...\/......\............|......................\....|...................-./-..............
|
||||
..-\...........|.................../.....|....|............................-..|............\.............\....
|
||||
.|.....\....\........|..................\...............|..-/.........|.-/...........-............-...........
|
||||
.....\...../......-............|........./..|............-........................\....-......................
|
||||
......\......../........|..............\...-..-...|.......................................................|...
|
||||
...................|.................................\.....\...........................|../.|.-......-........
|
||||
..................|..............\.....\............|........../....../...............\.........\.............
|
||||
..|...........-..../....\.........--...\................../.............-...-....................-..../....|..
|
||||
.|...\...................|......-...........-\..........\.....|.....|..........|.........|....|-../...........
|
||||
.............\|...................../\...............\....../.......-....\.....................-..............
|
||||
.......//.....................\....\......\......\.........|...................../......../.........\......-..
|
||||
.\./.........-...-./-.\.............../......|................................\|....\...../....-..............
|
||||
.......|......../......../......./.........../...............|............................../..|......../.....
|
||||
............./.........|.....-./.........../....-......./|......-................|............................
|
||||
@@ -0,0 +1,188 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
// var log = aoc.Log
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 int
|
||||
}
|
||||
|
||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
var m Map
|
||||
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
m = append(m, []rune(text))
|
||||
}
|
||||
|
||||
rows := len(m)
|
||||
cols := len(m[0])
|
||||
|
||||
options := make([]int, 2*(rows+cols)+2)
|
||||
i := 0
|
||||
for j := 0; j <= rows-1; j++ {
|
||||
options[i+0] = runCycle(m, ray{[2]int{j, -1}, RT})
|
||||
options[i+1] = runCycle(m, ray{[2]int{j, cols}, LF})
|
||||
i += 2
|
||||
}
|
||||
for j := 0; j <= cols-1; j++ {
|
||||
options[i+0] = runCycle(m, ray{[2]int{-1, j}, DN})
|
||||
options[i+1] = runCycle(m, ray{[2]int{rows, j}, UP})
|
||||
i += 2
|
||||
}
|
||||
|
||||
// fmt.Println(options)
|
||||
return &result{valuePT1: options[0], valuePT2: aoc.Max(options[0], options[1:]...)}, nil
|
||||
}
|
||||
|
||||
type stack[T any] []T
|
||||
|
||||
func (s *stack[T]) Push(v T) {
|
||||
if s == nil {
|
||||
panic("nil stack")
|
||||
}
|
||||
*s = append(*s, v)
|
||||
}
|
||||
func (s *stack[T]) Pop() T {
|
||||
if s == nil || len(*s) == 0 {
|
||||
panic("empty stack")
|
||||
}
|
||||
defer func() { *s = (*s)[:len(*s)-1] }()
|
||||
return (*s)[len(*s)-1]
|
||||
}
|
||||
|
||||
var (
|
||||
ZERO = [2]int{0, -1}
|
||||
|
||||
UP = [2]int{-1, 0}
|
||||
DN = [2]int{1, 0}
|
||||
LF = [2]int{0, -1}
|
||||
RT = [2]int{0, 1}
|
||||
)
|
||||
|
||||
type ray struct {
|
||||
pos [2]int
|
||||
dir [2]int
|
||||
}
|
||||
|
||||
func (r *ray) next() [2]int {
|
||||
r.pos[0] += r.dir[0]
|
||||
r.pos[1] += r.dir[1]
|
||||
return r.pos
|
||||
}
|
||||
|
||||
type Map [][]rune
|
||||
|
||||
func (m *Map) Get(p [2]int) rune {
|
||||
if p[0] < 0 || p[0] >= len((*m)) {
|
||||
return 0
|
||||
}
|
||||
if p[1] < 0 || p[1] >= len((*m)[0]) {
|
||||
return 0
|
||||
}
|
||||
|
||||
return (*m)[p[0]][p[1]]
|
||||
}
|
||||
|
||||
func runCycle(m Map, r ray) int {
|
||||
current := r
|
||||
|
||||
s := stack[ray]{}
|
||||
s.Push(current)
|
||||
|
||||
energized := make(map[[2]int]bool)
|
||||
// energized[current.pos] = true
|
||||
|
||||
cycle := make(map[[4]int]bool)
|
||||
|
||||
for len(s) > 0 {
|
||||
current = s.Pop()
|
||||
|
||||
r := m.Get(current.next())
|
||||
// fmt.Println("pos", current.pos, current.dir, string(r), len(s))
|
||||
if r == 0 {
|
||||
continue
|
||||
}
|
||||
energized[current.pos] = true
|
||||
v := [4]int{
|
||||
current.pos[0],
|
||||
current.pos[1],
|
||||
current.dir[0],
|
||||
current.dir[1],
|
||||
}
|
||||
|
||||
if _, ok := cycle[v]; ok {
|
||||
// fmt.Println("cycle")
|
||||
continue
|
||||
}
|
||||
cycle[v] = true
|
||||
|
||||
switch r {
|
||||
case '|':
|
||||
switch current.dir {
|
||||
case UP, DN:
|
||||
// pass
|
||||
case LF, RT:
|
||||
current.dir = UP
|
||||
s.Push(ray{current.pos, DN})
|
||||
}
|
||||
case '-':
|
||||
switch current.dir {
|
||||
case LF, RT:
|
||||
// pass
|
||||
case UP, DN:
|
||||
current.dir = LF
|
||||
s.Push(ray{current.pos, RT})
|
||||
}
|
||||
case '/':
|
||||
switch current.dir {
|
||||
case UP:
|
||||
current.dir = RT
|
||||
case DN:
|
||||
current.dir = LF
|
||||
case LF:
|
||||
current.dir = DN
|
||||
case RT:
|
||||
current.dir = UP
|
||||
}
|
||||
case '\\':
|
||||
switch current.dir {
|
||||
case UP:
|
||||
current.dir = LF
|
||||
case DN:
|
||||
current.dir = RT
|
||||
case LF:
|
||||
current.dir = UP
|
||||
case RT:
|
||||
current.dir = DN
|
||||
}
|
||||
}
|
||||
|
||||
s.Push(current)
|
||||
}
|
||||
|
||||
// for i := range m {
|
||||
// for j := range m[i] {
|
||||
// if v := energized[[2]int{i,j}]; v {
|
||||
// fmt.Print("#")
|
||||
// } else {
|
||||
// fmt.Print(".")
|
||||
// }
|
||||
// }
|
||||
// fmt.Println("")
|
||||
// }
|
||||
|
||||
return len(energized)
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 46)
|
||||
is.Equal(result.valuePT2, 51)
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
|
||||
is.Equal(result.valuePT1, 8098)
|
||||
is.Equal(result.valuePT2, 8335)
|
||||
}
|
||||
|
||||
func TestStack(t *testing.T) {
|
||||
is := is.New(t)
|
||||
|
||||
s := stack[int]{}
|
||||
s.Push(5)
|
||||
is.Equal(s.Pop(), 5)
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
2413432311323
|
||||
3215453535623
|
||||
3255245654254
|
||||
3446585845452
|
||||
4546657867536
|
||||
1438598798454
|
||||
4457876987766
|
||||
3637877979653
|
||||
4654967986887
|
||||
4564679986453
|
||||
1224686865563
|
||||
2546548887735
|
||||
4322674655533
|
||||
@@ -0,0 +1,141 @@
|
||||
222343122415245553243251316124223234134666332224124211645376775672443247264263475261513546522316162532215534453661231232515522214351143451211
|
||||
422125443253354142511545636246664666565355152246453231651172747635424163415626462753445445312334225221624336126244661514234445544425223533122
|
||||
131212112421423414125516356342555542626661163526211536677376523712262371162153644117776261645533664544366146314432523222515425314231311544521
|
||||
131334344235153415214541223454455223563154114267331524774136127715554416125273543276346471735741663351266324144422511534542234341513351345352
|
||||
314541545523112111131565114333211153312641614321771374726154434476767125613311254537363422511721275135434164664442151263234241114111121141334
|
||||
435153335153513534132112326653656626231351436457153446433363235565156156723233715473535244413451723176561153261562445512312413413513135513241
|
||||
235243535523134543445216214455445352435554624255171271225755313626173154112144673146273747537614771377613244145436355342536323123434425211113
|
||||
132552152551514515631323412533333446136243376366556365574745474652757277632216317677316551253673465513776336664225626313216456312542531241352
|
||||
311415311541314143614162642634556464574541744355655753776632763662153656721435137347422375344242225276244673434333351454464536453212424421425
|
||||
453351344131342126143165264626543453632747531417235617257564537542611276314542732241535726557435722271523761452243145343543365433423153132344
|
||||
424354321333252642533513531241416236636427325176724425161362563217173773414665312244155777552374513335344162564462411154332652126231133233331
|
||||
433224533551436134314641523151361154615353522622137441214134673454347752343853221756746664765556521762762464233333523123643145626644231443435
|
||||
243311313556533564523443331214721572253144611715156456321767676655457736255732864573164467712433421256325731135656541255561161224441152415141
|
||||
511211214252345356344156642436611545463224342452742717585325436325574336455336582448256836717741726221177352616311422112513255165441212221131
|
||||
244253443163544142511413446172632624762126756145146775348573476557644782564438437852836725866452746165474553473737534665123425113435563332453
|
||||
232155346345514313654314235557517112176174776332136456448427547478426265844263882743533766568854547675464477171376662424251312612162632514355
|
||||
424114441642564135264345176163444365144163124128832285838626688224834432458556377773645427653638562736676174576737574642156232566466636441124
|
||||
543244331213246512421551417132132647763461226245235583478358556478588445828784366325778587856624776125647332126411416416253326543252561355453
|
||||
513411632124243263566153173255453461117356682265475822242236525286334354628536868726586284535383867467645552277715213631624352612331534144225
|
||||
234513324414264131211345613416736552211115685767773523645885727834464346536233245827443237753783724626566246761647646475456131431415434413214
|
||||
132312323255146664114745115275443572754326543474673247542856435836784453584863735676475556838547655484787272216413226712176641452341133361621
|
||||
324445311115236332563161165371142354332783687877726543524347444677384655338335874866474624655543543466338566764524432633543363631622335214314
|
||||
452146561262254136627644671525514257523265444635773245326674352228844844533536247443486645863647324742823822411266212747246263222143515531123
|
||||
323443456261326564347757145611113632534754323645837762327643383533554795688333775647234446628482555868382485343642524356327477353226234131236
|
||||
323566623463524644662155345214734554448367587534458465333783778836737748873896436675564776876254472473382773351746477537426351164321556552155
|
||||
411624314463555226413151162214157826642348553426375774773937688356445778864665387877397647688288645648488526683635462551221145364643422311353
|
||||
632541423444624336526576464457777686224586376437338832948677343497666833369685846994446858346385546773453274862246234173462724342631561154224
|
||||
353552612514333121215745416727247272652423544685753368594647394695658845883548858535734584333432476287445274435882257755366724515216151451335
|
||||
532166314441574113623175262414284358754786632434337878589943898388748395969493754638344944356356855723827482463322173565111471477266643531656
|
||||
116644351623354144151425116542234543365536844644456554366885339853375594997998864974865377578863643354482658652565456654732562467462642222633
|
||||
425265565534525427323521564886284475834357765873953575557676864375449896735695696945686539933897587748627756658646775714547636543542445454453
|
||||
535223341313647443711526456446656284686644344893747447894898636684595668686646634379736944587367734766868686525582828566224141647377452234555
|
||||
363661154543263115262561162483434662346246798873478436638737549697754638834495375733735333645433574877375276735684662372751455123234415466135
|
||||
233425541263155564422777566657463284532222644739657858356574964435535676435594635788954898867344838753677578547362236357265747553176223645334
|
||||
516113313346251471245336736766463235445577574763999559496983357388779634999695985559489635746544658453383775634426265623615715313624324613363
|
||||
325162436525537742416463226466422582452664444569687695737766869564846698477563438574369658749388443473974527623665566388541124766765465414216
|
||||
246532424466452274271137247462733834328375758733755764656833968984956876697799766884997394499744585594587876625677723447244217267426213343664
|
||||
164356325132241765153442235356485242287535595375398869579646888545895757975449659944533834737579865398575662388572336243423321763313272155166
|
||||
563615555622724634724833866443433524894838958833799835363644977657658578544664475868679458747866349983337933858733558557637772576116524351364
|
||||
415635136113175137578553536586564768643559866697595733497557879468449998976698759797676436636689587877974934738258785642847435574452213713115
|
||||
611145153512463742256332755487858466583796497738685664885658748948569545664445888744947857868589779795933867483673776857358564657524755764663
|
||||
235565633417713142257732254688636564985938796475899556649457697557496557466787887559566976984578789695478656638728764846466352277661663613361
|
||||
621414363456434251274757622526573747939964946885796964745598945469487687577499977988878866574434454755956575894225366755752223145132155653231
|
||||
345131227736331632753528624737877993467633874573544566489488585879587798745544677645759486797999989373758553748378762622865225676664655255241
|
||||
211147374365347566347683538644229836375367399779966469889799674657475784657559849567645885568589949973844765649576234674566626355732735375222
|
||||
123377577423217135757464227844458664877347575684876765589445958984848645558957589999985649678755757487567997496322362828232445742466637677526
|
||||
664165716524474573468574845478963396633746335989586478477469677874488696466969855457589699479795777786993453995866655558838835473455711456363
|
||||
645354217411347423778226725287476938984748595969986859957845897656645797969945967774756979786597495489759753559534884668577746471267563715146
|
||||
641123731653617153523878786635997676839634584755798896844786989789997886975976877949768456676679545757849946967975863276534664727276625714772
|
||||
115172313432542554343534322666684547383747359496846665858866986576677885977798965677465955688547658777937483437698822255673227856674321437423
|
||||
412316124234335666538374784464654983653484498444688865778477997658875656978599866558669858496479969969883747883595375635748886535531163731666
|
||||
126215534552633672772444476653659865338587448788645985679486758768567978966789759768556688875958549895757653789978826784367383554244325537527
|
||||
252471722164728674273366346869733763887789597776444684764998985757556667899857586887855996664484555498483585754587755247628423684671244526734
|
||||
616643241174113524686752733973994433637977478579974486858559967566675596878985789668957757945476696698659695977366876442282382768473657366141
|
||||
433715625621658365787576378559966694694594565764577974766866977599956779776859687775695787565694987685963787977966448785772368444344613132341
|
||||
542654365337336826434765643879738646353964647955974749776876686976656857777555965796959755779797949695874357763646457888473355582731254116326
|
||||
461216754736354442526774233456439439344649448885449769679668978899596596779679669865776767595846454969558697477357393642534444663773547743151
|
||||
242515737157657333842228548349875463457585648494866999577597668698587656558567788999587689857767876885764484449548964773473277753231345166735
|
||||
654521345226446835568566235799768737539786475876888887965595966585598966967969975867759665599758868667576445864433979732538253832712175534524
|
||||
115512724255847238822523769738898864344596868468594857859588665686578579798878998656799555798598889485694534558457599364226342568753677472213
|
||||
111524524557584843753648338688446565566879945758747566968678858898688798787995576956865896565768766698768659698554344826255288878683415552615
|
||||
775523534424885336584535598468769386864885649976596679699998877966986778776767559667869889767766556949956568378399476985828735885425764761532
|
||||
617234235723887272453554398456849533986998847969886896697596899979688786876777696866697569685659688446949473894494359678374775655237573674227
|
||||
731315731775542663287374348536374735499748575465485866966768699899697997797776666566989778755777686999847946948853933693544267753841326646546
|
||||
722426246522232587267567746363433367778759685487558796666966958776698867986668698666876866775886659846776955633755765593638285378256357434712
|
||||
174725351666826552875547497865663863549888789874668876958895676696978768897788786788566955869997548858768874638777786742243328886625132571731
|
||||
611354237262464432722652894576534365759676599966965877965957687768769888968769696957679665987557457444944459839769348686383583662783465636276
|
||||
435775645554577458385385799454458446877466964957585556758766679978876698869886969697899756896864788684659949467367797467452464686586746747527
|
||||
326715157438852348356648795697795987947557758498877979757678677886679987996677668886868888557795864545877549896579885386328386465786533157726
|
||||
453273273424255488663856445483976736667859995777897779896656697978997888787987898778776958957796758748894869487957534497554376546868722122324
|
||||
224573216435873475783673336556553645879964994546857977556976898696968678989979687688777875655579994576659674597887987885384834758677414425113
|
||||
356241135726344637684746374354974769468887978766569659956588999669799779786678667886579699675678884889486587434679643859352582448655434457222
|
||||
466565323122567376356874397989745956794895966548765989989778688799697678896789997978696969665976575677558444868875986457762338452225134143337
|
||||
362264215456463347238855743779549969969487765646768855768895876877976886666866799968989767688568764586578687569679978449782326532643416155546
|
||||
671362724447463788282378857469553747694544454845755975585656699878677799678797776968799697957896898878765444867363549353272748888443452166364
|
||||
632542654733754847425787585687488755596748847964799999775985798869786789699666867675565568797969676665954954838875438688564548862244145146171
|
||||
333723417316447367476286584684499973896998895898557855668598997699996977697796768788767776689759949696664864687338847464274357245662617625121
|
||||
732722335132788573566373398994377893654688989578766978658865988697879899789898877758688978567997675756877983739477395738266566365866553224517
|
||||
147177514747474242267782783587784747967985778647866665897959877679967669667689876857669669767556998597597497483549887695587764775634662343617
|
||||
152744472376652374322667687839455953897495766449899756875956679668789688868676978978876787578985556849965685833354883453248267842384616432657
|
||||
217227543612352346346455856939488455758985798868598588765697888677977868879697796686766696678556576857569777547694747435272652536672167123712
|
||||
744625215616674868776537785459394998859647888485449778786556769796876987889777989756758976977758496584958578978633843394583557326773745211217
|
||||
353354332722486863626455784779737558677796677557648786868756998567779997999757769989968679778794444858495938377534839655447657354377534537617
|
||||
351162251452745473452566496983484689397949849568679798775655588857855767769795678968695766898846549555848585493436735966444566758545364773274
|
||||
546334341147183722785558798496869978864895677895756565879578585766957665575757696669676677769768545948765446463585354842584745473612425647573
|
||||
235615763364478535767825263879546994497978874484569465769576969857869669765659777668868977865946966479776587987999955433355672374557554754214
|
||||
162177325222163583735436483646438894396659587698644456886655596959879587966867768858997789444759867989565846639353845278562446263633245724416
|
||||
324535255452483383635664425784958857579867676497445879975595969977679879855779697798889657664476857564676937793853344868547244368834643131142
|
||||
121347276513238722442368557665693779499584456766988769868757758795788956896585869778678687556788794995887699638544336543625582864246234111541
|
||||
357771157266317334828437783465549356369747964978875778866775965679685977988796799568586768676664767564576835757749675276226376757244531177246
|
||||
336664616327762746632336856333359783983467896468668468658857596888666655696975568657694759566847599666396674475446532283582787232143364371132
|
||||
644533212754142233635788744897443835653636699755644785889878558985567878858696858779788657475547995487649399794638387758824355331366214575725
|
||||
222217676717612667687783367437478679946969645869469768494864887557985785659965856994457654994548995554598868743539788752855264561637271324324
|
||||
356452154463414577848785374339498366535638544946846765677495769785557579699659788879447959897745467466459849543743454246822537753427335371562
|
||||
343351256333451586862433643627656985753774749546555768998795848687576559887698545798748988498774696693748665338953758884323743215516455337651
|
||||
511156433162323673647444877388393898578477588665844949845684789786485757669794987664595874795599974455755347864958728824643583546532455523751
|
||||
156124537652656126446766564883685565845949468648655489495444579455874554846945778967786444756587898964737436487344256846452377111452125151424
|
||||
515264356113762652852852632686537484556764597765774578755556886965448899978985694964457598494775673883444869546887836668355228143455736361562
|
||||
263512646525146141226625365446528679473694599878945468469659775468694555669548954648468546665655847884688365888823562232347546127534712221733
|
||||
631415241711525626678448673422265459959576695493999586674865475767744965494946497644686744965594334353963643655244478563353652375272512755651
|
||||
233341711151632262167275682837682337594668593834657957999678754665457846558698875995554875885564465558544593484682334467458266753354353656363
|
||||
222614621174264456548568855775763264556684446457483755666594465554896878549965797747587445795345639937745754468637877328233727712145444373316
|
||||
551136576466563613374865837744634548656596546959875864946578986489646467467887584454698786369755639588797883757583882864432762672266561742114
|
||||
311433545766254471655428367633528758869667674337353886355568568977559794557448545869856978986385835684993879575657778365536445625371464633155
|
||||
223612464456771261577683747465843843667648368983574634838577897765496687876598844667977633334687854753563787465237347324763236171472235426346
|
||||
411245121677351625555347323585443444334598696449339998397379788744556985684748696646376458494657966586849537253887746577841254462522431254352
|
||||
344346233632636772414765673728476885836598589955558748979779588656646877576889768598337348786569379345443684386546372358847445714773517622512
|
||||
155323536362462251246768675874228887274856495665585569666835536867574987794867838438565638693854398377677783434776265675564455312663443423541
|
||||
331566446775752674417132753235465665833378447847639386878845593445734945386694688999635777683567968539426228468486664337643254264256612362121
|
||||
243564654224225645722672382353864676463257496747548887493585987546678658735985743376384577953533946647357564447863573451724364472125432653566
|
||||
342315614225414552353574355435638346877654437484463854837898965395385547754648364866393337683989446882326338262227448314144441743477561422165
|
||||
513316635431624236671443348277886572254832458877847668477593794644585888563857755634797589885668862754772785358487877315135613177367144545513
|
||||
463143244643262172563515774358878556748352525757567987986693359853994963575439443448643467386743366524235883462535432614464455735443452664134
|
||||
365641135114444646623465131227245648484522527682468766639838853356859443957586854538395483886846572325432336737857272623363152162131551135414
|
||||
416313341334271754356764361744638674522648825426627539586358437534848469663986377869797354638474474353788632454247175546246417444136416435644
|
||||
224353155431264253763746646441542886447853826453463553364576374757797585985553484899859547773742768633328427884282476754133441524461616242643
|
||||
141663652631255115673535171111246265842334873322667887864398959494389595436394448689564435578232373254536888873517235136312276614212451451513
|
||||
124131511566566612435515461237554545678463532355284383577958338477334574565899548354995646534573786226335788675417311262514713363312364535154
|
||||
423124641651141434731445642547213258886735546328578275442562699767675575457466479427885838355373878586875834224154546773247146645646322335264
|
||||
412644326632526437735316412561445417468882886666655743427476665574794946797787288666754744722668682487625266217525212752446411411125122652443
|
||||
533453646465125514654252753512273714342227373732733663723654553522224855828427587263828376724486786422622551345652174733731235533661345526462
|
||||
431416626556561415256423726364711356216462533453778624228776264745488556248346558664685886255267664468734267241413666377354236365315112133322
|
||||
115242144546551242654657115464153653733572255453735867582743877872748475375858445224247557346684865447435434415136572343667245436453541641214
|
||||
211445545143351463615353774344215444543156828652686467572385233427763332873666832447256386848435536242337137777716372765516254142315334335233
|
||||
345124663224645321264314114673647256557756426376735374628552375257437773764536467386624358238642865332573246663566211211655655563524242452555
|
||||
314351264524343426135362454521352527263736457447533445374485277766767738682474542365754582457568722614424111744153725635141565436222616112315
|
||||
525142531331665442641251651451342365334554162254374267466577736465886625773232626738363773743786773241666727445735231415436342625513255235151
|
||||
543245142256442454155334231734217734761146755176638778856523266374354672783363252424683478557527343237227211135754547531342136551132351221533
|
||||
241355115114515145351235241342577311663523713245571552423844478483444456674576776374774635321762611146175633416417526461446534624524525232351
|
||||
413212231435125464562416642131514721163172662635774761555772466528432746222877628357558463622434577676277711461224526611415645224221334321153
|
||||
424114552242412235261232556412366663124614547557116436567672766285253724382874567666431356536715216512355113511563132462412461555112225422135
|
||||
322324544333135432235125224253374616723165212337472223432464246434784434268261665524555163346167575177573432151165141342526636661664333152245
|
||||
533322454514225135644666511564116113743567665217446774461763723457213436114546254524754413534661176555531123216654634336153535555615455221351
|
||||
345114245113253556125335351622625171466165175642167753751336711273734343723253343654164414153211641676412352766561245653215262351455523141451
|
||||
142421541514212154334545211465656444644552463442357616615277117635256363621723512341776351424463622726131565431516465664346151153212233245553
|
||||
444314343434312135211364665242441535527647475416223551347736416724264751235567161762631557147415445546211321423221136662344161541525343455425
|
||||
513343214231252255165411335621632642146147645756642561211667322537371252122672641421372561555336143123644446534414131135624333443543522413531
|
||||
151133414553422411155141354122545416221132657162133367556711163132611352466177573117122527412137673543111622364234433423115531533515415532534
|
||||
344341433553215433332561124312211661162315615567541645475225431414323527474442612165214546553775576346352241352363416414626442233143123431324
|
||||
312334123334252355135521123323245125516132154636463653576675247514555746177477533534522123547665145656414436131454466514531422525141331441324
|
||||
221234522113214232242154165523542235561622643243233434644217742623556626525264626677654256257462621433131425222466152534235213545112335523443
|
||||
@@ -0,0 +1,225 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
var log = aoc.Log
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 int
|
||||
}
|
||||
|
||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
var m aoc.Map[int16, rune]
|
||||
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
m = append(m, []rune(text))
|
||||
}
|
||||
log("start day 17")
|
||||
|
||||
result := result{}
|
||||
result.valuePT1 = search(m, 1, 3, seenFn)
|
||||
log("result from part 1 = ", result.valuePT1)
|
||||
|
||||
result.valuePT2 = search(m, 4, 10, nil)
|
||||
log("result from part 2 = ", result.valuePT2)
|
||||
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
type Point = aoc.Point[int16]
|
||||
type Map = aoc.Map[int16, rune]
|
||||
|
||||
// rotate for changing direction
|
||||
type rotate int8
|
||||
|
||||
const (
|
||||
CW rotate = 1
|
||||
CCW rotate = -1
|
||||
)
|
||||
|
||||
// diretion of path steps
|
||||
type direction int8
|
||||
|
||||
var (
|
||||
U = Point{-1, 0}
|
||||
R = Point{0, 1}
|
||||
D = Point{1, 0}
|
||||
L = Point{0, -1}
|
||||
)
|
||||
|
||||
var directions = []Point{U, R, D, L}
|
||||
|
||||
var directionIDX = func() map[Point]direction {
|
||||
m := make(map[Point]direction, len(directions))
|
||||
for k, v := range directions {
|
||||
m[v] = direction(k)
|
||||
}
|
||||
return m
|
||||
}()
|
||||
|
||||
// position on the map
|
||||
type position struct {
|
||||
loc Point
|
||||
direction Point
|
||||
steps int8
|
||||
}
|
||||
|
||||
func (p position) step() position {
|
||||
return position{p.loc.Add(p.direction), p.direction, p.steps + 1}
|
||||
}
|
||||
func (p position) rotateAndStep(towards rotate) position {
|
||||
d := directions[(int8(directionIDX[p.direction])+int8(towards)+4)%4]
|
||||
return position{p.loc.Add(d), d, 1}
|
||||
}
|
||||
|
||||
// implements FindPath graph interface
|
||||
type graph struct {
|
||||
min, max int8
|
||||
m Map
|
||||
target Point
|
||||
reads int
|
||||
seenFn func(a position) position
|
||||
}
|
||||
|
||||
// Neighbors returns valid steps from given position. if at target returns none.
|
||||
func (g *graph) Neighbors(current position) []position {
|
||||
var nbs []position
|
||||
|
||||
if current.steps == 0 {
|
||||
return []position{
|
||||
{R, R, 1},
|
||||
{D, D, 1},
|
||||
}
|
||||
}
|
||||
|
||||
if current.loc == g.target {
|
||||
return nil
|
||||
}
|
||||
|
||||
if left := current.rotateAndStep(CCW); current.steps >= g.min && g.m.Valid(left.loc) {
|
||||
nbs = append(nbs, left)
|
||||
}
|
||||
|
||||
if right := current.rotateAndStep(CW); current.steps >= g.min && g.m.Valid(right.loc) {
|
||||
nbs = append(nbs, right)
|
||||
}
|
||||
|
||||
if forward := current.step(); current.steps < g.max && g.m.Valid(forward.loc) {
|
||||
nbs = append(nbs, forward)
|
||||
}
|
||||
|
||||
return nbs
|
||||
}
|
||||
|
||||
// Cost calculates heat cost to neighbor from map
|
||||
func (g *graph) Cost(a, b position) int16 {
|
||||
g.reads++
|
||||
_, r, _ := g.m.Get(b.loc)
|
||||
return int16(r - '0')
|
||||
}
|
||||
|
||||
// Potential calculates distance to target
|
||||
// func (g *graph) Potential(a position) int16 {
|
||||
// return aoc.ManhattanDistance(a.loc, g.target)
|
||||
// }
|
||||
|
||||
// Target returns true when target reached. receives node and cost.
|
||||
func (g *graph) Target(a position, c int16) bool {
|
||||
if a.loc == g.target && a.steps >= g.min && a.steps <= g.max {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// Seen attempt at simplifying the seen to use horizontal/vertical and no steps.
|
||||
// It returns correct for part1 but not part 2..
|
||||
func (g *graph) Seen(a position) position {
|
||||
if g.seenFn != nil {
|
||||
return g.seenFn(a)
|
||||
}
|
||||
return a
|
||||
}
|
||||
|
||||
func seenFn(a position) position {
|
||||
if a.direction == U {
|
||||
a.direction = D
|
||||
}
|
||||
if a.direction == L {
|
||||
a.direction = R
|
||||
}
|
||||
// a.steps = 0
|
||||
return a
|
||||
}
|
||||
|
||||
func search(m Map, minSteps, maxSteps int8, seenFn func(position) position) int {
|
||||
rows, cols := m.Size()
|
||||
start := Point{}
|
||||
target := Point{rows - 1, cols - 1}
|
||||
|
||||
g := graph{min: minSteps, max: maxSteps, m: m, target: target, seenFn: seenFn}
|
||||
|
||||
cost, path, closed := aoc.FindPath[int16, position](&g, position{loc: start}, position{loc: target})
|
||||
|
||||
log("total map reads = ", g.reads, "cost = ", cost)
|
||||
printGraph(m, path, closed, g.seenFn)
|
||||
|
||||
return int(cost)
|
||||
}
|
||||
|
||||
// printGraph with the path/cost overlay
|
||||
func printGraph(m Map, path []position, closed map[position]int16, seenFn func(a position) position) {
|
||||
pts := make(map[Point]position, len(path))
|
||||
for _, pt := range path {
|
||||
pts[pt.loc] = pt
|
||||
}
|
||||
|
||||
clpt := make(map[position]position, len(closed))
|
||||
for pt := range closed {
|
||||
clpt[position{loc: pt.loc, steps: pt.steps}] = pt
|
||||
}
|
||||
|
||||
for r, row := range m {
|
||||
// if r == 0 {
|
||||
// for c := range row {
|
||||
// if c == 0 {
|
||||
// fmt.Print(" ")
|
||||
// }
|
||||
// fmt.Printf("% 5d", c)
|
||||
// }
|
||||
// fmt.Println("")
|
||||
// }
|
||||
for c := range row {
|
||||
// if c == 0 {
|
||||
// fmt.Printf("% 5d", r)
|
||||
// }
|
||||
|
||||
if pt, ok := pts[Point{int16(r), int16(c)}]; ok {
|
||||
if seenFn != nil {
|
||||
pt = seenFn(pt)
|
||||
}
|
||||
_ = pt
|
||||
// fmt.Printf("% 5d", closed[pt])
|
||||
fmt.Print("*")
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
// fmt.Print(" ....")
|
||||
fmt.Print(" ")
|
||||
}
|
||||
fmt.Println("")
|
||||
}
|
||||
fmt.Println("")
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 102)
|
||||
is.Equal(result.valuePT2, 94)
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 843)
|
||||
is.Equal(result.valuePT2, 1017)
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
R 6 (#70c710)
|
||||
D 5 (#0dc571)
|
||||
L 2 (#5713f0)
|
||||
D 2 (#d2c081)
|
||||
R 2 (#59c680)
|
||||
D 2 (#411b91)
|
||||
L 5 (#8ceee2)
|
||||
U 2 (#caa173)
|
||||
L 1 (#1b58a2)
|
||||
U 2 (#caa171)
|
||||
R 2 (#7807d2)
|
||||
U 3 (#a77fa3)
|
||||
L 2 (#015232)
|
||||
U 2 (#7a21e3)
|
||||
@@ -0,0 +1,766 @@
|
||||
R 4 (#0a7a60)
|
||||
U 8 (#4453b3)
|
||||
R 6 (#8e4f70)
|
||||
U 2 (#4453b1)
|
||||
R 4 (#0feb00)
|
||||
U 4 (#355591)
|
||||
R 8 (#2a09c0)
|
||||
U 4 (#544c71)
|
||||
R 4 (#472930)
|
||||
U 2 (#199e33)
|
||||
R 3 (#3d8df0)
|
||||
U 5 (#199e31)
|
||||
R 7 (#45de50)
|
||||
U 4 (#57a941)
|
||||
L 7 (#671c70)
|
||||
U 5 (#5e5e81)
|
||||
R 4 (#2e9b60)
|
||||
U 8 (#490881)
|
||||
L 7 (#1846f0)
|
||||
U 3 (#304101)
|
||||
L 4 (#1846f2)
|
||||
D 2 (#58f3f1)
|
||||
L 9 (#2e9b62)
|
||||
D 2 (#56dcd1)
|
||||
L 2 (#671c72)
|
||||
D 9 (#275fd1)
|
||||
L 4 (#76b7b2)
|
||||
U 9 (#5b9641)
|
||||
L 4 (#1d3212)
|
||||
U 10 (#3d1841)
|
||||
L 3 (#5ad5e2)
|
||||
D 6 (#010211)
|
||||
L 5 (#13ec52)
|
||||
D 8 (#166471)
|
||||
L 3 (#53ebc0)
|
||||
D 5 (#0fdba1)
|
||||
L 4 (#54e450)
|
||||
D 9 (#440a21)
|
||||
L 3 (#49b242)
|
||||
D 5 (#2f0171)
|
||||
L 6 (#447332)
|
||||
D 4 (#182561)
|
||||
L 8 (#1aaaa2)
|
||||
D 6 (#0996a1)
|
||||
L 4 (#1c1212)
|
||||
D 6 (#5780d1)
|
||||
L 7 (#0fc1d2)
|
||||
D 7 (#36cb41)
|
||||
L 3 (#505552)
|
||||
D 7 (#8d8b81)
|
||||
R 4 (#2bf742)
|
||||
D 7 (#152791)
|
||||
R 5 (#760492)
|
||||
D 3 (#11a991)
|
||||
R 3 (#5debc0)
|
||||
D 10 (#59f211)
|
||||
L 4 (#66d342)
|
||||
D 8 (#1fc6b1)
|
||||
R 4 (#66d340)
|
||||
D 6 (#72dff1)
|
||||
L 2 (#3f1b10)
|
||||
D 4 (#2fca13)
|
||||
L 10 (#2d0162)
|
||||
D 5 (#8b5e53)
|
||||
L 6 (#2d0160)
|
||||
U 2 (#317053)
|
||||
L 2 (#650c20)
|
||||
U 7 (#2bed01)
|
||||
R 10 (#409ed0)
|
||||
U 2 (#166713)
|
||||
L 10 (#939350)
|
||||
U 6 (#166711)
|
||||
L 4 (#38a180)
|
||||
D 3 (#1d95f1)
|
||||
L 6 (#11ea60)
|
||||
D 5 (#931dc1)
|
||||
R 6 (#11bf70)
|
||||
D 7 (#536051)
|
||||
L 3 (#995b60)
|
||||
D 2 (#254e91)
|
||||
L 3 (#332fd2)
|
||||
U 6 (#7669f1)
|
||||
L 3 (#574642)
|
||||
U 6 (#1778a1)
|
||||
L 3 (#1a00c2)
|
||||
U 5 (#2eaa81)
|
||||
L 3 (#1cf8e2)
|
||||
U 6 (#0c71a1)
|
||||
L 6 (#868472)
|
||||
U 3 (#0a9fd1)
|
||||
R 9 (#104c02)
|
||||
U 4 (#082451)
|
||||
L 7 (#850d02)
|
||||
U 6 (#082453)
|
||||
L 7 (#322552)
|
||||
U 3 (#1339d1)
|
||||
L 6 (#8e11d2)
|
||||
U 4 (#6c5691)
|
||||
R 6 (#1dda10)
|
||||
U 3 (#25e5c3)
|
||||
R 7 (#370670)
|
||||
U 4 (#9324f1)
|
||||
L 3 (#451030)
|
||||
U 7 (#1f1021)
|
||||
L 7 (#0ba3c0)
|
||||
U 5 (#8a10a3)
|
||||
L 8 (#67db30)
|
||||
U 5 (#282473)
|
||||
L 4 (#0cd350)
|
||||
U 4 (#25e5c1)
|
||||
R 3 (#6b4ee0)
|
||||
U 4 (#333cf1)
|
||||
R 5 (#02b610)
|
||||
D 4 (#4e7cc1)
|
||||
R 3 (#92abb0)
|
||||
U 5 (#2f6ff1)
|
||||
R 5 (#483360)
|
||||
U 5 (#7b1cd1)
|
||||
L 8 (#3a5d50)
|
||||
U 3 (#1d2461)
|
||||
R 8 (#3b2fd0)
|
||||
U 5 (#630763)
|
||||
R 6 (#5033c0)
|
||||
U 3 (#252523)
|
||||
R 7 (#08eeb0)
|
||||
U 8 (#516633)
|
||||
L 7 (#156240)
|
||||
U 4 (#2db063)
|
||||
L 3 (#791070)
|
||||
D 5 (#2920a3)
|
||||
L 3 (#0dafe0)
|
||||
U 5 (#4185b3)
|
||||
L 5 (#7ac0e0)
|
||||
U 2 (#5a6cd3)
|
||||
L 2 (#3ca790)
|
||||
U 7 (#755403)
|
||||
L 4 (#3b0740)
|
||||
U 5 (#2004a3)
|
||||
L 3 (#2db4f0)
|
||||
U 6 (#602a23)
|
||||
R 5 (#32c1c0)
|
||||
D 2 (#000f53)
|
||||
R 5 (#388360)
|
||||
D 7 (#24d9e3)
|
||||
R 4 (#4703a0)
|
||||
D 3 (#2f1133)
|
||||
R 3 (#4703a2)
|
||||
U 11 (#52e853)
|
||||
R 5 (#278132)
|
||||
D 11 (#0665e3)
|
||||
R 3 (#239112)
|
||||
U 6 (#8f0ad1)
|
||||
R 5 (#447de2)
|
||||
U 6 (#8f0ad3)
|
||||
R 6 (#636122)
|
||||
U 2 (#187283)
|
||||
R 3 (#5aae62)
|
||||
U 10 (#1d8833)
|
||||
L 5 (#476db0)
|
||||
U 5 (#136393)
|
||||
L 7 (#29e6b0)
|
||||
U 5 (#136391)
|
||||
R 7 (#3ba060)
|
||||
U 3 (#635e23)
|
||||
L 5 (#2042f0)
|
||||
U 3 (#181643)
|
||||
L 6 (#5af952)
|
||||
U 8 (#28d0b1)
|
||||
L 2 (#4a98f2)
|
||||
U 9 (#28d0b3)
|
||||
L 6 (#27a572)
|
||||
D 3 (#3d7213)
|
||||
L 4 (#516842)
|
||||
D 11 (#21ef63)
|
||||
L 5 (#38e342)
|
||||
D 2 (#1118b3)
|
||||
L 3 (#560502)
|
||||
D 9 (#1118b1)
|
||||
R 2 (#1c39a2)
|
||||
D 2 (#303ab3)
|
||||
R 6 (#716ba0)
|
||||
D 6 (#780a93)
|
||||
L 8 (#77ec30)
|
||||
U 2 (#780a91)
|
||||
L 3 (#271100)
|
||||
U 10 (#5882f3)
|
||||
L 4 (#2050c2)
|
||||
D 3 (#434843)
|
||||
L 3 (#7d9572)
|
||||
D 2 (#3129b3)
|
||||
L 5 (#21fb12)
|
||||
D 5 (#8c2c33)
|
||||
L 4 (#57bf92)
|
||||
D 6 (#2730b3)
|
||||
L 4 (#6a3902)
|
||||
D 8 (#4656a3)
|
||||
L 5 (#60ac80)
|
||||
D 4 (#43b863)
|
||||
R 9 (#3d69a0)
|
||||
D 8 (#3ca913)
|
||||
L 2 (#411d80)
|
||||
D 3 (#725383)
|
||||
L 8 (#4a98d0)
|
||||
D 9 (#274553)
|
||||
L 5 (#580d60)
|
||||
U 5 (#568223)
|
||||
L 6 (#473af0)
|
||||
U 5 (#827593)
|
||||
L 7 (#251dc2)
|
||||
U 5 (#0fcea3)
|
||||
L 8 (#5ae3d2)
|
||||
U 3 (#4efa11)
|
||||
R 9 (#389852)
|
||||
U 2 (#7f7f91)
|
||||
R 6 (#618342)
|
||||
U 3 (#441143)
|
||||
L 7 (#886df2)
|
||||
U 3 (#26a093)
|
||||
L 8 (#886df0)
|
||||
U 4 (#63c7d3)
|
||||
L 3 (#04f842)
|
||||
D 10 (#0fcea1)
|
||||
L 6 (#388e62)
|
||||
U 10 (#3ae7f3)
|
||||
L 3 (#2a6880)
|
||||
U 6 (#3bfd53)
|
||||
L 6 (#73a0c0)
|
||||
U 5 (#3bfd51)
|
||||
L 4 (#0d18a0)
|
||||
U 2 (#19da93)
|
||||
L 6 (#120600)
|
||||
U 8 (#233b53)
|
||||
L 6 (#2e1050)
|
||||
U 3 (#4b2aa3)
|
||||
L 4 (#5f9930)
|
||||
U 10 (#6e65f1)
|
||||
R 6 (#1eefa0)
|
||||
U 9 (#50b9d3)
|
||||
R 2 (#548ed0)
|
||||
U 9 (#50b9d1)
|
||||
R 7 (#8bd9f0)
|
||||
U 4 (#5ae473)
|
||||
R 6 (#0b0490)
|
||||
U 10 (#186891)
|
||||
R 4 (#764830)
|
||||
U 7 (#33b0e1)
|
||||
R 5 (#363c90)
|
||||
U 8 (#7bd631)
|
||||
R 7 (#031e30)
|
||||
U 7 (#095881)
|
||||
R 3 (#640e50)
|
||||
D 5 (#02e7f3)
|
||||
R 7 (#0922f0)
|
||||
D 7 (#6b7af3)
|
||||
R 9 (#0922f2)
|
||||
D 3 (#62e543)
|
||||
R 3 (#21e320)
|
||||
U 9 (#5ead81)
|
||||
R 7 (#01fd70)
|
||||
D 9 (#3b0cf1)
|
||||
R 2 (#2758a0)
|
||||
D 5 (#7279b1)
|
||||
R 8 (#5c7dc0)
|
||||
D 7 (#3c8db1)
|
||||
R 4 (#3c3740)
|
||||
U 2 (#26b151)
|
||||
R 6 (#11eb12)
|
||||
U 4 (#587921)
|
||||
R 6 (#11eb10)
|
||||
U 4 (#320051)
|
||||
R 4 (#038630)
|
||||
U 3 (#6a2e61)
|
||||
R 2 (#4ff680)
|
||||
U 5 (#3c57f1)
|
||||
R 9 (#0b2440)
|
||||
U 8 (#497533)
|
||||
L 6 (#704680)
|
||||
U 11 (#549113)
|
||||
R 6 (#23b470)
|
||||
U 4 (#9e0641)
|
||||
R 7 (#1aeec0)
|
||||
D 7 (#4a6331)
|
||||
R 2 (#547d80)
|
||||
D 5 (#457a71)
|
||||
R 9 (#7daa90)
|
||||
D 4 (#16d7b1)
|
||||
L 6 (#266810)
|
||||
D 3 (#363561)
|
||||
L 5 (#5312b2)
|
||||
D 4 (#42c301)
|
||||
R 5 (#9a0952)
|
||||
D 7 (#42c303)
|
||||
R 7 (#7d1df2)
|
||||
D 4 (#51e321)
|
||||
R 5 (#609422)
|
||||
D 4 (#3b8f01)
|
||||
R 6 (#644792)
|
||||
U 4 (#2d8b11)
|
||||
R 7 (#22bbc2)
|
||||
D 7 (#6b39b1)
|
||||
R 5 (#680e72)
|
||||
U 2 (#7f9f31)
|
||||
R 3 (#0e9b52)
|
||||
U 3 (#3086c1)
|
||||
R 3 (#5a60c0)
|
||||
U 6 (#53b6e3)
|
||||
R 7 (#8117d0)
|
||||
U 7 (#53b6e1)
|
||||
R 3 (#2cb930)
|
||||
U 3 (#1bffd1)
|
||||
R 6 (#4539f0)
|
||||
U 8 (#680411)
|
||||
R 4 (#6032c0)
|
||||
U 6 (#255061)
|
||||
R 3 (#5562a0)
|
||||
U 6 (#088071)
|
||||
R 3 (#3bf2f0)
|
||||
U 5 (#52bdb1)
|
||||
L 6 (#070500)
|
||||
U 5 (#69e001)
|
||||
R 6 (#070502)
|
||||
U 3 (#071051)
|
||||
R 2 (#036000)
|
||||
U 4 (#0ea8a1)
|
||||
R 5 (#05e4d0)
|
||||
U 3 (#674de1)
|
||||
R 3 (#804250)
|
||||
D 6 (#3ffca1)
|
||||
R 4 (#23dcb2)
|
||||
D 6 (#9f9841)
|
||||
L 5 (#45f210)
|
||||
D 9 (#15efc1)
|
||||
R 5 (#45f212)
|
||||
D 4 (#969551)
|
||||
L 9 (#23dcb0)
|
||||
D 2 (#41bea1)
|
||||
L 4 (#2f2a32)
|
||||
D 4 (#71ffd1)
|
||||
R 3 (#5c0bb2)
|
||||
D 7 (#6f3501)
|
||||
R 4 (#2b0a72)
|
||||
D 4 (#7b3571)
|
||||
R 3 (#1c67d2)
|
||||
U 11 (#42f011)
|
||||
R 3 (#51ae62)
|
||||
D 3 (#75fcf1)
|
||||
R 3 (#1f4742)
|
||||
D 4 (#2813f1)
|
||||
R 4 (#3d1812)
|
||||
D 2 (#2b1d01)
|
||||
R 11 (#1eb302)
|
||||
U 3 (#27b0a1)
|
||||
R 4 (#227b20)
|
||||
U 5 (#34b7e1)
|
||||
R 10 (#201220)
|
||||
U 7 (#0502f3)
|
||||
R 4 (#5ab7f0)
|
||||
U 4 (#0502f1)
|
||||
R 4 (#5d09b0)
|
||||
U 7 (#504a81)
|
||||
R 7 (#1e8250)
|
||||
U 3 (#715aa1)
|
||||
R 6 (#26d290)
|
||||
U 6 (#9a12f1)
|
||||
L 3 (#18be90)
|
||||
U 8 (#037d11)
|
||||
L 5 (#647600)
|
||||
U 3 (#40b983)
|
||||
L 5 (#04e450)
|
||||
U 3 (#9a9a43)
|
||||
L 8 (#04e452)
|
||||
U 6 (#8af153)
|
||||
R 8 (#6cbc90)
|
||||
U 4 (#04d121)
|
||||
L 4 (#285292)
|
||||
U 3 (#688d51)
|
||||
L 6 (#176332)
|
||||
U 4 (#400a91)
|
||||
L 5 (#176330)
|
||||
U 5 (#43def1)
|
||||
R 2 (#285290)
|
||||
U 2 (#3e0711)
|
||||
R 3 (#7eb9c0)
|
||||
U 7 (#36f611)
|
||||
R 7 (#666af0)
|
||||
D 7 (#381b31)
|
||||
R 3 (#298922)
|
||||
U 3 (#475671)
|
||||
R 6 (#977c12)
|
||||
D 4 (#602d01)
|
||||
R 6 (#25b0c2)
|
||||
D 6 (#7ede81)
|
||||
R 3 (#1d58c2)
|
||||
D 8 (#873523)
|
||||
L 9 (#265ae2)
|
||||
D 3 (#57d663)
|
||||
R 7 (#1565c2)
|
||||
D 8 (#06ed11)
|
||||
R 4 (#a348c2)
|
||||
D 2 (#06ed13)
|
||||
R 8 (#12d052)
|
||||
D 4 (#2d3741)
|
||||
L 7 (#0ccfd2)
|
||||
D 3 (#1fcd61)
|
||||
R 4 (#39a4c2)
|
||||
D 3 (#44f7f1)
|
||||
R 6 (#5c3202)
|
||||
D 8 (#2625c1)
|
||||
L 8 (#2b08c2)
|
||||
D 2 (#20d7e1)
|
||||
L 2 (#67b892)
|
||||
D 10 (#546471)
|
||||
R 7 (#484ef2)
|
||||
D 7 (#49bc91)
|
||||
R 4 (#91aa72)
|
||||
U 11 (#499591)
|
||||
R 3 (#0048b2)
|
||||
U 7 (#34a7a1)
|
||||
R 7 (#514600)
|
||||
U 8 (#1cdc43)
|
||||
L 7 (#471470)
|
||||
U 3 (#8c8393)
|
||||
R 3 (#18a780)
|
||||
U 5 (#8c8391)
|
||||
R 3 (#4e6f80)
|
||||
U 3 (#1cdc41)
|
||||
R 8 (#428930)
|
||||
U 5 (#5dcb51)
|
||||
R 3 (#4b21e2)
|
||||
U 4 (#0464b1)
|
||||
R 9 (#850552)
|
||||
D 8 (#464881)
|
||||
R 7 (#543852)
|
||||
D 3 (#2d3a11)
|
||||
R 3 (#081b22)
|
||||
D 5 (#0cc731)
|
||||
R 7 (#6990e0)
|
||||
D 3 (#79d7b1)
|
||||
R 3 (#509520)
|
||||
D 5 (#438571)
|
||||
R 3 (#27d510)
|
||||
D 3 (#30d2d3)
|
||||
L 8 (#1b7a00)
|
||||
D 5 (#8a0da3)
|
||||
L 8 (#1b7a02)
|
||||
U 5 (#027cb3)
|
||||
L 7 (#350130)
|
||||
D 8 (#2ff771)
|
||||
R 7 (#16dc02)
|
||||
D 2 (#68f1c1)
|
||||
R 5 (#02f782)
|
||||
D 6 (#4e2a41)
|
||||
R 11 (#448e32)
|
||||
D 5 (#2cfac1)
|
||||
L 11 (#417502)
|
||||
D 5 (#2cfac3)
|
||||
L 4 (#22f022)
|
||||
U 9 (#1e9f01)
|
||||
L 5 (#543572)
|
||||
U 3 (#076e31)
|
||||
L 6 (#081b20)
|
||||
U 5 (#1ae851)
|
||||
L 3 (#823132)
|
||||
U 9 (#2d7993)
|
||||
L 4 (#5738f2)
|
||||
D 8 (#79e273)
|
||||
L 4 (#5c9ad2)
|
||||
D 8 (#4ed1b3)
|
||||
L 3 (#311722)
|
||||
D 4 (#0d5493)
|
||||
L 6 (#5d63e0)
|
||||
D 6 (#178cf3)
|
||||
L 5 (#75b1b0)
|
||||
D 5 (#178cf1)
|
||||
L 6 (#11d550)
|
||||
D 6 (#44ed03)
|
||||
L 3 (#76a842)
|
||||
U 6 (#3b6993)
|
||||
L 5 (#184892)
|
||||
D 4 (#5c8163)
|
||||
L 3 (#14d872)
|
||||
U 2 (#261a01)
|
||||
L 5 (#2d01e2)
|
||||
U 9 (#326ca3)
|
||||
L 4 (#59ad32)
|
||||
U 8 (#326ca1)
|
||||
R 4 (#389ab2)
|
||||
U 9 (#261a03)
|
||||
L 4 (#50cb42)
|
||||
D 4 (#2f8263)
|
||||
L 5 (#9f3752)
|
||||
D 6 (#4bb383)
|
||||
L 4 (#2693f2)
|
||||
D 4 (#19dca3)
|
||||
R 4 (#475bc2)
|
||||
D 6 (#960e13)
|
||||
L 7 (#0c90a2)
|
||||
D 8 (#3463d3)
|
||||
L 6 (#5a82e2)
|
||||
D 3 (#5a5c43)
|
||||
R 7 (#120bf2)
|
||||
D 3 (#5069e3)
|
||||
R 3 (#4b47a2)
|
||||
D 6 (#635b63)
|
||||
R 4 (#66ca10)
|
||||
U 4 (#1418f1)
|
||||
R 7 (#1d5470)
|
||||
D 4 (#1418f3)
|
||||
R 8 (#66d4f0)
|
||||
D 5 (#3c5533)
|
||||
R 4 (#2f6e02)
|
||||
D 3 (#2cf5e3)
|
||||
R 4 (#633ec2)
|
||||
D 7 (#2cf5e1)
|
||||
R 7 (#5846b2)
|
||||
D 3 (#4f9d63)
|
||||
R 4 (#533380)
|
||||
D 11 (#13c7e3)
|
||||
R 2 (#222b62)
|
||||
D 3 (#928ab3)
|
||||
R 5 (#222b60)
|
||||
U 5 (#0a4793)
|
||||
R 5 (#15d3b0)
|
||||
U 8 (#363fe1)
|
||||
R 4 (#2feb30)
|
||||
U 5 (#05d8b1)
|
||||
R 3 (#39e030)
|
||||
U 3 (#05d8b3)
|
||||
R 2 (#3cd780)
|
||||
U 8 (#02c781)
|
||||
R 5 (#186452)
|
||||
D 3 (#37bba1)
|
||||
R 5 (#9e1232)
|
||||
D 5 (#58e6f1)
|
||||
R 5 (#182c30)
|
||||
D 5 (#072db1)
|
||||
R 5 (#85e600)
|
||||
D 4 (#607651)
|
||||
R 5 (#186450)
|
||||
D 3 (#0aca91)
|
||||
L 5 (#0ceb10)
|
||||
D 5 (#860001)
|
||||
L 6 (#54c8b0)
|
||||
U 5 (#393971)
|
||||
L 4 (#37c390)
|
||||
D 3 (#1f1433)
|
||||
L 5 (#3d8790)
|
||||
D 6 (#353623)
|
||||
R 4 (#78c830)
|
||||
D 4 (#6fafa3)
|
||||
R 6 (#2b0612)
|
||||
D 5 (#31fff3)
|
||||
R 7 (#8b49b2)
|
||||
D 9 (#6f0ee3)
|
||||
R 5 (#4212e0)
|
||||
D 6 (#5d11f3)
|
||||
R 6 (#648340)
|
||||
D 8 (#393743)
|
||||
R 6 (#34ddd0)
|
||||
U 8 (#346fb3)
|
||||
R 5 (#34fc22)
|
||||
D 4 (#71c453)
|
||||
R 6 (#5048f2)
|
||||
D 4 (#0bb993)
|
||||
R 4 (#42b9f0)
|
||||
D 9 (#5cdf83)
|
||||
R 5 (#42b9f2)
|
||||
D 3 (#6f3f93)
|
||||
R 3 (#3dbae2)
|
||||
D 8 (#495363)
|
||||
R 9 (#328ba2)
|
||||
D 3 (#77afa1)
|
||||
R 5 (#575710)
|
||||
D 2 (#10d861)
|
||||
R 4 (#257822)
|
||||
D 4 (#6efe61)
|
||||
R 9 (#257820)
|
||||
D 5 (#521d01)
|
||||
R 5 (#575712)
|
||||
D 6 (#494cf1)
|
||||
L 5 (#683ab2)
|
||||
D 4 (#5e79c3)
|
||||
L 3 (#4242a2)
|
||||
D 4 (#5e79c1)
|
||||
L 7 (#2c3442)
|
||||
D 8 (#2fbd23)
|
||||
L 5 (#636fb2)
|
||||
D 5 (#63bd53)
|
||||
L 2 (#299960)
|
||||
D 6 (#31ea33)
|
||||
R 3 (#51dfb0)
|
||||
D 7 (#4e4ec3)
|
||||
R 4 (#7b7912)
|
||||
D 5 (#4b4bf3)
|
||||
R 4 (#54e882)
|
||||
D 5 (#7d2193)
|
||||
R 3 (#3b77d2)
|
||||
D 3 (#826973)
|
||||
R 8 (#646ec2)
|
||||
D 4 (#076c63)
|
||||
L 10 (#674052)
|
||||
D 6 (#3676b1)
|
||||
L 9 (#3bd890)
|
||||
D 4 (#7feb71)
|
||||
L 3 (#3bd892)
|
||||
D 3 (#27fc21)
|
||||
R 8 (#66bba2)
|
||||
D 8 (#645c73)
|
||||
R 5 (#43e132)
|
||||
D 5 (#51d9e3)
|
||||
R 8 (#43e130)
|
||||
D 6 (#2827f3)
|
||||
R 4 (#412c92)
|
||||
D 5 (#7e7f63)
|
||||
L 4 (#218122)
|
||||
D 4 (#546e83)
|
||||
L 9 (#82f672)
|
||||
D 8 (#6ed383)
|
||||
L 3 (#701412)
|
||||
D 7 (#47de23)
|
||||
L 5 (#46f912)
|
||||
D 7 (#0d9ec3)
|
||||
L 4 (#515142)
|
||||
D 3 (#4699e3)
|
||||
L 9 (#2ed562)
|
||||
U 6 (#00a273)
|
||||
L 9 (#8d7d12)
|
||||
U 2 (#6c3a83)
|
||||
L 7 (#318fa2)
|
||||
U 7 (#0bd473)
|
||||
L 2 (#6d5050)
|
||||
U 10 (#415673)
|
||||
R 3 (#9e8420)
|
||||
U 6 (#1ff213)
|
||||
R 5 (#0c8bf0)
|
||||
U 2 (#479a11)
|
||||
R 6 (#977360)
|
||||
U 5 (#479a13)
|
||||
L 8 (#250680)
|
||||
U 2 (#1ff211)
|
||||
L 3 (#216630)
|
||||
U 3 (#22d143)
|
||||
L 3 (#3b4342)
|
||||
U 7 (#9d4ff3)
|
||||
L 5 (#43aca2)
|
||||
U 6 (#29efd3)
|
||||
L 3 (#5c6a12)
|
||||
D 11 (#134a73)
|
||||
L 6 (#2a0982)
|
||||
U 11 (#444723)
|
||||
L 4 (#47e2e2)
|
||||
U 4 (#6855c3)
|
||||
L 4 (#06a382)
|
||||
U 4 (#2222e3)
|
||||
R 3 (#4edc62)
|
||||
U 6 (#9a2683)
|
||||
R 6 (#131872)
|
||||
U 10 (#4f5a23)
|
||||
R 4 (#858f70)
|
||||
U 5 (#4d4823)
|
||||
L 9 (#3f73f0)
|
||||
U 3 (#46f5a3)
|
||||
L 4 (#935370)
|
||||
U 4 (#46f5a1)
|
||||
L 5 (#3ca140)
|
||||
U 6 (#07b1e3)
|
||||
L 5 (#61ecd0)
|
||||
U 5 (#654743)
|
||||
L 5 (#3cec42)
|
||||
U 6 (#30bb83)
|
||||
R 3 (#920782)
|
||||
U 6 (#1f9323)
|
||||
R 8 (#3d8aa2)
|
||||
U 8 (#7492c3)
|
||||
R 3 (#301cd2)
|
||||
U 3 (#32e2f1)
|
||||
R 4 (#6936f2)
|
||||
U 6 (#32e2f3)
|
||||
R 6 (#5112c2)
|
||||
U 7 (#535b53)
|
||||
L 10 (#61f4d0)
|
||||
U 3 (#915863)
|
||||
L 2 (#51d540)
|
||||
U 5 (#32dee1)
|
||||
L 10 (#4ec320)
|
||||
U 5 (#406bc1)
|
||||
L 2 (#1b3890)
|
||||
U 3 (#681181)
|
||||
L 6 (#35ed60)
|
||||
D 9 (#153fd3)
|
||||
L 5 (#323e30)
|
||||
U 5 (#381ad3)
|
||||
L 3 (#69a550)
|
||||
U 3 (#310f63)
|
||||
L 4 (#2cbb80)
|
||||
U 5 (#3448a3)
|
||||
R 6 (#206282)
|
||||
U 5 (#202ab1)
|
||||
L 6 (#83af82)
|
||||
U 4 (#202ab3)
|
||||
L 4 (#248d02)
|
||||
D 9 (#28a983)
|
||||
L 4 (#32cf10)
|
||||
D 7 (#249d73)
|
||||
R 4 (#2f5c70)
|
||||
D 6 (#021c93)
|
||||
L 7 (#957782)
|
||||
D 6 (#550e53)
|
||||
R 5 (#957780)
|
||||
D 6 (#50bb13)
|
||||
R 9 (#49b7f2)
|
||||
U 6 (#096e93)
|
||||
R 4 (#769452)
|
||||
D 3 (#6dc543)
|
||||
R 5 (#2ad352)
|
||||
D 7 (#167963)
|
||||
L 10 (#673682)
|
||||
D 5 (#152883)
|
||||
L 10 (#13f332)
|
||||
D 3 (#996721)
|
||||
L 4 (#4be2a2)
|
||||
D 4 (#9c2443)
|
||||
L 4 (#2b83b0)
|
||||
D 3 (#5d63b3)
|
||||
L 9 (#9cfd40)
|
||||
D 7 (#49e793)
|
||||
L 7 (#0b5422)
|
||||
D 8 (#5c51b3)
|
||||
L 2 (#6db152)
|
||||
D 4 (#215b53)
|
||||
L 3 (#38dc12)
|
||||
D 8 (#7dad01)
|
||||
L 6 (#559e22)
|
||||
D 3 (#929d23)
|
||||
L 2 (#0f7560)
|
||||
D 6 (#448d13)
|
||||
L 7 (#73a972)
|
||||
D 2 (#2221c3)
|
||||
L 3 (#73a970)
|
||||
D 5 (#53b553)
|
||||
R 10 (#513590)
|
||||
D 3 (#293c83)
|
||||
L 10 (#58e2e0)
|
||||
D 4 (#54dd21)
|
||||
L 5 (#1bcdf2)
|
||||
D 5 (#4b0b71)
|
||||
L 5 (#1bcdf0)
|
||||
U 6 (#43b811)
|
||||
L 5 (#4df1d0)
|
||||
U 6 (#36d6a3)
|
||||
R 5 (#3bfb20)
|
||||
U 5 (#75de61)
|
||||
L 5 (#1e0ec2)
|
||||
U 4 (#30b571)
|
||||
L 7 (#2dfd20)
|
||||
D 5 (#49ad61)
|
||||
L 2 (#2dfd22)
|
||||
D 11 (#715d41)
|
||||
L 3 (#1e0ec0)
|
||||
U 4 (#0f2091)
|
||||
L 4 (#9d29c0)
|
||||
U 9 (#475a73)
|
||||
L 2 (#108610)
|
||||
U 3 (#1e5423)
|
||||
L 8 (#394192)
|
||||
U 3 (#0274b3)
|
||||
@@ -0,0 +1,89 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
"golang.org/x/exp/maps"
|
||||
)
|
||||
|
||||
// var log = aoc.Log
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 int
|
||||
}
|
||||
|
||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
|
||||
var vecsPT1 []aoc.Vector
|
||||
var vecsPT2 []aoc.Vector
|
||||
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
|
||||
if len(text) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
v, color := fromLine(text)
|
||||
|
||||
vecsPT1 = append(vecsPT1, v)
|
||||
vecsPT2 = append(vecsPT2, fromColor(color))
|
||||
}
|
||||
return &result{
|
||||
valuePT1: findArea(vecsPT1),
|
||||
valuePT2: findArea(vecsPT2),
|
||||
}, nil
|
||||
}
|
||||
|
||||
var OFFSET = map[string]aoc.Point[int]{
|
||||
"R": {0, 1},
|
||||
"D": {1, 0},
|
||||
"L": {0, -1},
|
||||
"U": {-1, 0},
|
||||
}
|
||||
var OFFSET_INDEXES = maps.Values(OFFSET)
|
||||
|
||||
func fromLine(text string) (aoc.Vector, string) {
|
||||
v := aoc.Vector{}
|
||||
s, text, _ := strings.Cut(text, " ")
|
||||
v.Offset = OFFSET[s]
|
||||
|
||||
s, text, _ = strings.Cut(text, " ")
|
||||
v.Scale = aoc.Atoi(s)
|
||||
|
||||
_, text, _ = strings.Cut(text, "(#")
|
||||
s, _, _ = strings.Cut(text, ")")
|
||||
return v, s
|
||||
}
|
||||
|
||||
func fromColor(c string) aoc.Vector {
|
||||
scale, _ := strconv.ParseInt(c[:5], 16, 64)
|
||||
offset := OFFSET_INDEXES[c[5]-'0']
|
||||
|
||||
return aoc.Vector{
|
||||
Offset: offset,
|
||||
Scale: int(scale),
|
||||
}
|
||||
}
|
||||
|
||||
func findArea(vecs []aoc.Vector) int {
|
||||
shoelace := []aoc.Point[int]{{0, 0}}
|
||||
borderLength := 0
|
||||
|
||||
for _, vec := range vecs {
|
||||
shoelace = append(shoelace, shoelace[len(shoelace)-1].Add(vec.Point()))
|
||||
borderLength += vec.Scale
|
||||
}
|
||||
|
||||
return aoc.NumPoints(shoelace, borderLength)
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 62)
|
||||
is.Equal(result.valuePT2, 952408144115)
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.True(result.valuePT1 < 68834) // first attempt too high.
|
||||
is.Equal(result.valuePT1, 46334)
|
||||
is.Equal(result.valuePT2, 102000662718092)
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
px{a<2006:qkq,m>2090:A,rfg}
|
||||
pv{a>1716:R,A}
|
||||
lnx{m>1548:A,A}
|
||||
rfg{s<537:gd,x>2440:R,A}
|
||||
qs{s>3448:A,lnx}
|
||||
qkq{x<1416:A,crn}
|
||||
crn{x>2662:A,R}
|
||||
in{s<1351:px,qqz}
|
||||
qqz{s>2770:qs,m<1801:hdj,R}
|
||||
gd{a>3333:R,R}
|
||||
hdj{m>838:A,pv}
|
||||
|
||||
{x=787,m=2655,a=1222,s=2876}
|
||||
{x=1679,m=44,a=2067,s=496}
|
||||
{x=2036,m=264,a=79,s=2244}
|
||||
{x=2461,m=1339,a=466,s=291}
|
||||
{x=2127,m=1623,a=2188,s=1013}
|
||||
@@ -0,0 +1,780 @@
|
||||
ztj{s<2703:A,m<1025:vk,ztl}
|
||||
nqt{a>3513:R,s>2424:R,m>929:R,A}
|
||||
mr{s>2281:R,A}
|
||||
gf{x>2746:R,a<3379:jcl,R}
|
||||
gkv{x>2579:qlx,s>322:rxv,R}
|
||||
gdl{x<2917:A,s>82:A,s<54:R,R}
|
||||
hzc{m<1277:R,m>1355:A,x>953:A,R}
|
||||
xs{x>2337:ft,m>1444:A,R}
|
||||
hs{m<235:A,a<2424:A,x<3026:pvh,hqk}
|
||||
cls{a<1361:zch,s<3630:tnh,a<2359:px,spb}
|
||||
gq{m<1157:A,R}
|
||||
hc{m<2726:A,s>1302:A,R}
|
||||
lt{x>3157:A,a<3669:R,R}
|
||||
sf{x<3199:R,s>2680:jrl,x>3718:jh,R}
|
||||
hr{m>1737:A,A}
|
||||
bgg{x<171:A,x<283:R,R}
|
||||
pgb{m<1624:ksc,x>2675:bzc,bzn}
|
||||
zm{m<2599:sjc,m>3497:A,m<2946:A,A}
|
||||
gbb{x>860:bxv,a<2306:br,msc}
|
||||
gsl{x>53:A,A}
|
||||
zs{x<1669:kp,x<2690:ns,s>2951:cls,tvv}
|
||||
qhq{x<1264:A,m<1728:A,R}
|
||||
gg{s<239:A,s>340:R,x>3642:A,R}
|
||||
ktx{m>2620:R,m>2073:R,a<3539:R,R}
|
||||
xg{x<3497:fp,sgc}
|
||||
pms{m<3366:R,x>3570:A,R}
|
||||
gsb{x>2077:A,A}
|
||||
xf{s>3779:A,R}
|
||||
tfs{s>3844:rb,s<3703:scg,bk}
|
||||
bgb{a>2837:R,a>2812:A,A}
|
||||
nvk{s<2358:mr,x>2818:nqt,x<2757:lf,R}
|
||||
fg{a>1961:A,x<68:R,R}
|
||||
cfz{x>1567:A,m>951:A,a<2959:R,A}
|
||||
ljt{m>950:A,m<557:R,m<745:A,R}
|
||||
zcq{m>1403:th,fd}
|
||||
tbv{a>1532:R,R}
|
||||
dq{m>960:R,csz}
|
||||
tvv{a<2619:zh,m>1623:kb,vh}
|
||||
dzz{s>3136:R,s<2702:A,a>2889:R,R}
|
||||
lg{a<66:A,s>784:A,s>263:A,A}
|
||||
zfk{s<463:R,x>3180:A,R}
|
||||
bdh{s>356:A,s>193:A,m>482:R,R}
|
||||
tc{m>3454:R,x>3211:A,A}
|
||||
tz{x>3191:R,a<1319:R,R}
|
||||
cpn{m<2478:A,a<2228:A,a>3262:A,A}
|
||||
qmt{x<2144:R,flt}
|
||||
nsp{m<379:R,R}
|
||||
sxt{s<1011:A,a>1135:A,rl}
|
||||
bjg{m>973:lz,x>243:hh,a>1789:xl,xmg}
|
||||
cj{x>2137:nst,m<3002:A,s>3193:jc,pfr}
|
||||
lmc{a>2967:A,A}
|
||||
tv{m>1493:A,m<769:A,R}
|
||||
khc{m>2346:mbr,s>596:kvr,a<274:fzh,tb}
|
||||
zbk{s>1140:qrt,x>1818:pv,a>540:gt,gxc}
|
||||
kk{s>3728:R,s>3683:R,m<562:A,A}
|
||||
jv{m<848:zpq,a>1225:fsv,ztj}
|
||||
shb{a<242:A,m>2625:R,R}
|
||||
fhg{m>1372:R,A}
|
||||
dg{x>1246:qd,s<3289:lbf,a<1032:zzp,ks}
|
||||
cfq{s>2689:A,s>2613:R,A}
|
||||
gl{m>2798:cqm,s>3029:cnl,m>2233:A,qc}
|
||||
tkv{m<1884:A,A}
|
||||
fdm{m<1549:tgt,x<2498:kdf,s>528:jz,lt}
|
||||
vx{x<2948:xc,mgp}
|
||||
bs{m<687:A,R}
|
||||
kp{x>609:dkr,tqc}
|
||||
xpj{x<934:A,a>1772:A,A}
|
||||
rhd{x>956:A,a<2471:A,a<3414:A,A}
|
||||
srg{m>1381:A,s<264:A,A}
|
||||
szv{s>453:mff,nzj}
|
||||
ldl{a>3906:A,A}
|
||||
rxv{m<1632:R,m>1700:R,R}
|
||||
ch{s<3588:A,a<639:A,R}
|
||||
sc{s>2789:A,a<1419:R,R}
|
||||
gk{m>415:R,x>508:A,a<3053:R,R}
|
||||
rs{s<1893:R,m>2997:R,x<2049:R,R}
|
||||
ncn{s<722:R,m>3562:A,s>773:jm,vr}
|
||||
kz{x>3160:A,A}
|
||||
xxt{s>1035:R,a<942:R,R}
|
||||
pfr{m<3520:A,A}
|
||||
nh{a<638:mv,s>865:vm,nrf}
|
||||
sg{s>3051:vps,m>2918:A,zhs}
|
||||
xnj{x>3494:A,m>584:A,a<1897:A,R}
|
||||
jg{s<2380:R,a<2211:A,A}
|
||||
cqm{s<3107:R,a>3295:R,m>3224:R,A}
|
||||
hgv{m<203:A,s>107:R,A}
|
||||
vqt{x<2609:xkn,bnt}
|
||||
ft{s>3154:A,m>1087:R,A}
|
||||
qv{a>621:A,a>259:xp,m<2439:fbv,kpq}
|
||||
lzv{x<2186:gpt,lsb}
|
||||
lx{x>3655:A,s>2359:A,s>2271:R,R}
|
||||
xfj{s<407:sxx,R}
|
||||
tnh{x<3164:vx,js}
|
||||
mbr{s<671:A,R}
|
||||
tbn{m<2151:A,x<3001:R,R}
|
||||
zhp{m<3768:fgp,x>3307:rv,kj}
|
||||
qd{s<3201:A,s>3491:hgt,x>1468:A,R}
|
||||
qdk{s<1950:R,R}
|
||||
vn{s>2814:A,m>386:A,A}
|
||||
lv{x>3090:A,s>2406:znh,R}
|
||||
km{m>2029:A,m>1871:A,s<2456:A,R}
|
||||
ppc{m>2718:R,x<2889:A,x>3361:A,R}
|
||||
bk{a<3189:A,m>846:R,R}
|
||||
ht{s>2582:jts,x<3333:hx,rgx}
|
||||
bb{x<3122:A,x>3258:R,m>3625:A,A}
|
||||
fd{m>650:R,x<450:A,a<2254:gb,gk}
|
||||
dcf{s>1084:tzp,gbb}
|
||||
pm{x>3659:A,m<3539:R,A}
|
||||
hj{a>3260:hrn,A}
|
||||
ds{m>767:A,m>718:A,R}
|
||||
ccv{a<2781:R,a<2905:hd,s<1781:A,qdk}
|
||||
vh{s<2473:lpg,m>643:cmn,s>2647:vkk,ht}
|
||||
zld{x<3737:A,xst}
|
||||
djf{x<748:R,R}
|
||||
jfx{m>1768:gz,m>802:jfs,m<437:cl,snl}
|
||||
vft{x<2121:dn,m<2486:kf,x<2180:qmt,vsj}
|
||||
bc{m<369:hs,a<2050:dfd,m>584:mx,vqt}
|
||||
dn{a<799:vbr,m<1868:A,s<1387:skb,rs}
|
||||
kxl{a<1795:A,s>3664:A,s<3514:R,R}
|
||||
bh{x>3971:A,R}
|
||||
pv{x>1877:R,s<517:R,m>2313:R,A}
|
||||
vzj{s<1879:cth,vc}
|
||||
fc{a<2156:ths,zbc}
|
||||
cs{a>2745:A,x>2067:A,s>2357:R,A}
|
||||
nsj{a>2800:A,m<2010:R,R}
|
||||
lsb{a>2810:R,x>2463:A,m>2877:R,bz}
|
||||
nl{x<2336:A,x>2529:A,A}
|
||||
pk{m<2800:A,s>3027:R,x<487:A,A}
|
||||
bzn{m<1838:R,A}
|
||||
qrt{s>1765:R,s>1529:A,s>1302:zdc,kzp}
|
||||
srn{m<3131:zbr,a>3269:phc,x<2610:R,xd}
|
||||
lz{m<1282:pzk,s>1085:gld,A}
|
||||
spb{x<3144:krj,sx}
|
||||
mqz{m>467:sm,m<282:R,s<969:hhs,jfp}
|
||||
mff{s<632:A,x>625:R,dzt}
|
||||
hgt{m<2577:A,s<3667:A,s>3805:R,R}
|
||||
xpv{a<3077:R,R}
|
||||
rf{m>3497:gv,a>334:vhk,A}
|
||||
rsc{s>1811:A,jk}
|
||||
vkl{a>1095:A,a<912:R,R}
|
||||
mpn{a>3161:pdk,x>3461:zld,ff}
|
||||
pzk{s>1180:R,m>1114:R,x>299:A,R}
|
||||
vf{x<492:R,s<3334:R,R}
|
||||
kjv{m<719:bc,vhc}
|
||||
ks{m>2088:kxl,a>1906:ll,gq}
|
||||
vm{m>1632:vb,qcr}
|
||||
ph{a<2292:qzf,A}
|
||||
xn{x<2461:qln,R}
|
||||
px{a<1762:xg,x>3186:jfx,fc}
|
||||
fzz{x<3174:mq,a>1103:nn,m<533:bgn,mdq}
|
||||
xl{x>116:lmr,m<712:nvq,a>2807:jmf,R}
|
||||
br{s>958:xxt,x<537:bnn,a<1228:R,ssr}
|
||||
mcl{x>3441:R,s<2530:R,R}
|
||||
gn{a<3598:R,a>3777:A,x>861:A,R}
|
||||
scg{a>3029:A,s>3661:A,R}
|
||||
kr{m<471:R,hz}
|
||||
xfc{s>3354:R,R}
|
||||
th{a>1860:vf,a>789:pk,mt}
|
||||
nm{s<2242:A,x>3062:kz,R}
|
||||
xp{m<2732:R,a<441:R,A}
|
||||
fzh{a>101:A,x>3191:R,A}
|
||||
bn{x<3725:R,a>499:R,R}
|
||||
kmh{s>1727:A,a>1678:A,a<1550:A,A}
|
||||
dj{m<2927:R,m>3578:A,x>1056:R,A}
|
||||
jz{x>3123:A,a>3678:A,x>2902:R,R}
|
||||
qq{m<3557:A,m>3852:A,a<1950:R,A}
|
||||
nrv{m>1238:qcd,mqz}
|
||||
pmd{x>3502:R,gdl}
|
||||
ll{s>3570:A,s<3419:R,x>946:A,R}
|
||||
td{x<1875:A,a>1161:A,A}
|
||||
jt{m>1937:A,s<430:tkv,R}
|
||||
pp{s<1233:mzr,m>2932:vsl,ccv}
|
||||
ssr{s<903:R,R}
|
||||
qcd{m>1677:R,R}
|
||||
sv{x<3042:fv,s<3775:tc,m<3706:ct,dm}
|
||||
qsg{x>3287:vvt,dbq}
|
||||
cdt{x<3342:kx,a>1677:btj,nth}
|
||||
jrl{m>1242:A,m>940:R,m<793:R,R}
|
||||
dzt{s<732:A,A}
|
||||
dk{m>1342:rmq,hdt}
|
||||
rn{x<3645:A,R}
|
||||
fx{s>1211:jpn,s>785:nrv,m<1357:pd,dcg}
|
||||
nvh{a<2086:kmh,x<2940:A,m<2730:R,pms}
|
||||
cb{x<581:sd,psf}
|
||||
mq{m>678:A,x>2970:qf,a<881:A,ck}
|
||||
qfn{s>298:A,R}
|
||||
rss{s>1618:rsl,frj}
|
||||
sp{x<3759:R,a>512:A,m>3807:R,R}
|
||||
dns{m>270:A,x<2335:R,s>3567:R,R}
|
||||
dsr{x<2503:R,m>969:A,x>3358:R,A}
|
||||
jfs{s>3760:R,R}
|
||||
zpq{x<2139:td,s>2466:nl,A}
|
||||
vk{s<2893:A,a<803:A,s>2986:R,A}
|
||||
rbn{a>3902:zp,m>472:A,R}
|
||||
tvn{m<2544:R,A}
|
||||
lqf{a<3601:rnx,a<3691:A,fz}
|
||||
ls{m<1384:A,R}
|
||||
rnk{a>3786:R,m<2367:A,zl}
|
||||
pdk{x>3398:R,s>2636:tnq,a>3510:xt,km}
|
||||
gm{x>1475:sg,zdv}
|
||||
ps{s>2886:A,A}
|
||||
ndh{a<979:fkj,a>1636:A,s>2743:tz,nf}
|
||||
zhs{s>2501:R,a<3309:A,s>2306:A,R}
|
||||
zht{a>1418:A,A}
|
||||
fn{x>3198:A,a>3957:R,m>3278:A,A}
|
||||
xc{m>1714:xfc,a>2574:cmr,A}
|
||||
gld{m<1414:R,x<381:A,m<1444:A,R}
|
||||
pz{m>3006:R,A}
|
||||
fkp{a>3424:R,m<3526:A,A}
|
||||
fqc{a<2473:tv,m>2350:cj,a<2565:xs,vv}
|
||||
bnt{s>1011:R,x>3453:A,R}
|
||||
xzq{a<3766:lqf,a<3888:kgd,s<1399:zmt,lp}
|
||||
clh{a<1003:A,s>3818:A,ntv}
|
||||
rq{s>2799:R,m<1088:A,A}
|
||||
jfp{s<1113:A,R}
|
||||
hh{x<466:A,R}
|
||||
md{s>1194:R,R}
|
||||
hm{a>1759:gsb,R}
|
||||
vb{s>1454:A,s<1082:kxs,a>1134:A,hc}
|
||||
rsl{a<3803:gh,st}
|
||||
tjb{x>2545:A,x>1949:A,R}
|
||||
zsp{s<3356:R,A}
|
||||
bg{x>1362:A,R}
|
||||
lbf{m>1460:A,mnr}
|
||||
bt{s<856:R,s>1189:ppc,x>2845:R,R}
|
||||
ct{a<1119:A,x>3291:A,m<3487:A,A}
|
||||
drn{s>2455:R,x>3658:A,x>3401:R,A}
|
||||
xst{m>2109:R,a>2952:A,a<2839:R,R}
|
||||
pr{a>3195:xxm,R}
|
||||
rnx{s<926:A,a>3544:R,A}
|
||||
ngl{a<2849:kzb,x>1007:R,vq}
|
||||
fhq{m<1694:R,m>3210:A,a>1513:A,A}
|
||||
ttd{x>952:R,m>216:R,m>132:R,A}
|
||||
tg{a>447:R,m<3009:R,s<3685:R,A}
|
||||
cgl{x>2271:A,s>3239:R,s<2541:cs,A}
|
||||
jh{a>3871:R,s<2611:A,R}
|
||||
vlx{m>2576:A,a<3152:R,m>1231:A,R}
|
||||
fh{s>1137:R,s<937:R,djf}
|
||||
xz{x<2419:sl,x<3456:rt,m>3040:fs,crn}
|
||||
pj{a<887:sq,s<3315:A,R}
|
||||
kjt{m<990:hqc,nkr}
|
||||
tb{m>1009:A,A}
|
||||
ppm{a<1310:R,a<1850:R,a<2261:R,R}
|
||||
jm{x<1054:R,a<579:R,A}
|
||||
fsf{x<3020:R,R}
|
||||
xxm{a<3299:R,R}
|
||||
pvh{s>929:A,R}
|
||||
bfx{a<3017:A,a>3351:gn,grz}
|
||||
fp{x<2966:tbv,x<3308:R,R}
|
||||
krr{x<677:tvn,A}
|
||||
vdz{m<3388:R,x<844:A,R}
|
||||
hzf{s>385:R,s<196:A,A}
|
||||
jjf{x>3217:A,m<616:qfn,dr}
|
||||
nq{x>2432:lg,m<1705:A,R}
|
||||
cmn{a<3539:rtg,a>3754:sf,dv}
|
||||
sq{a>365:R,m>2615:A,s>3324:A,A}
|
||||
xqf{x<554:A,m>1924:A,x>1244:A,R}
|
||||
gxc{a<350:A,s>506:fhg,vl}
|
||||
qx{a<3727:A,R}
|
||||
nzq{m<1027:R,s>1843:R,A}
|
||||
rv{a<3212:R,x>3734:R,m>3888:tq,tn}
|
||||
lrn{m>1353:kq,s<3039:jv,gx}
|
||||
nf{m>2662:A,x<3529:A,m>2179:A,R}
|
||||
zlz{a<750:mc,clh}
|
||||
kf{a>756:A,R}
|
||||
gj{m<1030:A,a>1937:R,R}
|
||||
gb{s<3174:A,s<3470:A,A}
|
||||
tnq{x>3001:A,R}
|
||||
zqv{m>691:A,R}
|
||||
kj{x<2954:psp,x>3147:mg,a>3127:mjb,A}
|
||||
tgn{a>1711:lkc,s>541:qt,R}
|
||||
npt{x<772:R,x>900:R,s<1084:R,A}
|
||||
cx{x>3400:lxp,lbv}
|
||||
vvt{s>278:R,A}
|
||||
vqq{x<3192:R,A}
|
||||
tq{s>2456:R,s<2301:R,x>3451:A,A}
|
||||
xxx{m<2342:R,A}
|
||||
dkr{a<2409:dg,m<1437:lvf,x>1274:gm,qdc}
|
||||
fs{s>1657:pbv,m<3482:A,m>3677:R,R}
|
||||
tpg{m<1159:A,x>3135:R,gmf}
|
||||
qln{a<2906:A,a>2928:R,a<2918:R,A}
|
||||
lvf{x<1270:bfx,x<1455:bzz,qk}
|
||||
xlq{m<334:A,s>1515:A,A}
|
||||
sx{m<1833:tfs,hf}
|
||||
gpt{a>2836:zxd,a>2730:R,A}
|
||||
krn{x>1155:ckd,s<1260:A,m>2770:A,zht}
|
||||
sk{m>348:R,x>1377:A,m>153:A,R}
|
||||
rl{a<984:R,R}
|
||||
ntd{a<819:dns,qnm}
|
||||
grz{x>890:A,a<3172:A,A}
|
||||
kt{x>967:A,R}
|
||||
qs{m<1546:A,R}
|
||||
js{x>3672:qmv,a>2929:hdn,hcs}
|
||||
bzz{m<647:sk,bg}
|
||||
vv{s>2934:sj,R}
|
||||
lbp{s>2775:R,R}
|
||||
zxd{x>1854:A,R}
|
||||
crn{s>1724:R,rn}
|
||||
jc{x>1851:R,s<3672:A,m<3477:A,R}
|
||||
xxh{m>1324:qqn,qm}
|
||||
pn{s<976:A,m<2297:R,A}
|
||||
fv{s>3818:A,s<3658:R,s<3743:R,A}
|
||||
ck{x>2824:R,m<316:R,A}
|
||||
vdp{x<3490:A,A}
|
||||
xq{m>184:A,x>3334:A,A}
|
||||
fz{m>3339:R,m>2690:R,x>2493:R,R}
|
||||
jf{m<1773:R,x>659:R,A}
|
||||
xd{a<3143:A,R}
|
||||
svq{a<3528:A,R}
|
||||
cl{x>3473:A,R}
|
||||
qf{x>3076:A,R}
|
||||
ktb{m<3197:A,s<704:R,s>1154:A,A}
|
||||
gbj{m<158:R,m<302:R,m>336:R,R}
|
||||
ff{s<2459:lmc,s>2743:R,nsj}
|
||||
rcn{s>3821:R,x>2847:A,a<2261:R,A}
|
||||
xkn{x>2134:R,x>1785:A,A}
|
||||
pf{a>3576:A,s>3815:A,s>3737:R,R}
|
||||
ntv{s<3659:R,A}
|
||||
psf{m>575:R,a<2611:A,m>319:R,R}
|
||||
fqz{a>3321:bx,vdp}
|
||||
tzp{x<554:ph,a>2615:lm,krn}
|
||||
pht{s>625:fh,x>606:ffn,sxb}
|
||||
zz{m<1836:ql,s>1299:hp,m<3200:shb,A}
|
||||
snl{s>3863:R,a<2001:xnj,kk}
|
||||
qdc{a<3128:ngl,a>3442:rnk,x<874:zm,gl}
|
||||
rsz{m>1017:R,x<2038:A,m<443:R,dzz}
|
||||
frj{m>1063:md,a>3826:rbn,s>1317:lb,zkk}
|
||||
bbt{a>3364:A,a<3152:R,R}
|
||||
lpg{x>3231:fqz,x<2909:nvk,s<2283:nm,lv}
|
||||
sd{s<1984:R,a>1624:A,m<729:A,A}
|
||||
spq{x<3000:A,s>148:A,R}
|
||||
fsv{s<2728:gj,m<1078:fpf,s>2917:R,R}
|
||||
rmq{s<3098:A,x<182:fg,cpn}
|
||||
msc{x>326:A,xxx}
|
||||
drg{a>1618:hzf,s>486:zjl,a>619:hzc,A}
|
||||
hx{x>3100:R,m<249:hnq,R}
|
||||
ksc{a>3214:A,x>2913:R,R}
|
||||
kxs{x<3497:R,s>949:A,A}
|
||||
xv{s>311:A,R}
|
||||
kd{x<3492:A,ppm}
|
||||
st{s<1839:R,m>810:R,pgj}
|
||||
ntb{m>3358:spq,m>2731:zhg,s<116:R,A}
|
||||
lqz{a>3814:A,A}
|
||||
fb{x>2177:tg,bjd}
|
||||
dcg{a<3359:pgb,rch}
|
||||
khp{a<2918:A,x>3796:R,m>378:R,A}
|
||||
hhs{x<3165:A,R}
|
||||
bnn{a<1158:R,x<228:A,A}
|
||||
nx{m>469:R,x>3876:R,x<3760:A,A}
|
||||
vl{m>1539:A,a>468:A,s>326:R,A}
|
||||
qmv{s<3328:R,A}
|
||||
rt{m<2818:fbx,R}
|
||||
hcs{x<3425:zsp,mk}
|
||||
mn{m<2363:A,R}
|
||||
sm{m<839:A,x>2835:A,s>1035:A,A}
|
||||
zn{x<2270:R,a>798:R,s>3678:R,A}
|
||||
qqn{m>1794:jt,a<3748:fdm,gkv}
|
||||
hdn{s>3198:A,s>3046:R,ngq}
|
||||
mg{x>3205:R,s<2688:R,A}
|
||||
sgc{x<3807:fhq,x<3919:A,bh}
|
||||
qhl{m>2988:A,x>3259:drn,xpv}
|
||||
zbr{x<2841:R,m>2724:R,R}
|
||||
rjb{x>2706:R,R}
|
||||
qp{m>1140:drg,tgn}
|
||||
kkk{s>1408:vzj,m<1501:dnp,s<833:dmc,dcf}
|
||||
cmr{a>3290:R,m>1084:R,m>506:R,A}
|
||||
lbv{m<3300:R,a<923:A,s<2435:bb,qq}
|
||||
mjb{m<3900:R,a>3686:A,R}
|
||||
clg{s>1434:nvh,m>3229:rsh,bt}
|
||||
hrn{a>3478:R,a>3380:R,m>1194:R,A}
|
||||
zhd{s>1275:R,m>3076:R,m<2721:A,R}
|
||||
hnq{x>2834:A,R}
|
||||
tbt{x>3131:A,m<3435:R,A}
|
||||
phc{a>3375:A,a<3306:R,A}
|
||||
vq{x<800:R,s>2917:R,x<922:R,R}
|
||||
kq{s<3392:sc,a>1260:hm,m>2319:fb,htk}
|
||||
fbx{a>3317:A,m<2345:A,R}
|
||||
cm{m<2219:R,m>2264:R,R}
|
||||
csz{s>3528:R,A}
|
||||
nst{x>2459:A,A}
|
||||
lf{a<3121:R,x<2716:R,m<818:R,A}
|
||||
xsp{x<2980:R,a>2817:A,A}
|
||||
qm{x<2949:kr,x<3428:jjf,s<456:jtt,jqn}
|
||||
qt{s<744:A,x<1059:R,s>816:R,A}
|
||||
zc{x>3545:qx,a>3625:vn,A}
|
||||
cxk{a>1449:ntt,s>1617:xbr,s>1504:R,xqf}
|
||||
cg{x>2245:zx,x<1956:zbk,vft}
|
||||
zkk{m<649:A,a>3680:R,R}
|
||||
bx{a<3661:A,x<3529:A,a>3778:R,R}
|
||||
mv{s>1300:rsc,khc}
|
||||
qjt{x<3376:A,R}
|
||||
mgp{x>3029:zq,A}
|
||||
fpf{a>1769:R,x>2049:A,s<2923:A,R}
|
||||
lhc{s>1662:A,m>1543:A,a<3599:tl,vfn}
|
||||
mzr{a<2819:R,R}
|
||||
psp{s<2611:A,a>3354:A,a>3056:A,A}
|
||||
vc{m<1333:cb,mp}
|
||||
bzc{m<1850:R,m<1953:A,R}
|
||||
kb{m<2614:mpn,m>3380:zhp,gqd}
|
||||
dv{a<3677:cfq,x<3383:R,s<2710:R,rq}
|
||||
xh{s<2524:A,R}
|
||||
vr{s>754:A,x<643:A,A}
|
||||
sj{s<3498:R,s<3711:R,m<1518:A,R}
|
||||
bq{a<1413:R,m>3189:A,a<1750:R,R}
|
||||
bgn{m<197:A,m<353:gbq,xh}
|
||||
jl{x>2858:R,m<476:R,R}
|
||||
vbr{x<2055:R,m>2096:A,R}
|
||||
ngq{a>3426:R,s<3009:A,a<3210:A,R}
|
||||
krj{x>2852:pjd,gf}
|
||||
dp{m>1430:A,A}
|
||||
xkm{m<1913:kjv,vz}
|
||||
vg{x>224:R,a>1513:A,m<323:A,R}
|
||||
jmf{s<1182:A,a>3547:A,A}
|
||||
vqr{a>3441:ljt,A}
|
||||
ckd{m>3131:R,a<1567:R,m>2271:R,A}
|
||||
bp{s>3270:A,s>3133:R,R}
|
||||
pc{x>3663:A,m<491:R,A}
|
||||
mx{m>663:bs,m<622:tjb,gkn}
|
||||
qhh{x<1947:A,m>3589:A,R}
|
||||
ths{a>2010:dp,R}
|
||||
znh{m>662:A,x>2990:R,R}
|
||||
fph{a>2941:R,s<1649:R,R}
|
||||
nkr{x<1012:npt,m>1326:A,s>1224:R,R}
|
||||
zbc{x>2881:R,x>2784:rcn,x>2722:xf,rjb}
|
||||
hp{s>1600:R,s>1465:R,a>263:R,R}
|
||||
kdf{s>420:R,m>1639:R,x>2176:A,R}
|
||||
hkl{s<3823:bn,m>3668:sp,s>3936:A,A}
|
||||
lp{m>3026:tbt,s>1876:R,bj}
|
||||
zmt{a>3930:fn,a<3915:bcz,ktb}
|
||||
jqn{a<3862:pc,m<761:R,a<3938:ldl,A}
|
||||
hms{x>3072:A,s<1921:R,A}
|
||||
sn{s>774:A,s>753:R,x>547:A,A}
|
||||
kx{m>1998:tbn,A}
|
||||
mqc{m<2308:A,m>3052:A,m>2635:R,A}
|
||||
qdj{a>2946:zgm,a<2669:fqc,m>2271:lzv,ndr}
|
||||
xt{a>3826:A,x<3063:A,A}
|
||||
kvr{m>1390:R,x>3294:A,R}
|
||||
hz{x>2278:A,x<1949:A,A}
|
||||
fkj{x<3168:A,s<2741:R,R}
|
||||
tn{m<3831:R,s>2560:R,A}
|
||||
zjl{s>694:R,R}
|
||||
ndr{a<2827:cgl,x<2240:rsz,xn}
|
||||
btj{m<1813:qs,m<2042:jg,cm}
|
||||
bjd{x<1891:A,s>3600:A,A}
|
||||
gjg{m>2075:rjd,a<3588:fx,s<809:xxh,rss}
|
||||
zch{s<3538:hl,m<2003:zlz,dz}
|
||||
nrf{s>428:vkl,s>146:qsg,a>957:pmd,dxn}
|
||||
vhc{s>1085:tpg,jxf}
|
||||
lb{m<643:xlq,a>3717:svn,m>911:dsr,ds}
|
||||
zdc{x>1803:R,A}
|
||||
bzj{s>3689:A,m<2560:R,R}
|
||||
flt{s>1360:A,x>2163:A,A}
|
||||
qg{s>1039:A,A}
|
||||
dm{m<3816:A,s<3853:R,A}
|
||||
xmg{m>752:A,x>137:jzj,gsl}
|
||||
bcz{a<3903:R,R}
|
||||
lkc{a>3188:A,m<900:A,m>1018:A,R}
|
||||
jxf{s<527:srg,A}
|
||||
gx{m>486:dq,ntd}
|
||||
bd{s>2400:A,x>3671:A,s>2281:R,A}
|
||||
qc{s<2673:R,A}
|
||||
lm{a<3182:dj,a>3635:lqz,a>3407:R,R}
|
||||
qnm{m<247:R,a>1687:R,m>389:A,A}
|
||||
zq{s>3263:R,s>3111:R,R}
|
||||
mk{s>3246:A,m>2016:R,s<3088:A,R}
|
||||
rql{a<3077:xsp,s>2761:jl,s>2722:R,A}
|
||||
vj{s<2785:ndh,kd}
|
||||
in{s>2178:zs,skv}
|
||||
xrc{s>712:sn,A}
|
||||
jp{a<2589:R,A}
|
||||
pgj{a>3929:R,x>2479:A,A}
|
||||
jts{x>3530:R,A}
|
||||
gv{s>3739:A,R}
|
||||
mnr{s>2737:R,A}
|
||||
tgt{m>1439:R,s>292:R,A}
|
||||
xvs{a<2848:A,A}
|
||||
vps{a>3227:A,x<1588:R,A}
|
||||
jzj{m<672:A,s<1122:R,R}
|
||||
zzp{x<901:ch,R}
|
||||
sl{s>1542:A,s>1296:R,x>1931:A,zxz}
|
||||
rjd{a>3500:xzq,s<1086:qj,xz}
|
||||
kgd{s>1426:A,a>3812:A,R}
|
||||
dmc{m<2947:szv,kqx}
|
||||
hbk{m<3419:A,R}
|
||||
htk{a<729:R,a>1042:A,a>861:R,zn}
|
||||
zp{s<1255:A,A}
|
||||
qlx{m>1631:R,x>3329:R,R}
|
||||
skv{x<1606:kkk,a<1440:ggv,a<3018:xkm,gjg}
|
||||
zl{m>3149:A,a>3596:A,R}
|
||||
sjc{m>2149:A,A}
|
||||
ggv{x>2600:nh,cg}
|
||||
pd{a<3356:pr,x<2700:xfj,a<3465:zbd,xv}
|
||||
vhk{a<614:A,a>735:A,m>3340:A,R}
|
||||
bz{x<2317:R,s<3304:A,A}
|
||||
zbd{m>889:zfk,bdh}
|
||||
vsj{a<598:zhd,R}
|
||||
qzf{a>1455:R,x>340:A,s<1196:R,R}
|
||||
dz{m<3157:qv,x>3473:hkl,a>877:sv,rf}
|
||||
rtg{a>2957:R,A}
|
||||
qk{a>3252:svq,s>3213:R,m>548:cfz,R}
|
||||
zx{a>871:sxt,a>314:mn,a>186:zz,nq}
|
||||
kcd{x<2880:R,s>94:R,R}
|
||||
hqc{m<796:R,m>890:rhd,a<2192:A,xvs}
|
||||
ffn{m>350:jp,a<2088:ttd,a>2817:R,R}
|
||||
sz{m<1599:R,x>2121:ktx,m<3075:bbt,qhh}
|
||||
jtt{a<3836:zqv,m<876:gg,A}
|
||||
lmr{a<2718:A,a<3149:R,R}
|
||||
zdv{s>3010:R,lr}
|
||||
jcl{m<1659:A,R}
|
||||
mdq{a<479:R,A}
|
||||
dnp{m<537:pht,s<885:qp,x<582:bjg,kjt}
|
||||
lxp{m>2932:A,lx}
|
||||
kqx{s<513:hbk,a<1592:ncn,a>3119:xrc,kt}
|
||||
cnl{x<1035:R,m<2338:A,R}
|
||||
mp{m<2347:xpj,a>2221:vdz,bq}
|
||||
rgx{s<2542:R,R}
|
||||
rb{s<3903:A,A}
|
||||
jk{m>2376:R,x>3391:R,m<1198:R,R}
|
||||
zgm{s>3092:bzj,sz}
|
||||
gt{a>1014:R,m<2365:ls,R}
|
||||
jpn{s>1819:hj,a>3326:vqr,ljm}
|
||||
nzj{s>254:R,m>2156:R,x<991:jf,qhq}
|
||||
gh{m>856:A,nsp}
|
||||
kpq{a<110:A,x>3312:R,x<3090:R,R}
|
||||
hl{x<3177:pj,bp}
|
||||
gs{a<180:R,s>3703:R,R}
|
||||
gz{m>3188:R,R}
|
||||
lft{s>2829:ps,gbj}
|
||||
kzb{m>2754:A,a<2674:A,A}
|
||||
vz{a>2453:pp,clg}
|
||||
tqc{x<360:dk,zcq}
|
||||
bxv{a<2317:A,m<2884:pn,fkp}
|
||||
ztl{a<590:R,x<2295:R,x>2529:R,R}
|
||||
vkk{a>3382:zc,x>3140:xrl,m<384:lft,rql}
|
||||
fbv{s<3805:R,s>3881:R,a>172:R,R}
|
||||
gbq{m>279:A,x<3717:R,x<3898:A,R}
|
||||
svn{s<1485:R,A}
|
||||
skb{s>589:R,s>295:R,x>2063:A,A}
|
||||
mc{a>272:A,x>3488:gs,s>3786:A,fsf}
|
||||
pbv{x<3811:R,a>3290:A,m<3444:R,A}
|
||||
gkn{s<1377:A,A}
|
||||
nth{a<1084:bd,A}
|
||||
vsl{a<2799:A,a<2901:bgb,fph}
|
||||
lr{x<1407:A,s>2654:R,s<2373:A,R}
|
||||
dbq{m<1824:R,s>291:R,A}
|
||||
hdt{s>3011:R,s>2681:A,bgg}
|
||||
nvq{m>597:R,x>47:R,A}
|
||||
qj{s>674:pz,s>313:srn,ntb}
|
||||
fgp{a>3257:R,mcl}
|
||||
pjd{s<3848:vlx,A}
|
||||
gmf{s<1729:A,A}
|
||||
kzp{x>1746:A,x>1670:A,m>2460:A,A}
|
||||
tl{m<888:A,m<1289:A,R}
|
||||
zh{m<1334:fzz,s>2674:vj,m<2347:cdt,cx}
|
||||
ql{s<1432:A,a>258:R,A}
|
||||
rch{s<485:R,vqq}
|
||||
hf{a<3208:R,pf}
|
||||
bj{x<2870:R,m<2489:A,R}
|
||||
zhg{x>3190:A,s>144:R,m<2941:A,R}
|
||||
rsh{x<3060:R,a<1833:pm,R}
|
||||
ntt{a>1930:R,a<1611:A,A}
|
||||
hd{s>1811:A,R}
|
||||
dfd{x<2726:A,qg}
|
||||
gqd{a>3471:qjt,qhl}
|
||||
xrl{x>3598:khp,m>284:lbp,m<100:R,xq}
|
||||
zxz{m<2818:A,R}
|
||||
vfn{s>1502:R,x>955:R,s>1440:A,R}
|
||||
dr{s<370:A,x>3070:R,R}
|
||||
cth{a<2210:cxk,a>3174:lhc,krr}
|
||||
xbr{m<1775:R,m>3200:A,A}
|
||||
nn{m>718:R,x>3641:nx,A}
|
||||
dxn{s<55:hr,x>3309:A,a<824:kcd,mqc}
|
||||
mt{a<423:R,a>555:R,R}
|
||||
hqk{a>2663:A,s<888:R,a<2564:R,A}
|
||||
ns{a<2307:lrn,qdj}
|
||||
sxb{s>318:vg,hgv}
|
||||
ljm{s<1457:A,m>763:A,s>1648:R,A}
|
||||
qcr{s<1460:R,m<548:hms,a>1054:A,nzq}
|
||||
sxx{a>3455:A,R}
|
||||
|
||||
{x=378,m=450,a=211,s=36}
|
||||
{x=220,m=1090,a=338,s=879}
|
||||
{x=117,m=124,a=2136,s=128}
|
||||
{x=1392,m=1408,a=126,s=16}
|
||||
{x=2038,m=278,a=901,s=1801}
|
||||
{x=323,m=1703,a=964,s=571}
|
||||
{x=265,m=358,a=456,s=34}
|
||||
{x=1513,m=144,a=525,s=1341}
|
||||
{x=355,m=2036,a=814,s=1179}
|
||||
{x=937,m=701,a=2026,s=1349}
|
||||
{x=1292,m=766,a=2805,s=16}
|
||||
{x=319,m=26,a=83,s=1193}
|
||||
{x=600,m=5,a=242,s=76}
|
||||
{x=117,m=1415,a=1636,s=1057}
|
||||
{x=87,m=1530,a=1686,s=386}
|
||||
{x=36,m=957,a=1712,s=300}
|
||||
{x=2570,m=49,a=661,s=442}
|
||||
{x=643,m=698,a=1593,s=854}
|
||||
{x=1450,m=1410,a=289,s=1342}
|
||||
{x=1690,m=376,a=584,s=3715}
|
||||
{x=1942,m=570,a=1726,s=1192}
|
||||
{x=420,m=475,a=1410,s=863}
|
||||
{x=550,m=662,a=2140,s=105}
|
||||
{x=241,m=2370,a=756,s=26}
|
||||
{x=705,m=425,a=1000,s=160}
|
||||
{x=1763,m=914,a=197,s=555}
|
||||
{x=2267,m=323,a=70,s=147}
|
||||
{x=497,m=392,a=1959,s=360}
|
||||
{x=428,m=1375,a=415,s=236}
|
||||
{x=1800,m=96,a=403,s=1227}
|
||||
{x=216,m=381,a=1217,s=1031}
|
||||
{x=3129,m=304,a=811,s=1753}
|
||||
{x=555,m=59,a=3254,s=2896}
|
||||
{x=397,m=1518,a=740,s=496}
|
||||
{x=905,m=217,a=1234,s=2319}
|
||||
{x=283,m=2490,a=309,s=1156}
|
||||
{x=1777,m=624,a=96,s=2053}
|
||||
{x=1031,m=481,a=1014,s=198}
|
||||
{x=155,m=205,a=2460,s=832}
|
||||
{x=123,m=25,a=3962,s=3662}
|
||||
{x=3242,m=396,a=519,s=150}
|
||||
{x=2632,m=1307,a=3594,s=1714}
|
||||
{x=147,m=285,a=1020,s=40}
|
||||
{x=1498,m=1133,a=241,s=1263}
|
||||
{x=1977,m=323,a=1594,s=241}
|
||||
{x=807,m=1042,a=702,s=295}
|
||||
{x=70,m=455,a=1328,s=108}
|
||||
{x=2392,m=27,a=158,s=44}
|
||||
{x=528,m=671,a=2003,s=935}
|
||||
{x=1539,m=2002,a=168,s=479}
|
||||
{x=2121,m=195,a=901,s=1116}
|
||||
{x=251,m=51,a=380,s=745}
|
||||
{x=793,m=1959,a=598,s=605}
|
||||
{x=137,m=261,a=714,s=1548}
|
||||
{x=2783,m=486,a=2065,s=914}
|
||||
{x=574,m=387,a=250,s=28}
|
||||
{x=3,m=829,a=1862,s=2}
|
||||
{x=846,m=2476,a=841,s=1810}
|
||||
{x=1020,m=114,a=463,s=323}
|
||||
{x=4,m=970,a=192,s=142}
|
||||
{x=942,m=2297,a=125,s=1638}
|
||||
{x=1664,m=2275,a=2086,s=290}
|
||||
{x=682,m=93,a=143,s=2033}
|
||||
{x=1613,m=356,a=463,s=632}
|
||||
{x=633,m=268,a=150,s=798}
|
||||
{x=1743,m=1455,a=56,s=487}
|
||||
{x=2774,m=103,a=739,s=77}
|
||||
{x=1760,m=2631,a=81,s=138}
|
||||
{x=461,m=1688,a=1543,s=1712}
|
||||
{x=1182,m=14,a=566,s=3270}
|
||||
{x=680,m=467,a=1920,s=297}
|
||||
{x=1281,m=2355,a=704,s=1340}
|
||||
{x=142,m=65,a=589,s=20}
|
||||
{x=1412,m=559,a=677,s=2106}
|
||||
{x=905,m=2761,a=1526,s=648}
|
||||
{x=399,m=667,a=1901,s=27}
|
||||
{x=2241,m=3411,a=1786,s=321}
|
||||
{x=1395,m=1278,a=508,s=1112}
|
||||
{x=363,m=35,a=218,s=1280}
|
||||
{x=829,m=115,a=304,s=192}
|
||||
{x=1397,m=599,a=861,s=838}
|
||||
{x=824,m=2140,a=88,s=1736}
|
||||
{x=661,m=276,a=502,s=731}
|
||||
{x=585,m=14,a=705,s=473}
|
||||
{x=747,m=95,a=829,s=805}
|
||||
{x=2006,m=323,a=982,s=168}
|
||||
{x=795,m=193,a=473,s=1531}
|
||||
{x=687,m=428,a=972,s=1154}
|
||||
{x=254,m=426,a=281,s=552}
|
||||
{x=171,m=369,a=382,s=1369}
|
||||
{x=964,m=10,a=322,s=2007}
|
||||
{x=1960,m=183,a=2153,s=1967}
|
||||
{x=2315,m=170,a=41,s=727}
|
||||
{x=189,m=901,a=307,s=3026}
|
||||
{x=757,m=1235,a=1316,s=335}
|
||||
{x=836,m=3023,a=453,s=2355}
|
||||
{x=2187,m=2140,a=683,s=2560}
|
||||
{x=1772,m=468,a=1812,s=1329}
|
||||
{x=783,m=601,a=1339,s=3291}
|
||||
{x=570,m=172,a=1794,s=120}
|
||||
{x=1207,m=1572,a=700,s=758}
|
||||
{x=1961,m=3652,a=702,s=153}
|
||||
{x=1094,m=435,a=19,s=938}
|
||||
{x=3328,m=166,a=247,s=216}
|
||||
{x=1500,m=2012,a=1561,s=59}
|
||||
{x=12,m=2269,a=8,s=796}
|
||||
{x=193,m=1137,a=328,s=13}
|
||||
{x=120,m=1179,a=59,s=1829}
|
||||
{x=499,m=650,a=1049,s=1803}
|
||||
{x=2761,m=1431,a=389,s=1322}
|
||||
{x=456,m=2766,a=2165,s=348}
|
||||
{x=2387,m=12,a=2140,s=556}
|
||||
{x=387,m=7,a=1514,s=1137}
|
||||
{x=1111,m=608,a=581,s=965}
|
||||
{x=1055,m=181,a=754,s=67}
|
||||
{x=74,m=2582,a=66,s=546}
|
||||
{x=5,m=956,a=1013,s=657}
|
||||
{x=262,m=189,a=2496,s=233}
|
||||
{x=518,m=2821,a=851,s=825}
|
||||
{x=351,m=1981,a=221,s=34}
|
||||
{x=995,m=165,a=36,s=2286}
|
||||
{x=1636,m=335,a=936,s=447}
|
||||
{x=763,m=692,a=1527,s=210}
|
||||
{x=301,m=559,a=1815,s=2640}
|
||||
{x=959,m=2852,a=232,s=53}
|
||||
{x=136,m=153,a=206,s=11}
|
||||
{x=1533,m=42,a=2014,s=136}
|
||||
{x=341,m=378,a=37,s=577}
|
||||
{x=220,m=1451,a=185,s=421}
|
||||
{x=1086,m=3265,a=1184,s=2960}
|
||||
{x=143,m=2701,a=602,s=173}
|
||||
{x=628,m=1016,a=1642,s=223}
|
||||
{x=597,m=641,a=1331,s=651}
|
||||
{x=809,m=1843,a=1111,s=2189}
|
||||
{x=1385,m=1352,a=238,s=1969}
|
||||
{x=515,m=1374,a=125,s=913}
|
||||
{x=798,m=2743,a=1798,s=1045}
|
||||
{x=2999,m=1787,a=1168,s=188}
|
||||
{x=57,m=77,a=2652,s=56}
|
||||
{x=1231,m=304,a=1288,s=523}
|
||||
{x=1031,m=381,a=558,s=267}
|
||||
{x=721,m=883,a=2995,s=22}
|
||||
{x=304,m=846,a=1525,s=30}
|
||||
{x=446,m=2969,a=412,s=674}
|
||||
{x=187,m=418,a=1187,s=571}
|
||||
{x=810,m=515,a=819,s=1393}
|
||||
{x=740,m=3392,a=1128,s=1114}
|
||||
{x=137,m=631,a=1208,s=1707}
|
||||
{x=653,m=2468,a=952,s=811}
|
||||
{x=33,m=70,a=518,s=464}
|
||||
{x=3318,m=2,a=3661,s=64}
|
||||
{x=50,m=548,a=1657,s=704}
|
||||
{x=2272,m=2684,a=1597,s=2220}
|
||||
{x=185,m=339,a=460,s=517}
|
||||
{x=8,m=1651,a=1810,s=354}
|
||||
{x=548,m=833,a=1703,s=759}
|
||||
{x=551,m=358,a=390,s=468}
|
||||
{x=202,m=2260,a=597,s=632}
|
||||
{x=453,m=1811,a=754,s=2449}
|
||||
{x=353,m=101,a=1835,s=72}
|
||||
{x=1451,m=453,a=162,s=13}
|
||||
{x=125,m=2120,a=627,s=981}
|
||||
{x=5,m=283,a=1755,s=194}
|
||||
{x=973,m=835,a=62,s=1184}
|
||||
{x=346,m=1348,a=442,s=210}
|
||||
{x=4,m=1242,a=136,s=196}
|
||||
{x=2388,m=1336,a=1991,s=2873}
|
||||
{x=561,m=2335,a=1059,s=627}
|
||||
{x=838,m=3226,a=159,s=1053}
|
||||
{x=2578,m=49,a=1920,s=2432}
|
||||
{x=710,m=342,a=182,s=534}
|
||||
{x=1997,m=1509,a=946,s=1849}
|
||||
{x=810,m=249,a=495,s=257}
|
||||
{x=363,m=274,a=2742,s=25}
|
||||
{x=506,m=565,a=2584,s=731}
|
||||
{x=508,m=2073,a=21,s=1826}
|
||||
{x=1413,m=780,a=779,s=378}
|
||||
{x=1097,m=47,a=98,s=402}
|
||||
{x=536,m=2,a=2710,s=1499}
|
||||
{x=548,m=2845,a=2095,s=555}
|
||||
{x=2963,m=2206,a=1920,s=875}
|
||||
{x=1783,m=367,a=1245,s=594}
|
||||
{x=409,m=18,a=408,s=119}
|
||||
{x=1554,m=3613,a=3002,s=87}
|
||||
{x=232,m=197,a=63,s=1372}
|
||||
{x=412,m=1355,a=1673,s=1667}
|
||||
{x=261,m=142,a=123,s=1187}
|
||||
{x=1396,m=779,a=287,s=60}
|
||||
{x=28,m=1350,a=585,s=861}
|
||||
{x=1123,m=329,a=1166,s=62}
|
||||
{x=2292,m=73,a=123,s=596}
|
||||
{x=2400,m=1430,a=390,s=1313}
|
||||
{x=638,m=2856,a=44,s=488}
|
||||
{x=294,m=1534,a=1075,s=1914}
|
||||
{x=1233,m=71,a=253,s=3058}
|
||||
{x=1536,m=805,a=158,s=738}
|
||||
{x=2903,m=119,a=2344,s=2387}
|
||||
{x=142,m=1768,a=940,s=881}
|
||||
{x=301,m=2748,a=739,s=766}
|
||||
{x=127,m=18,a=141,s=1398}
|
||||
@@ -0,0 +1,255 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
)
|
||||
|
||||
// var log = aoc.Log
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 uint
|
||||
}
|
||||
|
||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
|
||||
var workflows = make(map[string][]rule)
|
||||
var parts []part
|
||||
|
||||
for scan.Scan() {
|
||||
text := strings.TrimSuffix(scan.Text(), "}")
|
||||
if len(text) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
// Is Part
|
||||
if p, ok := scanPart(text); ok {
|
||||
parts = append(parts, p)
|
||||
continue
|
||||
}
|
||||
|
||||
if name, r, ok := scanRule(text); ok {
|
||||
workflows[name] = r
|
||||
}
|
||||
}
|
||||
|
||||
var result result
|
||||
result.valuePT1 = solveWorkflow(parts, workflows)
|
||||
result.valuePT2 = solveRanges(workflows)
|
||||
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
type part struct {
|
||||
x, m, a, s int
|
||||
}
|
||||
|
||||
func (p part) String() string {
|
||||
return fmt.Sprintf("{x:%v m:%v a:%v s:%v}", p.x, p.m, p.a, p.s)
|
||||
}
|
||||
func scanPart(text string) (part, bool) {
|
||||
var p part
|
||||
|
||||
// Is Part
|
||||
if text[0] == '{' {
|
||||
for _, s := range strings.Split(text[1:], ",") {
|
||||
a, b, _ := strings.Cut(s, "=")
|
||||
i := aoc.Atoi(b)
|
||||
switch a {
|
||||
case "x":
|
||||
p.x = i
|
||||
case "m":
|
||||
p.m = i
|
||||
case "a":
|
||||
p.a = i
|
||||
case "s":
|
||||
p.s = i
|
||||
}
|
||||
}
|
||||
return p, true
|
||||
}
|
||||
return p, false
|
||||
}
|
||||
|
||||
type rule struct {
|
||||
match string
|
||||
op string
|
||||
value int
|
||||
queue string
|
||||
}
|
||||
|
||||
func scanRule(text string) (string, []rule, bool) {
|
||||
name, text, _ := strings.Cut(text, "{")
|
||||
var r []rule
|
||||
for _, s := range strings.Split(text, ",") {
|
||||
if a, b, ok := strings.Cut(s, "<"); ok {
|
||||
b, c, _ := strings.Cut(b, ":")
|
||||
r = append(r, rule{
|
||||
match: a,
|
||||
op: "<",
|
||||
value: aoc.Atoi(b),
|
||||
queue: c,
|
||||
})
|
||||
|
||||
continue
|
||||
}
|
||||
if a, b, ok := strings.Cut(s, ">"); ok {
|
||||
b, c, _ := strings.Cut(b, ":")
|
||||
r = append(r, rule{
|
||||
match: a,
|
||||
op: ">",
|
||||
value: aoc.Atoi(b),
|
||||
queue: c,
|
||||
})
|
||||
continue
|
||||
}
|
||||
|
||||
// default queue comes last
|
||||
r = append(r, rule{queue: s})
|
||||
break
|
||||
}
|
||||
return name, r, len(r) > 0
|
||||
}
|
||||
func (r rule) Match(p part) bool {
|
||||
var value int
|
||||
|
||||
switch r.match {
|
||||
case "x":
|
||||
value = p.x
|
||||
case "m":
|
||||
value = p.m
|
||||
case "a":
|
||||
value = p.a
|
||||
case "s":
|
||||
value = p.s
|
||||
default:
|
||||
return true // default to new queue
|
||||
}
|
||||
|
||||
if r.op == ">" && value > r.value {
|
||||
return true
|
||||
} else if r.op == "<" && value < r.value {
|
||||
return true
|
||||
}
|
||||
return false // no match
|
||||
}
|
||||
|
||||
func solveWorkflow(parts []part, workflows map[string][]rule) int {
|
||||
// var rejected []part
|
||||
var accepted []part
|
||||
|
||||
for _, p := range parts {
|
||||
workflow := "in"
|
||||
|
||||
nextStep:
|
||||
for workflow != "" {
|
||||
for _, r := range workflows[workflow] {
|
||||
if !r.Match(p) {
|
||||
continue
|
||||
}
|
||||
workflow = r.queue
|
||||
|
||||
if workflow == "A" {
|
||||
accepted = append(accepted, p)
|
||||
workflow = ""
|
||||
break nextStep
|
||||
}
|
||||
if workflow == "R" {
|
||||
// rejected = append(rejected, p)
|
||||
workflow = ""
|
||||
break nextStep
|
||||
}
|
||||
|
||||
continue nextStep
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sum := 0
|
||||
for _, p := range accepted {
|
||||
sum += p.x
|
||||
sum += p.m
|
||||
sum += p.a
|
||||
sum += p.s
|
||||
}
|
||||
return sum
|
||||
}
|
||||
|
||||
func solveRanges(workflows map[string][]rule) uint {
|
||||
|
||||
pq := aoc.PriorityQueue(func(a, b *queue) bool { return false })
|
||||
pq.Insert(&queue{
|
||||
"in",
|
||||
block{
|
||||
ranger{1, 4000},
|
||||
ranger{1, 4000},
|
||||
ranger{1, 4000},
|
||||
ranger{1, 4000},
|
||||
}})
|
||||
|
||||
var accepted []block
|
||||
// var rejected []block
|
||||
|
||||
for !pq.IsEmpty() {
|
||||
current := pq.ExtractMin()
|
||||
for _, rule := range workflows[current.name] {
|
||||
next := &queue{name: rule.queue, block: current.block}
|
||||
|
||||
switch rule.match {
|
||||
case "x":
|
||||
current.x, next.x = split(current.x, rule.value, rule.op == ">")
|
||||
case "m":
|
||||
current.m, next.m = split(current.m, rule.value, rule.op == ">")
|
||||
case "a":
|
||||
current.a, next.a = split(current.a, rule.value, rule.op == ">")
|
||||
case "s":
|
||||
current.s, next.s = split(current.s, rule.value, rule.op == ">")
|
||||
}
|
||||
|
||||
switch next.name {
|
||||
case "R":
|
||||
// rejected = append(rejected, next.block)
|
||||
|
||||
case "A":
|
||||
accepted = append(accepted, next.block)
|
||||
|
||||
default:
|
||||
pq.Insert(next)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var sum uint
|
||||
for _, a := range accepted {
|
||||
sum += uint((a.x[1] - a.x[0] + 1) * (a.m[1] - a.m[0] + 1) * (a.a[1] - a.a[0] + 1) * (a.s[1] - a.s[0] + 1))
|
||||
}
|
||||
|
||||
return sum
|
||||
}
|
||||
|
||||
type ranger [2]int
|
||||
type block struct {
|
||||
x, m, a, s ranger
|
||||
}
|
||||
type queue struct {
|
||||
name string
|
||||
block
|
||||
}
|
||||
|
||||
func split(a ranger, n int, gt bool) (current ranger, next ranger) {
|
||||
if gt { // x > N => [0,N] [N++,inf]
|
||||
return ranger{a[0], n}, ranger{n + 1, a[1]}
|
||||
}
|
||||
|
||||
// x < N => [N,inf] [0,N--]
|
||||
return ranger{n, a[1]}, ranger{a[0], n - 1}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example.txt
|
||||
var example []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 19114)
|
||||
is.Equal(result.valuePT2, uint(167409079868000))
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 377025)
|
||||
is.Equal(result.valuePT2, uint(135506683246673))
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
broadcaster -> a, b, c
|
||||
%a -> b
|
||||
%b -> c
|
||||
%c -> inv
|
||||
&inv -> a
|
||||
@@ -0,0 +1,5 @@
|
||||
broadcaster -> a
|
||||
%a -> inv, con
|
||||
&inv -> b
|
||||
%b -> con
|
||||
&con -> output
|
||||
@@ -0,0 +1,58 @@
|
||||
%vg -> lf, vd
|
||||
%dr -> kg
|
||||
%cn -> mv, pt
|
||||
%rq -> bk, gr
|
||||
%vp -> lp, bk
|
||||
%kg -> lv
|
||||
%lv -> jc, tp
|
||||
%sj -> rm, vd
|
||||
%jc -> tp, qr
|
||||
%km -> tp, dr
|
||||
%jx -> cn
|
||||
&vd -> tf, lf, nb, cx, hx, lr
|
||||
%lp -> jt, bk
|
||||
%vj -> ps
|
||||
broadcaster -> km, lr, xh, rf
|
||||
%dj -> pt, gc
|
||||
%cg -> vd, hx
|
||||
&ln -> tg
|
||||
%fl -> pt, sk
|
||||
%lm -> tr, bk
|
||||
%lr -> vd, vg
|
||||
&pt -> vq, rf, cm, jx, rg
|
||||
%cx -> gp
|
||||
%gp -> vd, sj
|
||||
&db -> tg
|
||||
%st -> vd
|
||||
%jt -> bk
|
||||
%jh -> lm, bk
|
||||
%xf -> bd, tp
|
||||
%gc -> cm, pt
|
||||
&tp -> dr, km, kg, db, vj, qr
|
||||
%ps -> xf, tp
|
||||
%rf -> pt, dj
|
||||
%lf -> nb
|
||||
%bd -> tp, gg
|
||||
%dk -> tp, vj
|
||||
%mn -> jh, bk
|
||||
&tg -> rx
|
||||
%ql -> bk, zx
|
||||
%tr -> bk, vp
|
||||
%sk -> pt
|
||||
%nb -> cg
|
||||
%sb -> vd, cx
|
||||
%qr -> dk
|
||||
%xh -> bk, ql
|
||||
%rg -> sd
|
||||
%hx -> sb
|
||||
%sd -> pt, jx
|
||||
%gr -> bk, mn
|
||||
%gg -> tp
|
||||
%zx -> rq
|
||||
&bk -> xh, ln, zx
|
||||
%rm -> st, vd
|
||||
%hq -> fl, pt
|
||||
&vq -> tg
|
||||
%cm -> rg
|
||||
&tf -> tg
|
||||
%mv -> pt, hq
|
||||
@@ -0,0 +1,282 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
aoc "go.sour.is/advent-of-code"
|
||||
"golang.org/x/exp/maps"
|
||||
)
|
||||
|
||||
// var log = aoc.Log
|
||||
|
||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
||||
|
||||
type result struct {
|
||||
valuePT1 int
|
||||
valuePT2 int
|
||||
}
|
||||
|
||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
||||
|
||||
func run(scan *bufio.Scanner) (*result, error) {
|
||||
m := &machine{}
|
||||
receivers := make(map[string][]string)
|
||||
|
||||
for scan.Scan() {
|
||||
text := scan.Text()
|
||||
|
||||
name, text, _ := strings.Cut(text, " -> ")
|
||||
dest := strings.Split(text, ", ")
|
||||
|
||||
switch {
|
||||
case name == "broadcaster":
|
||||
m.Add(name, &broadcaster{dest: dest})
|
||||
case strings.HasPrefix(name, "%"):
|
||||
name = strings.TrimPrefix(name, "%")
|
||||
m.Add(name, &flipflop{name: name, dest: dest})
|
||||
|
||||
case strings.HasPrefix(name, "&"):
|
||||
name = strings.TrimPrefix(name, "&")
|
||||
m.Add(name, &conjunction{name: name, dest: dest})
|
||||
}
|
||||
|
||||
for _, d := range dest {
|
||||
// rx is present so enable pt 2
|
||||
if d == "rx" {
|
||||
m.Add("rx", &rx{})
|
||||
}
|
||||
receivers[d] = append(receivers[d], name)
|
||||
}
|
||||
}
|
||||
|
||||
m.setup(receivers)
|
||||
|
||||
result := &result{}
|
||||
|
||||
for i := 0; i < 10_000; i++ { // need enough presses to find the best LCM values for each conjunction
|
||||
if i == 1000 {
|
||||
result.valuePT1 = m.highPulses * m.lowPulses
|
||||
}
|
||||
m.Push(i)
|
||||
}
|
||||
|
||||
// rx is present.. perform part 2.
|
||||
if rx, ok := receivers["rx"]; ok {
|
||||
tip := m.m[rx[0]].(*conjunction) // panic if missing!
|
||||
|
||||
var lvalues []int
|
||||
for k, v := range tip.pushes {
|
||||
for i, h := range makeHistory(v) {
|
||||
if i == 1 && len(h) > 0 && h[0] > 0 {
|
||||
fmt.Println(tip.name, k, "frequency", h[0])
|
||||
lvalues = append(lvalues, h[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result.valuePT2 = aoc.LCM(lvalues...)
|
||||
fmt.Println(tip.name, "LCM", result.valuePT2, lvalues)
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
type signal bool
|
||||
|
||||
const (
|
||||
LOW signal = false
|
||||
HIGH signal = true
|
||||
)
|
||||
|
||||
type message struct {
|
||||
signal
|
||||
from, to string
|
||||
}
|
||||
|
||||
type machine struct {
|
||||
m map[string]pulser
|
||||
|
||||
queue []message
|
||||
|
||||
press int
|
||||
highPulses int
|
||||
lowPulses int
|
||||
}
|
||||
|
||||
func (m *machine) Add(name string, p pulser) {
|
||||
if m.m == nil {
|
||||
m.m = make(map[string]pulser)
|
||||
}
|
||||
p.SetMachine(m)
|
||||
m.m[name] = p
|
||||
}
|
||||
func (m *machine) Send(msgs ...message) {
|
||||
m.queue = append(m.queue, msgs...)
|
||||
for _, msg := range msgs {
|
||||
// fmt.Println(msg)
|
||||
if msg.signal {
|
||||
m.highPulses++
|
||||
} else {
|
||||
m.lowPulses++
|
||||
}
|
||||
}
|
||||
}
|
||||
func (m *machine) Push(i int) {
|
||||
m.press = i
|
||||
m.Send(generate(LOW, "button", "broadcaster")...)
|
||||
m.processQueue(i)
|
||||
}
|
||||
func (m *machine) processQueue(i int) {
|
||||
// look for work and process up to the queue length. repeat.
|
||||
hwm := 0
|
||||
for hwm < len(m.queue) {
|
||||
end := len(m.queue)
|
||||
|
||||
for ; hwm < end; hwm++ {
|
||||
msg := m.queue[hwm]
|
||||
|
||||
if p, ok := m.m[msg.to]; ok {
|
||||
// fmt.Println(i, "S:", m.m[msg.from], msg.signal, "R:", p)
|
||||
p.Pulse(msg)
|
||||
}
|
||||
}
|
||||
|
||||
hwm = 0
|
||||
copy(m.queue, m.queue[end:])
|
||||
m.queue = m.queue[:len(m.queue)-end]
|
||||
// fmt.Println("")
|
||||
}
|
||||
}
|
||||
func (m *machine) setup(receivers map[string][]string) {
|
||||
for name, recv := range receivers {
|
||||
if p, ok := m.m[name]; ok {
|
||||
if p, ok := p.(interface{ Receive(...string) }); ok {
|
||||
p.Receive(recv...)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type pulser interface {
|
||||
Pulse(message)
|
||||
SetMachine(*machine)
|
||||
}
|
||||
|
||||
// IsModule implements the machine registration for each module.
|
||||
type IsModule struct {
|
||||
*machine
|
||||
}
|
||||
|
||||
func (p *IsModule) SetMachine(m *machine) { p.machine = m }
|
||||
|
||||
type broadcaster struct {
|
||||
dest []string
|
||||
IsModule
|
||||
}
|
||||
|
||||
func (b *broadcaster) Pulse(msg message) {
|
||||
b.Send(generate(msg.signal, "broadcaster", b.dest...)...)
|
||||
}
|
||||
|
||||
type flipflop struct {
|
||||
name string
|
||||
state signal
|
||||
dest []string
|
||||
|
||||
IsModule
|
||||
}
|
||||
|
||||
func (b *flipflop) Pulse(msg message) {
|
||||
if !msg.signal {
|
||||
b.state = !b.state
|
||||
b.Send(generate(b.state, b.name, b.dest...)...)
|
||||
}
|
||||
}
|
||||
|
||||
type conjunction struct {
|
||||
name string
|
||||
state map[string]signal
|
||||
dest []string
|
||||
|
||||
pushes map[string][]int
|
||||
|
||||
IsModule
|
||||
}
|
||||
|
||||
func (b *conjunction) Receive(names ...string) {
|
||||
if b.state == nil {
|
||||
b.state = make(map[string]signal)
|
||||
b.pushes = make(map[string][]int)
|
||||
}
|
||||
for _, name := range names {
|
||||
b.state[name] = false
|
||||
b.pushes[name] = []int{}
|
||||
}
|
||||
}
|
||||
func (b *conjunction) Pulse(msg message) {
|
||||
b.state[msg.from] = msg.signal
|
||||
|
||||
if msg.signal {
|
||||
// collect frequency of pushes to esti,ate rate
|
||||
b.pushes[msg.from] = append(b.pushes[msg.from], b.press)
|
||||
}
|
||||
|
||||
if all(HIGH, maps.Values(b.state)...) {
|
||||
b.Send(generate(LOW, b.name, b.dest...)...)
|
||||
return
|
||||
}
|
||||
b.Send(generate(HIGH, b.name, b.dest...)...)
|
||||
}
|
||||
|
||||
type rx struct {
|
||||
IsModule
|
||||
}
|
||||
|
||||
func (rx *rx) Pulse(msg message) {
|
||||
if !msg.signal {
|
||||
panic("pulse received") // will never happen...
|
||||
}
|
||||
}
|
||||
|
||||
// helper funcs
|
||||
func all[T comparable](match T, lis ...T) bool {
|
||||
for _, b := range lis {
|
||||
if b != match {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
func generate(t signal, from string, destinations ...string) []message {
|
||||
msgs := make([]message, len(destinations))
|
||||
for i, to := range destinations {
|
||||
msgs[i] = message{signal: t, from: from, to: to}
|
||||
}
|
||||
return msgs
|
||||
}
|
||||
|
||||
// makeHistory from day 9
|
||||
func makeHistory(in []int) [][]int {
|
||||
var history [][]int
|
||||
history = append(history, in)
|
||||
|
||||
// for {
|
||||
var diffs []int
|
||||
|
||||
current := history[len(history)-1]
|
||||
|
||||
for i := range current[1:] {
|
||||
diffs = append(diffs, current[i+1]-current[i])
|
||||
}
|
||||
|
||||
history = append(history, diffs)
|
||||
|
||||
// if len(diffs) == 0 || aoc.Max(diffs[0], diffs[1:]...) == 0 && aoc.Min(diffs[0], diffs[1:]...) == 0 {
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
return history
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
_ "embed"
|
||||
|
||||
"github.com/matryer/is"
|
||||
)
|
||||
|
||||
//go:embed example1.txt
|
||||
var example1 []byte
|
||||
|
||||
//go:embed example2.txt
|
||||
var example2 []byte
|
||||
|
||||
//go:embed input.txt
|
||||
var input []byte
|
||||
|
||||
func TestExample1(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example1))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 32000000)
|
||||
is.Equal(result.valuePT2, 0)
|
||||
}
|
||||
|
||||
func TestExample2(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(example2))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 11687500)
|
||||
is.Equal(result.valuePT2, 0)
|
||||
}
|
||||
|
||||
func TestSolution(t *testing.T) {
|
||||
is := is.New(t)
|
||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
||||
|
||||
result, err := run(scan)
|
||||
is.NoErr(err)
|
||||
|
||||
t.Log(result)
|
||||
is.Equal(result.valuePT1, 819397964)
|
||||
is.Equal(result.valuePT2, 252667369442479)
|
||||
}
|
||||
Reference in new issue
Block a user