Day 14 and 15?

trunk
HeNine 3 years ago
parent 91e499078c
commit d1c4133f86

@ -0,0 +1,4 @@
name = "day14"
uuid = "4741208b-2337-4a9b-ac28-da3984274e1f"
authors = ["HeNine "]
version = "0.1.0"

@ -0,0 +1,18 @@
NNCB
CH -> B
HH -> N
CB -> H
NH -> C
HB -> C
HC -> B
HN -> C
NN -> C
BH -> H
NC -> B
NB -> B
BN -> B
BB -> N
BC -> B
CC -> N
CN -> C

@ -0,0 +1,102 @@
PHOSBSKBBBFSPPPCCCHN
KO -> H
OK -> P
BO -> C
SH -> V
PC -> F
NK -> N
PH -> K
VH -> S
NN -> S
VC -> P
OF -> O
HH -> S
VP -> K
KP -> O
NP -> F
SS -> V
HP -> S
PS -> F
BV -> P
KS -> H
SO -> H
NF -> N
CO -> V
HK -> F
OO -> N
KN -> F
SP -> V
OP -> S
OV -> V
HO -> V
PK -> N
FF -> N
CV -> S
PP -> B
CF -> P
HF -> B
BN -> C
FH -> S
ON -> K
SN -> N
CP -> N
OB -> O
HC -> F
KH -> P
OS -> S
NS -> C
BK -> H
PB -> P
SV -> F
FV -> C
BC -> K
HS -> N
PF -> V
NC -> N
CH -> H
VF -> H
KK -> B
OH -> K
HB -> C
SC -> B
VK -> C
FP -> C
SK -> N
VO -> K
FB -> S
KB -> N
BS -> S
VS -> C
CN -> K
KF -> F
NB -> O
BB -> C
CS -> C
FC -> K
NO -> B
SB -> C
CB -> N
BP -> S
NV -> H
NH -> N
PV -> K
PO -> C
VB -> O
FK -> P
HV -> O
KC -> S
VV -> O
VN -> H
BH -> K
FS -> O
KV -> K
HN -> P
OC -> B
SF -> V
CC -> F
CK -> P
FO -> C
PN -> K
BF -> C
FN -> O

@ -0,0 +1,109 @@
include("../../AoC2021.jl")
##
function parsefile(file)
start = readline(file)
readline(file)
mapples = eachline(file) .|>
(x -> split(x, " -> ")) .|>
(x -> (x[1], x[2]))
mapping = Dict(x => y for (x, y) mapples)
(start, mapping)
end
function hist(string::String)
h = Dict()
for char collect(string)
h[char] = get(h, char, 0) + 1
end
h
end
##
function task0(file)
(poly, mapping) = parsefile(file)
# display(poly)
for _ = 1:10
newpoly = ""
for i 1:(length(poly)-1)
pair = poly[i:(i+1)]
newpair = join([pair[1], mapping[pair]])
newpoly *= newpair
end
newpoly *= poly[end]
# display(newpoly)
poly = newpoly
end
h = hist(poly)
return maximum(values(h)) - minimum(values(h))
end
##
verify(14, 1, 0, 1588)
verify(14, 1, 1, 2874)
##
function hist(pairs::Dict)
h = Dict()
for pair keys(pairs)
# for char ∈ collect(pair)
h[pair[1]] = get(h, pair[1], 0) + pairs[pair]
# end
end
h
end
##
function task1(file)
(poly, mapping) = parsefile(file)
# display(poly)
pairs = Dict()
for i 1:(length(poly)-1)
pair = poly[i:(i+1)]
pairs[pair] = get(pairs, pair, 0) + 1
end
for _ = 1:40
newpairs = Dict()
for pair keys(pairs)
lpair = join([pair[1], mapping[pair]])
rpair = join([mapping[pair], pair[2]])
newpairs[lpair] = get(newpairs, lpair, 0) + pairs[pair]
newpairs[rpair] = get(newpairs, rpair, 0) + pairs[pair]
end
pairs = newpairs
end
h = hist(pairs)
h[poly[end]] += 1
return maximum(values(h)) - minimum(values(h))
end
##
verify(14, 2, 0, 2188189693529)
verify(14, 2, 1, 5208377027195)

@ -0,0 +1,7 @@
name = "day15"
uuid = "64299dba-311b-4a34-be75-de1458cc66c6"
authors = ["HeNine "]
version = "0.1.0"
[deps]
DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"

@ -0,0 +1,10 @@
1163751742
1381373672
2136511328
3694931569
7463417111
1319128137
1359912421
3125421639
1293138521
2311944581

