aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAn0nSaiko <porfeas12@gmail.com>2022-12-10 05:33:40 +0200
committerAn0nSaiko <porfeas12@gmail.com>2022-12-10 05:33:40 +0200
commit4c1772187aed3bebaa8a733ba4515a7c7b28d35a (patch)
tree14ff106e5e994ca3372a53764fc0020dc5f46e27
parentDay 7 (diff)
downloadaoc22-4c1772187aed3bebaa8a733ba4515a7c7b28d35a.tar.gz
aoc22-4c1772187aed3bebaa8a733ba4515a7c7b28d35a.zip
Day 8
-rw-r--r--day6/solution.nim5
-rw-r--r--day8/example.txt5
-rw-r--r--day8/input.txt99
-rw-r--r--day8/solution.nim85
-rw-r--r--day9/input.txt2000
-rw-r--r--day9/solution.nim0
6 files changed, 2191 insertions, 3 deletions
diff --git a/day6/solution.nim b/day6/solution.nim
index 9c16e36..ce3ccd0 100644
--- a/day6/solution.nim
+++ b/day6/solution.nim
@@ -1,11 +1,10 @@
1import std/strutils 1import std/strutils
2import std/sequtils 2import std/sequtils
3import std/enumerate
4import std/tables 3import std/tables
5 4
6proc solve(message: string, nUniq: int): int = 5proc solve(message: string, nUniq: int): int =
7 var cntUniq = initCountTable[char]() 6 var cntUniq = initCountTable[char]()
8 7
9 # init found 8 # init found
10 var uniq = 0 9 var uniq = 0
11 for c in message[0 ..< nUniq]: 10 for c in message[0 ..< nUniq]:
@@ -17,7 +16,7 @@ proc solve(message: string, nUniq: int): int =
17 message[0 ..< message.len()-nUniq], 16 message[0 ..< message.len()-nUniq],
18 message[nUniq ..< message.len()]) 17 message[nUniq ..< message.len()])
19 18
20 for i, pair in enumerate(pairs): 19 for i, pair in pairs:
21 if uniq == nUniq: 20 if uniq == nUniq:
22 return i+nUniq 21 return i+nUniq
23 22
diff --git a/day8/example.txt b/day8/example.txt
new file mode 100644
index 0000000..16d6fbd
--- /dev/null
+++ b/day8/example.txt
@@ -0,0 +1,5 @@
130373
225512
365332
433549
535390
diff --git a/day8/input.txt b/day8/input.txt
new file mode 100644
index 0000000..15fbc4e
--- /dev/null
+++ b/day8/input.txt
@@ -0,0 +1,99 @@
1200200221023111313131033314121142013103432145142351212334232423210101340410243413011333312111010010
2021002023301222221234134021422342024344555521535143232341414552024224120114233210330203002020100112
3120000123021210023111321143114331115334535223455511513445233523154411102203411040133312002213001021
4110211312303200204232110124204135453554533435152342542252215415141133330323032234114310011301232202
5112002122201001100330432244432552555524445123151222142521452233321152332132412434434431321322021220
6000131233030332102140440124221314455255431113413445553414144524134315351524134030112312012102102122
7011002120310213142402320144522121125454423123245535451115134412543215113433312403430132101003202030
8001221312201314442411333454131552331253553254425236334643151355314514413411344034432330410221101023
9133033302114012204213054544541124453214232545523665466356466451514332142121512400041213432211332332
10122103100320433433403313515121232352332442555253656542336644235234542522322522414400320014312110331
11220032121143103434234531224315451255225362634256634623342624242245654341134514413144333113211200033
12320112113344013332224131114231235263526556625325625352254643224563365551253353323542200003301120011
13130332114433413215333445212514445445656665256554333534422554442522234433415533124353022320300112030
14122220320003402342433443415465352622564252264442264334335624365224645544545412124352220434440211220
15012123032311134245212342233263346563632453535355553473445564362634252543555515242444423232000444220
16210332422344222154315435122245243633424643346345734336333746422324336263624544151122442021330341202
17122113144440445232235222443563362625543565533465377647363543377645634552632254214531354231413432430
18312340402310532324322313244522226622547366756445444754767335355365264622465662241215332253310001232
19203342203201331433144542522354633356376457563745333765735577477354743263423666625212251354244021004
20023132211325442531332565334564256663665357767653737436565453774766335532544656254552332354313323032
21104344140125552254523443534436547653753334746356364664565677777637444474643245425325454224440231203
22030303323422144551254256535247737377634445575474654433333453643564664344462332353234553115322142242
23043342223454513255464263333566337576377476354884845654658465735544446646436232534263314313142020101
24340311214411551345423466343646644336367654787858788857666654635337366537645634644263323112331404131
25040141315333331565455545334767475747755574585547567756844746644445646736447635456236413253453410130
26211021153443415666656253646443465373878486485664464485545486846643475567536535465634262415153200040
27434443334231526223353563373464374574547886487867474546748668788886554566336675234542522151345414431
28342100553111533623655466757467553555676668887764575574556755884875687334634675256256443425223423211
29421145141552463255552236436455476686566587654558577848647854485587448337355756554555544211113112433
30401034232152434624233754647737667758845867866675595798957488447876578774367337742646625521543244120
31201414142512656264345465456536564477766677986565767776589758477664747866666435364642236343442335143
32422042442525465325256445643735574646548578959977866889666586787677748745536646677524242544332243420
33101531424154626224664754337344565457557999965875599965977796778866568855445766577565632633451545144
34111515354125252635577747557658555488765757696767797558565755699985844788764347763523465333315513212
35222334234142233522754645544788567846579566995878775676667979868685866578655574543564453254615121150
36121552233464445256557546467767485865866888757989977669966767877786686475874646454752632664243132511
37412242332564644335747746348878865677677797755798669796798699855757865564547645373677564252625352445
38104135225262634344357677645645458796767865979969889676688676788669777674757634454746666526341145313
39021542323626266573437334685574765967759968767697666876767887775889896866845887736736426556541522241
40321245255565266675757675486554868969567677786789686889669988776968557656488476534636744443443445532
41424153123565322534465577464547665888797687899787966868666667897595997786576655333657432563645515114
42151513345354454444763668544475487669995769769878776696968966788666679588686556634737544644543232332
43315411214333624753546345646876778875556666766899787967667988799866697798768788653774352466325322155
44411515135354235576553778556478657685968679689776697889878966888788686556488744645555636235464132151
45521535123365535747465567756884789758877668899777979788877786896957896655744848765333672323354342345
46511122245466262643344764588545559786677866787999989789989769786875585659588677463454335226643415231
47234355522634365636744684556586586576767676868898988888987788888877768767654646777776645642226512141
48113123464223654555566666486667798785887896678897787899778677766996769787745467865757755656543512345
49513251343243554753654655574645569758987667887877878998789898989677659987488676836733553556554225344
50514313564242345475335768454478576556889868687997999987778988866675979779845785867656464634654245123
51114315542426623675675378664848688856798777688977789877988898769769667968885864643357435456442515251
52342223563236537773664686558445968779787887987788777777899877867865678669767686535536743642245412355
53125543254543547353647388564555887588899766978788778797797796898997787999888766547554567344424443422
54235522554554262346774664445787579599869688998989778778978989968998575857577865454747575353226552114
55222421136654623646474466478475666768686777899887878779887688896658596779765485853765563356364225314
56521231534444644737467764858748655998796879877877788879799986898965697856444748453437553352232525543
57451421316463534654736364878868555996777987969978898798976796968858967778666788533743354325346223354
58353521254635223475773456867765596786879787787769889887896999898885688596454456655466765442452131244
59112452332645434776643548885574558878789797669769989989886877966757566586444578445673434665652431423
60125112515242255354574555588568695879785886989867778677698879979576678878668587547744623644323213555
61222335123454333544773645644774469985799577787667779799699876685666756857858446357667422332624342332
62342124352633564466565447655564575889567797869876686996679999868665879886844677564455723264641334552
63211531121363532576364535865484865759689798698998996686966767965765789787447464533667726322444223531
64003112555432534436636776465475555776887557956877687879969697585659596546865447775565562326263355343
65433244413454525566563634447454784577659787856568996976596789778896764874668454673456462646455545115
66315114535444536635475346535567864558579958679557799758766667597987857466754537555645552424625323424
67041544243435426366744535764674465545875655656695956899997569789788477547755346553676234364525135211
68110125213453624243247556736654454474595787967599557857997699578855767558775435554762633446551353134
69230513132216566245267463366654684755868756978975659588575959655686655788733345435522656542222543322
70042134352115436525535436657767864645756586865777685969969787676584458468744346376522324323225232212
71113011555414226244554676353335845564485568555689599656977797776777868787473376444245355443123441231
72141222553351554636564756467565656675455484874698998587887767666457458846465776554544333612224555323
73410201213345143434422573347343756574748746464486554485756685477655667634334766422236535313341542224
74400013155121116452255553534765374544884448574876457458645878446585657476536357256436654223345343132
75142320132432156443246333547553474375466866456765867768748787675644755677446563663223424341524352200
76130310433221343524424456477364543647448885475465487864674454548867635637545422424333245424354220221
77104443025533452125362252625375463664447488646447874885476567646456653665465543643663511122334514003
78302020415314212533664642446555554345445458887778858887685645576353536647674424342553325334543032421
79241431045353353251642363462546445336355737566757557674865573447644353353564422462552323432524142311
80123213233322144323666345645436644754537635574357377674465747755476333656624223243445125521412332331
81012331042212144212425325652566536457633744775665435737646677453634637335562564643341411132411032042
82312330023343231454516256365325363757435647543374644573757667446466553456424326532235455225410011222
83330440423204155515131264636336326536353437335474474464535536754457526344465446535213522513202431334
84111010303340451214252454445262262654354536464545434674354557674362552463364322545323344220103312142
85011012340310414525221212256242445654336566374374366636534765356655652454533664444453134140113204011
86230024312112245355233251252646423364546365646735756334573543653656365434363633141223321213032042131
87031001023032240425233144214253446244556226622634747362226456645266342264223215113131540112130410110
88322123043034044225552242443355356433432465646225242242422346453346634325254325435535313321413201023
89022331002231110112224233354325624225342363424426633436565344545533465463152555421312331102120410200
90013020314334233240543141441351342432435423252532545655664253435662546145412112135314414140233322202
91023101011114024240134343343214355543453244325544366633232356362353335431215322232434231302030012200
92121203223241323132430512521115213312263253263242264335335446352453314333354413113210133333212120303
93102030123234100043232214342352345452215246465634534464364425653323345231332311444434220444330131120
94000331303323044244144032522114521112125142214553424464423124453113211413324230342333130021200000221
95121203123313224230334312325441234431451535345453515132125413445443323514321330302200100022013232311
96000221331111234212331404233225332533323225131525322111443344452254442544201223424140243032213101301
97010202021330012103042021024434411545123253214353525251521434235541535344240243403200122322133122101
98121102231211003113342040440404003344542241345133131133414435235243325441120032344431223311313111221
99011210032333020312123124101444102341443212553521355222414135533333310320012002223342012031112321112
diff --git a/day8/solution.nim b/day8/solution.nim
new file mode 100644
index 0000000..f2c4f23
--- /dev/null
+++ b/day8/solution.nim
@@ -0,0 +1,85 @@
1import std/strutils
2import std/strformat
3import std/sequtils
4import std/algorithm
5import std/sugar
6
7type
8 Tree = tuple
9 height: int
10 found: bool
11
12proc scanTree(tree: Tree, answer: var int, maxHeight: var int): Tree =
13 result = tree
14 if tree.height > maxHeight:
15 maxHeight = tree.height
16 if not tree.found:
17 answer += 1
18 result = (tree.height, true)
19
20proc calculate(row: var seq[Tree], reved = false): int =
21 var
22 answer = 0
23 maxHeight = -1
24 newRow: seq[Tree]
25
26 if reved:
27 newRow = row.reversed()
28 else:
29 newRow = row
30
31 for i, r in newRow:
32 newRow[i] = scanTree(r, answer, maxHeight)
33 row = newRow
34
35 return answer
36
37func part1(content: seq[string]): int =
38 var grid = map(
39 content,
40 (row) => zip(map(row, (c) => ord(c) - ord('0')), newSeq[bool](row.len()))
41 )
42 var answer = 0
43
44 for row in grid.mitems():
45 answer += calculate(row)
46 answer += calculate(row, true)
47
48 for i in 0 ..< grid.len():
49 var col = map(grid, (row) => row[i])
50 answer += calculate(col)
51 answer += calculate(col, true)
52
53 return answer
54
55func checkVisibility(line: seq[int], height: int): int =
56 result = 0
57 for h in line:
58 result += 1
59 if h >= height:
60 return result
61
62 return result
63
64proc part2(content: seq[string]): int =
65 let grid = map(content, (row) => map(row, (c) => ord(c) - ord('0')))
66 result = 0
67
68 for i, row in grid:
69 for j, h in row:
70 var col = map(grid, (row) => row[j])
71 var count =
72 checkVisibility(row[j+1 .. ^1], h) *
73 checkVisibility(row[0 .. j-1].reversed(), h) *
74 checkVisibility(col[i+1 .. ^1], h) *
75 checkVisibility(col[0 .. i-1].reversed(), h)
76
77 # echo fmt"{i}, {j} = {count}"
78 result = max(result, count)
79
80 return result
81
82let content = readFile("./input.txt").strip().splitLines()
83
84echo part1(content)
85echo part2(content)
diff --git a/day9/input.txt b/day9/input.txt
new file mode 100644
index 0000000..06c4a9b
--- /dev/null
+++ b/day9/input.txt
@@ -0,0 +1,2000 @@
1L 2
2R 2
3U 1
4R 2
5U 2
6D 2
7U 1
8L 1
9U 1
10L 1
11D 1
12U 1
13L 1
14R 1
15L 2
16D 2
17R 1
18L 2
19D 2
20L 2
21U 1
22D 2
23R 1
24D 1
25U 1
26D 1
27U 2
28L 1
29U 2
30R 1
31D 2
32L 1
33D 1
34U 1
35L 1
36R 1
37L 1
38U 2
39L 1
40U 1
41L 2
42R 2
43D 2
44U 2
45R 1
46U 1
47D 2
48L 1
49U 1
50D 2
51U 1
52L 2
53U 1
54D 2
55U 2
56L 1
57D 2
58L 1
59U 1
60D 1
61U 1
62D 2
63R 2
64U 1
65L 1
66R 2
67D 2
68R 1
69L 1
70R 1
71D 1
72U 1
73L 2
74U 1
75L 1
76R 1
77D 2
78U 1
79L 1
80D 2
81R 2
82D 1
83U 1
84R 2
85U 1
86D 1
87R 2
88D 1
89R 1
90U 2
91D 1
92L 2
93U 2
94R 1
95L 1
96R 2
97U 2
98L 2
99U 2
100D 1
101U 1
102D 2
103R 2
104U 2
105R 1
106D 1
107R 2
108U 2
109D 2
110U 1
111R 1
112U 2
113D 3
114R 1
115L 1
116D 3
117U 3
118L 3
119D 2
120U 3
121D 1
122R 2
123D 2
124L 1
125U 3
126R 1
127U 1
128R 3
129D 1
130L 3
131R 1
132U 1
133L 2
134D 2
135L 1
136U 2
137D 1
138L 2
139D 1
140U 1
141R 2
142D 2
143U 2
144D 1
145L 1
146R 2
147U 3
148D 3
149U 2
150L 1
151D 1
152U 2
153R 3
154U 1
155D 1
156U 3
157R 2
158U 3
159D 2
160U 1
161R 1
162U 2
163R 2
164U 1
165L 1
166U 3
167L 2
168R 1
169U 2
170D 3
171L 1
172U 3
173D 3
174U 3
175L 1
176D 2
177L 2
178R 2
179D 3
180R 3
181D 2
182R 2
183D 3
184U 3
185R 1
186D 3
187U 2
188R 3
189D 2
190R 3
191U 1
192R 2
193D 2
194U 3
195D 3
196R 1
197U 3
198D 1
199U 3
200D 3
201R 2
202U 2
203D 1
204R 3
205D 2
206U 3
207L 1
208R 3
209L 2
210U 1
211L 2
212U 1
213R 1
214U 2
215R 3
216D 2
217U 1
218L 3
219D 2
220L 2
221D 3
222R 1
223U 1
224R 1
225D 1
226L 3
227D 2
228L 3
229D 4
230R 2
231D 4
232L 1
233D 4
234U 2
235R 2
236U 3
237L 4
238D 1
239R 1
240L 4
241U 1
242D 3
243L 2
244R 3
245U 1
246R 2
247U 4
248D 1
249L 2
250R 2
251D 4
252L 2
253D 2
254R 1
255D 2
256L 1
257U 4
258L 3
259U 3
260R 4
261L 3
262U 2
263D 3
264U 2
265D 1
266L 2
267R 1
268L 1
269R 1
270D 3
271L 2
272D 3
273U 2
274L 2
275R 1
276L 2
277D 2
278R 1
279U 3
280D 2
281L 1
282D 2
283U 1
284L 1
285R 1
286D 3
287U 2
288L 4
289U 3
290R 4
291L 2
292D 4
293R 3
294D 4
295U 3
296R 3
297D 3
298R 1
299U 1
300D 2
301U 4
302D 4
303U 3
304D 1
305L 4
306R 2
307L 2
308U 3
309R 2
310D 1
311R 3
312D 1
313L 3
314R 2
315D 1
316L 3
317U 3
318R 4
319U 1
320L 2
321D 3
322R 2
323U 2
324D 4
325U 4
326D 4
327R 3
328D 1
329U 4
330D 3
331R 4
332U 1
333D 2
334L 5
335R 3
336U 1
337L 1
338D 4
339R 3
340U 1
341R 3
342D 5
343R 5
344D 2
345U 2
346L 5
347R 2
348U 1
349L 4
350R 4
351U 3
352D 3
353U 1
354R 4
355U 4
356R 4
357U 3
358D 1
359L 1
360U 2
361R 3
362L 5
363R 3
364D 1
365R 2
366U 1
367L 2
368D 5
369L 2
370D 2
371U 4
372D 2
373R 3
374L 5
375U 4
376D 1
377L 3
378D 4
379L 1
380D 4
381R 2
382D 2
383R 3
384U 2
385D 1
386R 1
387D 4
388R 1
389D 5
390U 4
391D 4
392R 1
393U 2
394D 2
395L 2
396R 1
397L 1
398D 5
399R 4
400D 2
401U 3
402L 1
403U 3
404L 4
405D 5
406R 4
407U 3
408D 1
409U 4
410L 2
411D 5
412L 4
413R 4
414U 4
415L 3
416U 5
417L 1
418R 2
419L 1
420R 1
421L 4
422R 3
423D 3
424U 3
425L 3
426D 4
427R 1
428L 2
429D 4
430U 3
431L 5
432D 1
433L 2
434U 2
435R 2
436L 3
437R 4
438D 4
439U 3
440D 5
441L 3
442U 2
443L 2
444U 2
445R 4
446L 1
447R 6
448D 3
449R 6
450U 1
451L 3
452R 4
453U 3
454L 6
455R 1
456D 3
457R 4
458D 3
459L 1
460U 1
461D 3
462R 2
463L 4
464U 2
465L 2
466U 4
467D 3
468L 5
469D 4
470L 4
471R 2
472D 4
473L 2
474R 5
475U 3
476D 2
477L 1
478R 5
479D 1
480U 1
481R 6
482L 1
483U 4
484D 2
485R 4
486D 5
487R 3
488U 5
489D 1
490R 1
491D 1
492U 6
493R 3
494U 6
495L 3
496R 6
497D 1
498U 1
499D 4
500U 1
501R 1
502D 2
503U 5
504L 5
505U 1
506L 5
507R 5
508U 3
509R 5
510U 4
511L 4
512U 3
513D 5
514R 6
515L 1
516U 3
517R 6
518L 1
519U 6
520R 1
521L 1
522D 3
523L 5
524R 6
525U 2
526R 5
527U 5
528D 5
529R 3
530U 2
531L 6
532D 5
533L 4
534U 5
535D 3
536U 4
537R 3
538D 6
539U 4
540R 4
541U 5
542L 3
543U 5
544R 4
545L 4
546U 3
547L 1
548R 6
549L 4
550U 6
551D 1
552R 4
553U 4
554L 5
555U 3
556D 6
557L 3
558U 1
559L 3
560R 5
561L 5
562R 7
563D 3
564L 4
565R 7
566U 1
567D 2
568R 7
569U 6
570L 2
571D 7
572L 4
573U 4
574L 7
575D 4
576R 7
577D 1
578U 7
579R 4
580D 7
581U 4
582D 4
583R 3
584L 4
585U 3
586L 6
587D 4
588U 1
589R 1
590U 1
591L 7
592D 1
593U 3
594L 3
595R 5
596U 6
597R 5
598U 5
599L 1
600U 5
601R 7
602D 1
603L 6
604R 2
605L 5
606U 3
607D 2
608U 1
609L 2
610R 7
611U 3
612D 6
613U 3
614D 7
615U 2
616D 1
617U 5
618D 2
619L 2
620U 5
621R 1
622D 5
623U 6
624D 5
625U 5
626L 1
627R 7
628L 4
629U 3
630L 7
631R 2
632L 7
633R 5
634D 3
635L 5
636R 2
637U 6
638L 3
639D 6
640U 5
641L 1
642D 7
643U 3
644L 2
645U 7
646D 7
647R 2
648L 1
649U 7
650L 1
651U 3
652R 6
653D 6
654R 6
655D 7
656L 5
657D 4
658U 4
659D 5
660R 5
661D 2
662R 7
663L 4
664U 7
665R 2
666U 3
667L 2
668R 6
669U 8
670R 6
671D 6
672L 7
673D 6
674L 1
675D 4
676U 1
677D 8
678U 8
679L 5
680R 8
681D 1
682R 6
683U 5
684R 3
685L 4
686D 5
687L 2
688D 8
689U 3
690L 7
691U 4
692D 8
693R 6
694U 4
695L 7
696D 8
697L 3
698U 7
699R 1
700U 2
701R 5
702D 2
703R 2
704U 6
705D 1
706R 6
707L 8
708U 5
709R 7
710U 1
711R 5
712L 7
713D 4
714L 7
715U 8
716L 8
717R 4
718L 1
719D 6
720L 6
721U 7
722L 5
723D 1
724U 3
725R 8
726D 2
727R 3
728L 7
729U 5
730R 6
731L 2
732D 2
733R 5
734L 4
735D 1
736U 4
737L 4
738R 7
739U 6
740D 7
741R 1
742L 8
743D 3
744L 7
745U 3
746R 3
747U 1
748D 7
749R 7
750L 7
751U 7
752L 5
753D 1
754R 8
755U 3
756D 1
757U 6
758R 7
759D 6
760L 3
761D 5
762R 8
763L 1
764U 3
765R 2
766U 1
767R 2
768D 5
769R 4
770L 1
771D 4
772U 5
773R 8
774U 2
775L 4
776R 6
777D 1
778U 7
779D 8
780R 1
781L 1
782U 4
783L 2
784U 7
785D 2
786R 7
787D 9
788U 7
789L 1
790D 8
791R 3
792L 1
793R 3
794U 5
795L 5
796D 7
797U 3
798R 4
799U 5
800L 2
801R 2
802D 7
803R 2
804U 4
805L 9
806R 7
807U 6
808R 4
809U 8
810L 2
811R 7
812U 5
813L 6
814R 7
815U 7
816L 4
817D 2
818L 1
819D 4
820R 5
821U 2
822L 3
823R 9
824U 8
825D 5
826L 3
827U 1
828L 2
829D 5
830L 7
831D 7
832U 1
833L 2
834D 8
835R 9
836L 5
837D 8
838U 1
839L 7
840U 9
841R 1
842L 1
843D 3
844R 3
845U 6
846L 4
847R 6
848L 1
849R 6
850U 2
851R 9
852D 3
853R 6
854U 5
855R 9
856L 7
857D 6
858L 9
859D 8
860R 4
861L 3
862U 2
863R 7
864L 5
865D 7
866U 8
867R 5
868L 2
869D 8
870L 4
871R 3
872D 1
873U 3
874D 3
875U 3
876D 3
877R 2
878L 5
879R 9
880L 5
881U 9
882R 3
883D 9
884L 4
885U 3
886L 2
887R 1
888D 1
889R 6
890D 4
891L 6
892R 1
893D 8
894L 3
895R 2
896D 7
897U 2
898L 4
899R 10
900L 9
901R 4
902L 2
903U 10
904R 5
905D 4
906L 7
907U 5
908L 7
909U 7
910D 6
911U 7
912R 5
913L 5
914D 5
915R 10
916D 4
917L 3
918D 4
919U 8
920L 5
921U 5
922L 8
923R 3
924U 5
925D 6
926L 2
927R 1
928L 7
929U 8
930R 2
931L 5
932R 1
933D 2
934U 1
935L 1
936R 5
937U 6
938D 6
939R 2
940U 8
941L 1
942D 8
943L 5
944R 10
945U 7
946R 9
947D 4
948L 4
949U 6
950D 3
951R 3
952L 5
953R 3
954U 6
955R 10
956U 5
957L 6
958R 2
959D 9
960U 2
961D 4
962U 3
963D 2
964U 7
965L 1
966R 3
967L 10
968U 7
969R 7
970U 2
971R 5
972L 3
973D 4
974R 1
975D 3
976L 3
977R 6
978D 6
979R 3
980L 9
981R 3
982L 1
983D 8
984R 9
985U 2
986D 6
987U 2
988L 9
989U 8
990D 2
991L 1
992U 2
993D 10
994U 7
995R 8
996D 4
997L 7
998U 1
999D 1
1000U 1
1001L 5
1002D 5
1003L 10
1004R 9
1005U 5
1006L 8
1007D 2
1008R 2
1009L 8
1010D 8
1011L 11
1012U 5
1013L 11
1014D 9
1015L 10
1016U 1
1017D 9
1018R 5
1019U 4
1020D 2
1021R 3
1022L 7
1023D 7
1024L 9
1025R 3
1026L 3
1027U 7
1028R 1
1029U 4
1030R 7
1031D 10
1032L 8
1033U 2
1034L 6
1035R 1
1036U 10
1037D 3
1038U 2
1039L 4
1040D 5
1041R 6
1042L 7
1043R 8
1044L 4
1045U 1
1046D 11
1047U 5
1048R 4
1049L 9
1050R 8
1051L 2
1052R 4
1053U 10
1054D 4
1055R 7
1056D 3
1057U 6
1058D 6
1059U 3
1060L 11
1061R 4
1062D 6
1063U 9
1064R 10
1065D 8
1066U 3
1067R 2
1068U 7
1069D 5
1070R 10
1071U 5
1072R 3
1073U 9
1074L 2
1075D 3
1076U 1
1077L 10
1078U 2
1079L 3
1080U 10
1081L 6
1082D 4
1083L 1
1084D 1
1085U 3
1086L 10
1087R 6
1088L 1
1089U 2
1090R 1
1091L 9
1092D 4
1093L 11
1094U 6
1095D 3
1096L 9
1097U 7
1098D 3
1099U 3
1100R 8
1101U 11
1102R 2
1103D 1
1104U 3
1105R 2
1106L 7
1107D 5
1108R 10
1109U 1
1110D 10
1111L 1
1112U 10
1113D 11
1114U 5
1115R 6
1116D 6
1117R 10
1118L 9
1119D 3
1120U 4
1121L 12
1122D 7
1123R 9
1124U 4
1125D 10
1126L 11
1127U 1
1128R 3
1129U 6
1130L 11
1131U 10
1132R 3
1133U 4
1134L 9
1135U 4
1136L 12
1137U 4
1138D 2
1139L 12
1140D 12
1141L 5
1142U 9
1143R 7
1144D 12
1145L 2
1146U 3
1147R 7
1148D 9
1149L 2
1150R 9
1151D 10
1152U 6
1153R 10
1154D 8
1155R 8
1156L 9
1157U 11
1158R 5
1159D 7
1160U 3
1161R 7
1162U 10
1163R 5
1164D 4
1165U 3
1166D 6
1167R 11
1168U 9
1169L 3
1170D 5
1171R 6
1172L 11
1173D 5
1174R 2
1175D 2
1176R 8
1177D 1
1178U 5
1179L 3
1180U 8
1181L 10
1182D 7
1183R 12
1184D 7
1185L 8
1186D 5
1187U 9
1188D 10
1189L 4
1190R 6
1191L 9
1192R 10
1193L 11
1194U 8
1195D 8
1196R 2
1197L 5
1198U 9
1199R 1
1200L 12
1201D 6
1202R 11
1203L 4
1204R 6
1205U 12
1206D 5
1207U 4
1208L 7
1209D 2
1210R 5
1211U 5
1212D 7
1213R 10
1214L 9
1215U 4
1216D 11
1217U 12
1218D 6
1219U 4
1220L 3
1221U 4
1222R 11
1223D 7
1224L 11
1225R 9
1226U 2
1227R 7
1228D 5
1229U 13
1230L 10
1231U 9
1232L 9
1233U 4
1234D 8
1235R 7
1236L 8
1237U 3
1238L 1
1239U 6
1240D 11
1241U 11
1242D 12
1243L 13
1244U 13
1245R 8
1246D 4
1247U 6
1248D 3
1249U 9
1250R 11
1251D 6
1252R 9
1253D 1
1254U 8
1255D 9
1256R 2
1257U 3
1258R 13
1259D 7
1260U 6
1261D 10
1262U 13
1263D 4
1264U 1
1265R 10
1266D 9
1267U 8
1268D 7
1269U 7
1270L 13
1271R 10
1272L 8
1273D 7
1274U 9
1275R 8
1276L 8
1277U 3
1278D 5
1279L 1
1280U 5
1281D 9
1282R 2
1283D 8
1284L 7
1285U 2
1286R 11
1287U 9
1288D 7
1289L 2
1290D 9
1291R 8
1292L 12
1293R 4
1294D 7
1295U 2
1296L 8
1297U 12
1298D 11
1299R 9
1300U 9
1301R 13
1302U 3
1303L 9
1304U 9
1305R 5
1306U 10
1307R 13
1308U 6
1309D 4
1310U 2
1311R 7
1312D 3
1313R 1
1314L 4
1315R 9
1316L 3
1317D 6
1318L 9
1319R 6
1320D 1
1321L 6
1322D 5
1323U 10
1324R 2
1325L 1
1326R 1
1327L 1
1328U 9
1329D 5
1330U 2
1331D 12
1332L 9
1333U 1
1334L 14
1335U 9
1336L 11
1337R 11
1338L 3
1339D 5
1340U 5
1341D 8
1342L 9
1343U 12
1344R 11
1345L 1
1346D 9
1347R 9
1348L 7
1349D 7
1350U 4
1351D 5
1352L 11
1353D 9
1354R 13
1355D 3
1356R 9
1357D 6
1358U 12
1359L 2
1360D 10
1361L 6
1362U 12
1363R 2
1364D 9
1365R 2
1366D 12
1367R 14
1368U 3
1369R 3
1370D 12
1371R 13
1372U 1
1373D 11
1374L 1
1375D 9
1376U 11
1377R 9
1378D 10
1379L 7
1380D 13
1381R 10
1382D 2
1383U 7
1384L 7
1385R 14
1386D 10
1387R 9
1388D 13
1389L 7
1390U 5
1391R 4
1392D 4
1393R 3
1394U 8
1395D 8
1396R 4
1397U 14
1398R 8
1399U 12
1400D 6
1401L 11
1402D 12
1403U 13
1404L 13
1405U 8
1406L 2
1407R 7
1408U 1
1409L 14
1410R 1
1411D 1
1412L 9
1413U 1
1414R 8
1415U 7
1416D 13
1417U 1
1418D 5
1419L 8
1420R 13
1421L 1
1422U 14
1423L 11
1424D 7
1425R 7
1426L 8
1427U 8
1428D 9
1429U 14
1430L 1
1431U 7
1432D 7
1433L 12
1434D 7
1435L 4
1436U 14
1437R 2
1438D 3
1439U 9
1440L 9
1441D 13
1442U 9
1443D 5
1444U 11
1445D 6
1446U 10
1447L 10
1448R 8
1449D 11
1450L 3
1451R 6
1452D 10
1453R 11
1454L 3
1455D 15
1456R 6
1457D 12
1458U 4
1459R 5
1460L 15
1461D 9
1462L 5
1463U 12
1464R 2
1465D 14
1466U 10
1467L 1
1468U 14
1469L 5
1470D 12
1471U 11
1472D 6
1473L 12
1474R 2
1475D 9
1476L 15
1477D 6
1478L 3
1479U 6
1480L 8
1481R 6
1482L 11
1483U 12
1484L 2
1485R 12
1486U 15
1487D 15
1488U 1
1489L 4
1490R 3
1491D 9
1492U 9
1493D 2
1494U 2
1495R 6
1496U 1
1497L 4
1498R 5
1499L 8
1500R 2
1501U 6
1502D 13
1503R 12
1504L 13
1505D 3
1506L 9
1507U 5
1508R 5
1509D 3
1510R 8
1511L 7
1512R 12
1513L 11
1514U 9
1515L 4
1516D 9
1517U 13
1518R 15
1519D 13
1520U 12
1521R 1
1522L 14
1523R 5
1524L 8
1525U 6
1526D 5
1527U 6
1528D 7
1529U 14
1530D 4
1531R 6
1532L 7
1533U 4
1534L 12
1535D 7
1536U 11
1537L 3
1538R 4
1539U 4
1540L 9
1541U 10
1542R 9
1543D 15
1544R 9
1545D 6
1546L 4
1547U 2
1548L 5
1549R 9
1550L 8
1551R 2
1552D 5
1553U 8
1554D 11
1555L 10
1556R 1
1557U 10
1558L 10
1559U 8
1560L 8
1561R 16
1562U 9
1563D 5
1564L 8
1565D 3
1566L 5
1567R 3
1568U 7
1569R 9
1570U 3
1571D 5
1572U 11
1573R 5
1574L 7
1575D 3
1576R 15
1577U 8
1578R 12
1579U 1
1580D 1
1581R 12
1582L 15
1583D 5
1584R 5
1585U 12
1586R 11
1587L 7
1588U 13
1589L 9
1590R 14
1591U 13
1592D 15
1593R 15
1594D 9
1595U 3
1596L 15
1597D 15
1598U 8
1599L 2
1600U 4
1601D 5
1602L 10
1603R 5
1604D 15
1605U 15
1606L 11
1607U 7
1608L 3
1609D 6
1610L 9
1611D 9
1612U 11
1613L 9
1614U 2
1615R 14
1616L 13
1617U 8
1618D 13
1619R 5
1620U 5
1621L 5
1622U 15
1623D 8
1624U 15
1625R 3
1626U 12
1627L 3
1628D 9
1629U 12
1630D 10
1631R 6
1632L 16
1633D 14
1634L 10
1635R 11
1636U 9
1637R 3
1638U 15
1639L 10
1640U 14
1641L 1
1642D 13
1643R 4
1644U 8
1645R 10
1646D 2
1647U 1
1648L 2
1649D 9
1650R 10
1651L 15
1652D 7
1653R 5
1654D 12
1655L 1
1656R 8
1657D 14
1658U 4
1659D 11
1660R 12
1661L 3
1662D 6
1663U 6
1664D 12
1665L 15
1666U 4
1667L 3
1668R 10
1669L 9
1670D 5
1671R 17
1672U 12
1673R 2
1674L 2
1675D 15
1676U 4
1677R 4
1678L 17
1679R 8
1680U 12
1681R 1
1682L 3
1683D 1
1684R 7
1685L 13
1686U 14
1687D 1
1688U 5
1689L 2
1690R 5
1691L 9
1692U 6
1693D 5
1694R 14
1695U 11
1696D 7
1697L 10
1698D 10
1699L 17
1700R 2
1701U 9
1702D 7
1703L 15
1704R 8
1705D 16
1706L 15
1707D 8
1708L 4
1709U 4
1710D 5
1711R 4
1712D 15
1713L 8
1714D 11
1715L 5
1716U 5
1717D 4
1718R 14
1719U 16
1720R 8
1721L 2
1722R 16
1723L 5
1724U 15
1725D 13
1726L 5
1727U 5
1728D 6
1729R 1
1730L 4
1731R 4
1732U 6
1733D 11
1734L 8
1735R 9
1736U 8
1737R 10
1738U 1
1739L 13
1740R 10
1741L 8
1742D 11
1743U 9
1744L 7
1745U 5
1746L 15
1747D 5
1748R 3
1749D 16
1750L 2
1751U 12
1752R 15
1753U 9
1754L 13
1755U 15
1756L 4
1757U 3
1758R 3
1759L 13
1760D 5
1761U 16
1762R 5
1763D 5
1764U 9
1765L 7
1766U 10
1767D 1
1768R 2
1769U 14
1770L 13
1771U 1
1772L 12
1773U 10
1774D 3
1775U 1
1776R 14
1777D 14
1778U 16
1779R 6
1780U 14
1781D 5
1782L 18
1783D 18
1784U 8
1785L 2
1786R 5
1787D 17
1788U 18
1789R 2
1790L 10
1791D 6
1792R 17
1793L 10
1794U 1
1795R 8
1796L 14
1797U 10
1798R 7
1799L 16
1800U 9
1801D 13
1802U 2
1803L 1
1804D 14
1805U 15
1806R 15
1807D 2
1808R 13
1809D 3
1810R 9
1811D 18
1812R 16
1813L 1
1814R 3
1815U 1
1816R 1
1817U 16
1818D 17
1819U 1
1820D 11
1821R 11
1822D 1
1823U 5
1824R 1
1825L 1
1826R 10
1827D 5
1828R 1
1829D 15
1830R 14
1831L 5
1832U 12
1833L 8
1834R 6
1835D 8
1836L 5
1837D 11
1838L 14
1839D 5
1840R 15
1841L 16
1842R 12
1843L 10
1844D 8
1845L 3
1846R 1
1847D 10
1848U 13
1849D 7
1850U 10
1851L 13
1852D 8
1853R 7
1854L 13
1855R 4
1856L 9
1857U 6
1858D 14
1859L 16
1860D 18
1861R 13
1862U 13
1863L 17
1864R 5
1865U 9
1866R 11
1867D 18
1868R 16
1869L 4
1870D 8
1871R 18
1872L 14
1873R 11
1874D 14
1875R 2
1876D 6
1877L 12
1878D 3
1879U 3
1880L 4
1881D 7
1882L 4
1883D 6
1884L 12
1885D 9
1886L 2
1887R 16
1888L 12
1889U 4
1890L 12
1891U 4
1892R 17
1893L 8
1894U 8
1895R 11
1896U 14
1897D 15
1898L 19
1899R 1
1900L 16
1901R 3
1902U 15
1903R 5
1904L 1
1905D 17
1906L 13
1907U 14
1908D 9
1909U 3
1910L 7
1911R 11
1912D 7
1913R 15
1914L 6
1915U 17
1916R 17
1917D 17
1918U 18
1919L 1
1920R 8
1921L 7
1922D 9
1923L 5
1924D 1
1925R 2
1926D 16
1927U 18
1928D 7
1929U 13
1930L 10
1931U 15
1932R 18
1933U 7
1934L 9
1935R 6
1936U 18
1937R 9
1938D 8
1939L 6
1940R 7
1941L 11
1942U 12
1943R 7
1944D 4
1945U 8
1946R 16
1947U 17
1948D 4
1949U 10
1950L 19
1951D 14
1952L 12
1953R 18
1954D 4
1955R 9
1956U 12
1957R 14
1958U 9
1959L 16
1960D 14
1961U 7
1962R 14
1963L 19
1964U 16
1965L 18
1966U 1
1967R 19
1968D 7
1969R 6
1970U 12
1971L 16
1972R 16
1973U 16
1974L 6
1975R 18
1976L 19
1977U 10
1978D 15
1979U 7
1980D 1
1981U 7
1982L 12
1983U 4
1984R 5
1985U 12
1986R 18
1987D 15
1988U 4
1989L 8
1990U 18
1991D 18
1992L 3
1993R 19
1994L 15
1995R 11
1996U 1
1997R 6
1998L 8
1999R 1
2000L 3
diff --git a/day9/solution.nim b/day9/solution.nim
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/day9/solution.nim