Skip to content

Commit 0589ba2

Browse files
committed
2021-16
1 parent a621d03 commit 0589ba2

File tree

8 files changed

+454
-106
lines changed

8 files changed

+454
-106
lines changed

Diff for: 2021/14/input

+102-100
Original file line numberDiff line numberDiff line change
@@ -1,100 +1,102 @@
1-
9165985876154699219988192797299938946759548993842382179897895847959995468789384779887969965834298757
2-
9998264799399739852669159899969915752881369928979589425659869512849898348591988899941938989958981368
3-
8899439372928798295981284899995498957198997822776999766989269673341115866632499916582179985999797178
4-
9421373314798816327241583824298987799745811978869899899899999689988933652499891999899718759652641398
5-
9949959989598519929632977671926983547787167773939739198988988851889519228348573848979828599971727943
6-
2989192448779756984992587956689999842746119939998567894718899918799954281648927282191699499764931166
7-
9536499426969676189784443598979559899499773119978188394689557995599331996979736693529419681251956996
8-
1751936936954979779895998917863998697858138691879749999727789764741997539275579593798975539798818972
9-
7274746616894977772987689459988988891794769772199789185982726479992789563994126143759648659653627929
10-
9768211178649269995923493912176968666679999859829913848396992289798892197419967914777851877899477278
11-
9548265381888989898295865115497574817515178999881998168798969539989897979118423366393898169329939816
12-
5346816194398971492996938739782725986596757996472498951666679779287752997484725936582558299359964812
13-
2169889968977588483272986596967998729999883958728879796999737989942928997399898577324799379798165679
14-
5756791285489939716695977945746649394898965799971791856215827997699758829299499895496993375817688889
15-
1189911823962199612255959754716953775367595418858921381973577497988994381699599376948136788285998274
16-
6979939299876267486998569159464199464965974658469723835541132825855912999935783995325776519991867869
17-
7829881839997878488734339898145124968389716637926975397882799631985728918519668146942356911683694975
18-
4973997156985297758563699888285794535932928974966978296562139199889893476728999942416259889912711471
19-
9534797994999788999759474799734844192166842694971197691854895641895188586895455192589986798997913693
20-
2819784988295365719599997589858664998979399989735399884134499895873389479651295996498866989999839974
21-
6129944129969453989699888866976269999128469799982997963676678293639494188967181417362922546475281598
22-
9716591619494494558731969871917781639763288288691962634219628479989988828962651246459129568974491171
23-
7894482759988943587818779691955666934841799931371572868778856815865991124376396974593984947897442991
24-
1858394839149329949299818139987736884848178995897668499996188998667699618978779495959989927996996397
25-
9917119977481935978699197129381282957978683881779735689583195993458959989897975199999285945815997999
26-
1699128644295779552889817864638995225998895287579281281998594696644213479297199692979781937997179875
27-
8289472999575769888986161678994171392789714988719932799199558696689379278929798887977551878788398787
28-
9175199787918919864185866129967892999898318993291829953849829788999738939999469848949591989149962712
29-
6199185639948988878676462732119197225882925435874993975768952939825978994996892549999699984912695356
30-
3396488583898545189449831859997919671368765298895692847986994925119921865818912189499168979958896494
31-
9938398336984195997576689194134985999635325783571526493894394589917988793989755746999698829649589393
32-
6985999497989855798918845568728129349777627978979362788359497952698956998292996918648692699694349887
33-
1983998898992942689898989791697792913121476987631657959299998868769559979688918876893688862439185197
34-
7357776772998794811999929459919571597899775797198394831478974157594549666253368399586349899987699999
35-
7959339994696971922632949191545959757987989979787788169979748972545188912811999284691666989915589771
36-
9759961834557989443271499976572889278289319995879484972649589489199519573998999779383692242897767588
37-
9179641759649515678926897874488858988897787895855979191899776967749898123692484838554413919817918963
38-
6839761379993114699928685489349481791394595895995488717149328139993956495742445794747189959976877649
39-
7719888678899926948979191678165949542927483596385943836398298659699148778343914768999898197267997991
40-
8769727958885176392169934146934172488871783986753744485932511888999799159194751538987186924419884479
41-
8991999992999929999897984599767977994699827768813861298818993288386943869782797583698682188885283399
42-
7618891897968939798498999399278379698962758659288163913969875574557443483997692961986999939899819481
43-
8879168556577788339549879912587944289995777798881688244889799389891799876819699576957557971877898128
44-
9291695492736749179768777989972456198819896897386591181956469899994155718299785968686938589318979479
45-
7795999789358882518386787487224292238877893956695912892699678996798249199324897986249725799479399977
46-
7157587585956489829119899759896997988918879818491999931184192141949199172799356679472486896195864474
47-
8369998998796539973399979987949986863639829688617494995142799799778639869918868177475771699198897648
48-
6597979998999646797717999135983617949772192975367951599248888799957499785994774771558359664883693989
49-
8494399497884369731998936499887638658943929616778716995355827188745777858983426799559721799739362629
50-
7988688889359569698815957687229757873596999199938929146584679599188685439814466838789683219554419476
51-
9247298485768968989794782295879689497761879956994316114992795924987262939579993889586584967699911179
52-
9585318399982677997578979671589977319169586337196999959189521499887711992343851295981988819951696391
53-
9688419987598317988779256198579659993398274893319912676925791429994831998147985462785322692958417991
54-
9162526572947889939619891135679859992512868978725888837198497899147199825914711544192984934699878858
55-
9997992172487298739215471619688889939819838188921969391991648949979166298795194179866892977317488668
56-
4342969513889787361777751972798659462495119377122327857968869995779944989446988786669168689799978198
57-
9991989792887933999782849992885388199539897175961949179928388186994694998865752811971681796835228899
58-
9689884899572994167989994913659819996941825788877898819911788969419991277989227389959829597962878797
59-
9919879157714445923163829999735888889724892834556637899899999974386932299127993655996239789769999544
60-
8158429263197997788393974998999939783878693949897825898975995959979986635699272784592895953298769979
61-
6933156399191389719992767671896649494989689977121886269912939799779176467784638649979932992778611947
62-
9937886748328953482685979758934658999819989845699372899934596991259755741819979779889881397565568579
63-
6628287411551868899648999511774894539834357749799788481594933187788979179772699757813897655969637759
64-
1681758889993977881987844998586378799289969999542735618971489988849699628668119898999679199493949189
65-
7756952966791755589777886975949697297729368719914568929921989979278297994486928996985666791996513546
66-
7959939142776881868999785876799728991368773296952962918971941199687791336941297836969992566198117899
67-
9919799591383641992451999795686291882995991159937526287799259396499782592953878378919512331399769295
68-
9979988697799299993248298599458499952548969526718987894849849961566959196296836979299696595499951269
69-
8989115299788834687596939899183482448889849883899881337161943668283395379982966119363885868799817686
70-
3917979748934696925996487991958936699899582264499928897937594999993391587881813378359971812919779972
71-
7798825938413749319999785941489868587674397449269738978317389938919984622199581498529938819682972471
72-
7749948181969657924978787838596695869966969369158962427829991499668977295896254897998989743989952389
73-
6398998955793159938819887788968371888968395499298999755899949268632898528951445886293997299392969779
74-
9539983773686993498991392899889572558299175987819981797981886747694169489893727157979378595839496298
75-
9599999287193787789729986389617989992374479972959749982818939999895692869845931449861767839389829149
76-
4889176836968695418797941267779399488818276299865898498649489796971967884999112828966259271689857259
77-
7139139187955994831738585298962698949981181887589699969919418116293969946431635243579918986885919619
78-
7935837589876972417397869798312741789988882795986987744696696629647813993997762979599189148298958581
79-
8791284382878199766798982957837371997961791491996313339915819373928948979938596612197699691473969914
80-
1372974376943738718696489825854989786382983999879965536283589995655483569334269859559761199879679291
81-
9719671746885959293824693968698399315424948599622489865269469961617669916732853892695261177787994496
82-
7849319899791243818799879975258532467699699999398269787199341236894749619399991856788917729181194197
83-
9148263323757681139949799197198549259446781912979561927929891898923997238737858757915394778591127667
84-
1945591989843987198391756487965892217958111951642219915715439797998675786222936815998966826782589594
85-
5254778838276178988551266998775337643868756772978159294191819424888551874271745598136847865594999289
86-
3998557499888479397893111869792537426834985941959185929798919875628859952429849886849639853349182496
87-
8958877677623879221669563361998988956937492798913659491897715599879989983979859984661929198589817564
88-
9989969281947994946512996153988898382127889834868897498898867797998892148557494839482788798269898496
89-
9779851919689459958899912662756981619298821434879339749956713988385759469959788279765789991925947918
90-
4196471827218751217999955385399979199189581896987488518319752529829892282899638773984698854832217793
91-
5968399569814182278918739959691249997958587277596698779311494824187981838837892479347738267879912541
92-
8659894118598996577145167494795592898597175979829589886499183913197276893979278479678988218798894991
93-
6649277899864442637895792699719172999998662937819979979769821897696686788719291967114346689819212978
94-
6699889979874997773889958977455779952988466968759738452847569993821963796198741514377779188577811889
95-
1173976886399735895884999486498511998399588328832288555979166889776686858695414825689877994898917949
96-
9629147139882191719857926675389957799296279989442991999622669639755767892922474778888299984452999898
97-
4391879947595258989144156986799899833458894496218777872997391217987623967998848296898891312888421579
98-
9362699299759899879589911968947655251988997896874791778876389919939496782959848979971163281597161779
99-
1652179878596567755189593919723287659886989991199789326995581692999815373488857495418291969165215199
100-
9788389477191759669998798979888832998683445278988415997594187969167388689899997659918914818788982937
1+
SNPVPFCPPKSBNSPSPSOF
2+
3+
CF -> N
4+
NK -> B
5+
SF -> B
6+
HV -> P
7+
FN -> S
8+
VV -> F
9+
FO -> F
10+
VN -> V
11+
PV -> P
12+
FF -> P
13+
ON -> S
14+
PB -> S
15+
PK -> P
16+
OO -> P
17+
SP -> F
18+
VF -> H
19+
OV -> C
20+
BN -> P
21+
OH -> H
22+
NC -> F
23+
BH -> N
24+
CS -> C
25+
BC -> N
26+
OF -> N
27+
SN -> B
28+
FP -> F
29+
FV -> K
30+
HP -> H
31+
VB -> P
32+
FH -> F
33+
HF -> P
34+
BB -> O
35+
HH -> S
36+
PC -> O
37+
PP -> B
38+
VS -> B
39+
HC -> H
40+
NS -> N
41+
KF -> S
42+
BO -> V
43+
NP -> S
44+
NF -> K
45+
BS -> O
46+
KK -> O
47+
VC -> V
48+
KP -> K
49+
CK -> P
50+
HN -> F
51+
KN -> H
52+
KH -> N
53+
SB -> S
54+
NO -> K
55+
HK -> H
56+
BF -> V
57+
SV -> B
58+
CV -> P
59+
CO -> P
60+
FC -> O
61+
CP -> H
62+
CC -> N
63+
CN -> P
64+
SK -> V
65+
SS -> V
66+
VH -> B
67+
OS -> N
68+
FB -> H
69+
NB -> N
70+
SC -> K
71+
NV -> H
72+
HO -> S
73+
SO -> P
74+
PH -> C
75+
VO -> O
76+
OB -> O
77+
FK -> S
78+
PN -> P
79+
VK -> O
80+
NH -> N
81+
OC -> B
82+
BP -> O
83+
PF -> F
84+
KB -> K
85+
KV -> B
86+
PO -> N
87+
NN -> K
88+
CH -> O
89+
KC -> P
90+
OP -> V
91+
VP -> F
92+
OK -> P
93+
FS -> K
94+
CB -> S
95+
HB -> N
96+
KS -> O
97+
BK -> C
98+
BV -> O
99+
SH -> H
100+
PS -> N
101+
HS -> K
102+
KO -> N