@ -0,0 +1,100 @@
7972981688791317719199958278997414998179291159137739671791196521896458715667859893489494984749526918
9532858629894993869576297994641994933688189976199278681919954768569994891767999646466898737767561868
6991814593381551676989159939876168525786213469248388949163238697116799929291989716834954479558899298
7929171758998986654981999998999778979181893699729659774798983562969998888924568849786711788119677938
9114998519799653895637268338556759817893676954789349888867927892799523994937329958884998792992177121
9883197979858373547134449157856122868499673939817889671971982934399773978957711881521677738989969929
9998583883249861869899965649292883934818919167778113761343256691829279199335517987868992671938581596
9957693486912954985937679939964997729991426989979938888181871294426999896947911959897399792824324968
9179476898336757796864987729359977297555898655592864936587166992948189595131397971429299991684879739
7458757822282746834651787269785993198988839516534748934656297681959918246759599198867941999679891575
2926126985212525396261885774917929888969798911759799699276359317182941116868378997911893447693895936
8957989687383928743996595914298491789135118646698693613885897918891994979936755954658198795919127994
4499565268822787118967959595385698483899895444597594751114717855445238139869796949492497894962129155
8969858684877183888898327776961718645196159794618825918139992786619692899879255293849882171979997695
9957756384961559693279977943488986889925615995899789948568769995184179157928799571919219865692881999
6711539712387789965399753712988789658259593995936924996995297547549386816699356991612997918478769959
1719739798295187383968731267955996783568446485962966459839538797894961523386933531991786599159787296
6927972864823469717889989894869847819377186461791182679962889148599945991571618993867169578949989698
1297492936164454854752179569725888267677944165513971988788985397786776157868937392993586959319497716
5194771477263948568796992849985111255692947858764796959928549946337478699988929979989991869883895797
4621545186379993189767797479895196991896822691974976949569663815799623758987916379298168488727798779
6215673966986751228989973999945995835981992187614677919411896499998473698216999999364488591239192469
8828453287969548128682899894999927499596686183688853591761222892859285946735978556916171276578119794
8524999986799224328699699196199971484258499897944563847817999219579898387118973254982682893896647931
8839918962959284572279224499894318439995177959999787791827819959977996894684716679971599495287848458
1978749158572535255916894979155517886992833896119812289957427294113996336817282791199996995968619494
1992689543619929886346969617959329911829196587866989763799999199897694966679825917769975868916747395
1993176289758271797415749419899196791994315969585191636917137289142878493699614619329777997789182979
7482191158998159799958288964857297879899522953787196999359493894395515881915997244276225559568251929
6912987965483892992569269844298129527993566744794773189826844982297997473419915118859327977166199897
8869989399549548581285852962699471827159639773592723998619693768991989778392591952882499539711981859
2686989839995855216873113268979976972987988734891998597847778119946894387914933662972429819599397896
4847798797955545829488162338854591813749399998933689994879844289784992773997996993567899795999779598
7159229988158572725497789848788289197879868981869699886797953928998192946929759298498669691799281946
1762789976291599472518687864897792635953515477886937171849699913872349774739594475599313549172278999
9486193639979594791731697698793998988799952698489119999998779394949247811312998689994197829968177926
5988572979219984936289998844666342759719649996952255728649331179949299894993595411968379956917896377
8162853899892899399993999978914725972286976517242229885881926997296966996948676967399326798886441411
9145975999457566997918819916976423829587283646989921998228926587862471499369674798189934879872189641
7959998473864692897976899669576959463591166993846698467419728672696829899299958782494714736878938713
6635128424989289996339791939787878968794299867585889898834919589784969189179478719799999228279639499
9311883882881825449893731699759842445737885779861563789793145867974539689877769792816959748595397783
9189228119199394126899992681387197989715856193468645317617789597787598795595845967839773811367166675
4883811597729149316199848136288949954885869929993288968768873476649693878818268393929796954886553886
7756999996839989983992952378888711895249483559537447886939854911919792215997492987361587499919938898
1695828739926926197447851569319942989117987459376589875159941699729731219578992895885518793586368316
7942575619285675799499248272931828998222699898998379848683959982733817797192259789849189448277278426
7775918498596913918819983117941688791377598469192179446943971789986689991958888919738973939236954483
7791538199936862397498389193937579148169937938884967387996688879988498373152542785993954985148976189
9587593774921949879479627995316992987796679969785199813929968973579299887788529767287599898881958489
8754991976679864828996956981898849969897916698599952987937611458445846376939797974993754799995788993
9983635799768957949616678967369471489333587926182943864724989979996967557878118376968879968338119712
6461793458142379117459697975919896139373988759458881758938247787667987397869845312937946991572991895
7277886939311752817966284848862936612934139633917719949837993493995497959526616318991627947799748518
1399999988831693489136994544449218517872188878811777982327992916192697985178956717578527948815594419
9256727391869549969792689792359974354156916961958886893989992899786891299498956571796181999266819326
6999899992691966892997844225527938573878979798588989979339979498778296791685716665891987784686999121
4756926866836866616988289379858589557718875132895697619817964175991329719729487986976998481677217893
8239988955988569639922779178697485969397859799928268956747739951529499871991697938264198892196281611
9155125999218875761486541796428998149927659989158599973239432769111453786769998896775842937668385325
4125426918979348896889726519999668484699587853938998956699769977719842798539986956718324981569692923
5499267869798712889949792499989891682331771992857948867849949913669989398889691959751979968615217989
7839797389938895595797997791454859875939157968938951699563177639773739689174897998813561698999681821
2935799995925419647189799128842196239899446792975263999177791169979399717673558796173878189249899984
1686178738586743559939446979997218281187328913844935398189895914554994585131899988996818433749626784
4939811594579171229558857429769918686638388897681788996199972292378966699787541714179997928794392749
8697887148958672432827198465966879919845512587682619819579696138389782988677839979996645992828853699
5982395749968931948657258887779198588638298684988821459748598989896281719619582957799551967913391635
4797198895795999972213958697191965912451755995597998456915651189149895994519919815892277299791289897
8896945717456289696872791633691978498892169647799398991976919848893952921678758151888759888367185699
1177357719411625793479496935989999837519898867915886769229781695749798768974235662727693991767996562
1398939999597319119155958249574347816538428952941957818454486749985469188999497883949971199287973727
7999584844692654817729491996867385147295965144986197298498339985673499699872736959549252931929785773
9598389163779276167512273899889915977889969867859139895519174869127189976928985883799757679938719889
8995999215667998859647895169798496928848588889788622983225999899196865769851414575481599588478977692
9486489563589695749184659999773329399168668917894178981919769999696948677761688119154937979697436967
8886966777199629396986687284862835948855138187719191992933277891162516263965627628399124769611717817
6888583495998624899789888939869753379626884968266128588993938268442396727878958678169519895885993798
3768499479388988474846972615896978628819971989994567985619995673964789167695378811691898959848565659
8299533791997817939113818549299818959394984993899199276999958919187975272999979958426698519234889138
4888469478988631349828519856996739898365379949512175979964859833989989126896136238796997889732999165
9856959118788747794681917957843589151997228919728135658625376926894519815689981999498988918863429482
5178896819595272968889696827781239944897495688792978748749137877628959191628952177945918559224871275
9518481797329898999997969924898951989619215999287611821811871588916798867297653189198271869599644986
8591629687552878388667111775994629577989442893749699991196966567438899545464739599927619874991865347
5479886669281929987981341689379681789181549186956488898867979999938979591997918959726818999934168697
8799994325191781992128487195168469514469894938459754867657197798819655999173917388967918969918816849
9165249883488854389172791186998976468789984819579891691812923199686499468926579787947657697783821888
8189397499192919871499953288749191698978978159878998984957115546243984599154456759754811944573729678
6798155886834398499853988121399548898841934699817967841944971791687698599888688968521369189916499913
9169699289686488891291979968869593187741955246629644799995488792569958755997666697925154798853115939
9995981797817685268998992859991879922459239449597189898719599959128399571895598771772472495195696663
7984983981139977286176399311798679389677399261487889599885286799499929849662756992591912674289388858
9169492491989753181936932519719184685938965911913363788777476173499945999256859987955639676488414779
1624746996898125989973699999798168939911759891698899911919123897319784286359819273497944987847219738
4627969389899256989991177556667768779281199291393613184916928795417671319998669978798296195198999988
9111674498599738119679991743599699899952948788778995547956769398992937819498893679986199685886791686
7299289185683873975716787789399959411967812247999496269159827657839991799199597567982585798364477889
9969769988864956956695789272676987869979978689199281894466598789993968997695258419878889317893549999
9719793994268511977579876978967922859186998976111971264297823188565997199715889244194987485994343489

@ -0,0 +1,70 @@
include("../../AoC2021.jl")
using DataStructures
##
function parsefile(file)
(eachline(file) .|> Base.Fix2(split, "") .|>
(x -> parse.(Int, x)) .|>
permutedims) |> x -> vcat(x...)
end
function A★cost(mappe)
mappesize = size(mappe)
mappeopt = fill(typemax(Int), mappesize)
mappeopt[1, 1] = 0
q = PriorityQueue()
enqueue!(q, CartesianIndex(1, 1), sum(mappesize) - 2)
while length(q) > 0
(pos, costh) = dequeue_pair!(q)
cost = costh - ((mappesize[1] - pos[1]) + (mappesize[2] - pos[2]))
if pos == CartesianIndex(mappesize)
return cost
end
for (x, y) [(-1, 0), (1, 0), (0, 1), (0, -1)]
if checkbounds(Bool, mappe, pos + CartesianIndex(y, x))
if cost + mappe[pos+CartesianIndex(y, x)] < mappeopt[pos+CartesianIndex(y, x)]
mappeopt[pos+CartesianIndex(y, x)] = cost + mappe[pos+CartesianIndex(y, x)]
q[pos+CartesianIndex(y, x)] = cost +
mappe[pos+CartesianIndex(y, x)] +
(mappesize[1] - (pos[1] + y)) + (mappesize[2] - (pos[2] + x))
end
end
end
end
end
##
function task0(file)
mappe = parsefile(file)
A★cost(mappe)
end
##
verify(15, 1, 0, 40)
verify(15, 1, 1, 769)
##
function task1(file)
mappe = parsefile(file)
newmappe = kron(ones(5, 5), mappe) .+ kron(collect(0:4)' .+ collect(0:4), ones(size(mappe)))
newmappe = (convert.(Int, newmappe) .- 1) .% 9 .+ 1
A★cost(newmappe)
end
##
verify(15, 2, 0, 315)
verify(15, 2, 1, 2963)
Loading…
Cancel
Save