Diff for: 2021/14/main.go

+62-6
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,73 @@ package main
33
import (
44
"fmt"
55
u "github.com/vsliouniaev/aoc/util"
6+
"math"
7+
"strings"
68
)
79

810
func main() {
9-
fmt.Printf("Part 1: %d\n", part1(u.RelativeFile("input")))
10-
fmt.Printf("Part 1: %d\n", part2(u.RelativeFile("input")))
11+
fmt.Printf("Part 1: %d\n", part1(u.RelativeFile("input"))) // 3411
12+
fmt.Printf("Part 1: %d\n", part2(u.RelativeFile("input"))) // 7477815755570
1113
}
1214

13-
func part1(file string) int {
14-
return -1
15+
func polymerise(file string, iterations int) uint64 {
16+
template, rules := parseInput(file)
17+
letterCounts := map[rune]uint64{template[0]: 1}
18+
cur := make(map[string]uint64)
19+
for i := 1; i < len(template); i++ {
20+
k := string([]rune{template[i-1], template[i]})
21+
letterCounts[template[i]]++
22+
cur[k]++
23+
}
24+
25+
for i := 0; i < iterations; i++ {
26+
newMap := make(map[string]uint64)
27+
for k, v := range cur {
28+
n := rules[k]
29+
l := string([]rune{rune(k[0]), n})
30+
r := string([]rune{n, rune(k[1])})
31+
newMap[l] += v
32+
newMap[r] += v
33+
letterCounts[n] += v
34+
}
35+
cur = newMap
36+
}
37+
38+
min, max := uint64(math.MaxUint64), uint64(0)
39+
for _, v := range letterCounts {
40+
if v < min {
41+
min = v
42+
}
43+
if v > max {
44+
max = v
45+
}
46+
}
47+
48+
return max - min
49+
}
50+
51+
func part1(file string) uint64 {
52+
return polymerise(file, 10)
53+
}
54+
55+
func part2(file string) uint64 {
56+
return polymerise(file, 40)
1557
}
1658

17-
func part2(file string) int {
18-
return -1
59+
func parseInput(file string) ([]rune, map[string]rune) {
60+
var template []rune
61+
rules := make(map[string]rune)
62+
for _, line := range u.ReadLinesStrings(file) {
63+
if line == "" {
64+
continue
65+
}
66+
if strings.Contains(line, " -> ") {
67+
spl := strings.Split(line, " -> ")
68+
rules[spl[0]] = rune(spl[1][0])
69+
} else {
70+
template = []rune(line)
71+
}
72+
}
73+
74+
return template, rules
1975
}

Diff for: 2021/14/sample

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
NNCB
2+
3+
CH -> B
4+
HH -> N
5+
CB -> H
6+
NH -> C
7+
HB -> C
8+
HC -> B
9+
HN -> C
10+
NN -> C
11+
BH -> H
12+
NC -> B
13+
NB -> B
14+
BN -> B
15+
BB -> N
16+
BC -> B
17+
CC -> N
18+
CN -> C

Diff for: 2021/16/input

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
E0525D9802FA00B80021B13E2D4260004321DC648D729DD67B2412009966D76C0159ED274F6921402E9FD4AC1B0F652CD339D7B82240083C9A54E819802B369DC0082CF90CF9280081727DAF41E6A5C1B9B8E41A4F31A4EF67E2009834015986F9ABE41E7D6080213931CB004270DE5DD4C010E00D50401B8A708E3F80021F0BE0A43D9E460007E62ACEE7F9FB4491BC2260090A573A876B1BC4D679BA7A642401434937C911CD984910490CCFC27CC7EE686009CFC57EC0149CEFE4D135A0C200C0F401298BCF265377F79C279F540279ACCE5A820CB044B62299291C0198025401AA00021D1822BC5C100763A4698FB350E6184C00A9820200FAF00244998F67D59998F67D5A93ECB0D6E0164D709A47F5AEB6612D1B1AC788846008780252555097F51F263A1CA00C4D0946B92669EE47315060081206C96208B0B2610E7B389737F3E2006D66C1A1D4ABEC3E1003A3B0805D337C2F4FA5CD83CE7DA67A304E9BEEF32DCEF08A400020B1967FC2660084BC77BAC3F847B004E6CA26CA140095003900BAA3002140087003D40080022E8C00870039400E1002D400F10038C00D100218038F400B6100229500226699FEB9F9B098021A00800021507627C321006E24C5784B160C014A0054A64E64BB5459DE821803324093AEB3254600B4BF75C50D0046562F72B1793004667B6E78EFC0139FD534733409232D7742E402850803F1FA3143D00042226C4A8B800084C528FD1527E98D5EB45C6003FE7F7FCBA000A1E600FC5A8311F08010983F0BA0890021F1B61CC4620140EC010100762DC4C8720008641E89F0866259AF460C015D00564F71ED2935993A539C0F9AA6B0786008D80233514594F43CDD31F585005A25C3430047401194EA649E87E0CA801D320D2971C95CAA380393AF131F94F9E0499A775460

0 commit comments

Comments
 (0)