aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkshay <[email protected]>2020-12-12 06:10:35 +0000
committerAkshay <[email protected]>2020-12-12 06:10:35 +0000
commit15e54117f32d225f6a89320c0d80f45e55cc43bd (patch)
tree641569ae5b85bf7e6d6bf32beee217361ae7ecf0
parent42523f2455fb30181efc29e3a47799283b05fa80 (diff)
add initial day12 solution
-rw-r--r--aoc.cabal6
-rw-r--r--execs/Day12.hs39
-rw-r--r--input/04sample26
-rw-r--r--input/11sample10
-rw-r--r--input/11sample29
-rw-r--r--input/12755
6 files changed, 800 insertions, 45 deletions
diff --git a/aoc.cabal b/aoc.cabal
index cd5d039..dfd102e 100644
--- a/aoc.cabal
+++ b/aoc.cabal
@@ -87,3 +87,9 @@ executable Day11
87 build-depends: base, aoc, containers 87 build-depends: base, aoc, containers
88 default-language: Haskell2010 88 default-language: Haskell2010
89 hs-source-dirs: execs 89 hs-source-dirs: execs
90
91executable Day12
92 main-is: Day12.hs
93 build-depends: base, aoc, containers
94 default-language: Haskell2010
95 hs-source-dirs: execs
diff --git a/execs/Day12.hs b/execs/Day12.hs
new file mode 100644
index 0000000..72e0124
--- /dev/null
+++ b/execs/Day12.hs
@@ -0,0 +1,39 @@
1module Main where
2
3parseLine s = (head s, read (tail s) :: Float)
4
5moves ls = sum $ map (round . abs) [fx, fy]
6 where (fx, fy, _) = foldl fn (0.0, 0.0, 0.0) ls
7 fn (x, y, rot) ('N', v) = (x, y + v, rot)
8 fn (x, y, rot) ('E', v) = (x + v, y, rot)
9 fn (x, y, rot) ('W', v) = (x - v, y, rot)
10 fn (x, y, rot) ('S', v) = (x, y - v, rot)
11 fn (x, y, rot) ('R', v) = (x, y, rot - v)
12 fn (x, y, rot) ('L', v) = (x, y, rot + v)
13 fn (x, y, rot) ('F', v) = (nx, ny, rot)
14 where nx = x + v * cos (pi * rot / 180)
15 ny = y + v*sin (pi * rot / 180)
16
17rotate (x, y) t = (nx, ny)
18 where nx = x*cos(pi*t/180) - y*sin(pi*t/180)
19 ny = x*sin(pi*t/180) + y*cos(pi*t/180)
20
21waypoint (sx, sy) ls = sum $ map (round . abs) [fx, fy]
22 where (fx, fy, _, _) = foldl fn (0.0, 0.0, sx, sy) ls
23 fn (x, y, wx, wy) ('N', v) = (x, y, wx, wy+v)
24 fn (x, y, wx, wy) ('E', v) = (x, y, wx+v, wy)
25 fn (x, y, wx, wy) ('W', v) = (x, y, wx-v, wy)
26 fn (x, y, wx, wy) ('S', v) = (x, y, wx, wy-v)
27 fn (x, y, wx, wy) ('R', v) = (x, y, nwx, nwy)
28 where p = negate v
29 (nwx, nwy) = rotate (wx, wy) p
30 fn (x, y, wx, wy) ('L', v) = (x, y, nwx, nwy)
31 where (nwx, nwy) = rotate (wx, wy) v
32 fn (x, y, wx, wy) ('F', v) = (x+v*wx, y+v*wy, wx, wy)
33
34
35main :: IO ()
36main = do
37 n <- map parseLine . lines <$> readFile "input/12"
38 print $ moves n
39 print $ waypoint (10.0, 1.0) n
diff --git a/input/04sample b/input/04sample
deleted file mode 100644
index 81712b3..0000000
--- a/input/04sample
+++ /dev/null
@@ -1,26 +0,0 @@
1eyr:1972 cid:100
2hcl:#18171d ecl:amb hgt:170 pid:186cm iyr:2018 byr:1926
3
4iyr:2019
5hcl:#602927 eyr:1967 hgt:170cm
6ecl:grn pid:012533040 byr:1946
7
8hcl:dab227 iyr:2012
9ecl:brn hgt:182cm pid:021572410 eyr:2020 byr:1992 cid:277
10
11hgt:59cm ecl:zzz
12eyr:2038 hcl:74454a iyr:2023
13pid:3556412378 byr:2007
14
15pid:087499704 hgt:74in ecl:grn iyr:2012 eyr:2030 byr:1980
16hcl:#623a2f
17
18eyr:2029 ecl:blu cid:129 byr:1989
19iyr:2014 pid:896056539 hcl:#a97842 hgt:165cm
20
21hcl:#888785
22hgt:164cm byr:2001 iyr:2015 cid:88
23pid:545766238 ecl:hzl
24eyr:2022
25
26iyr:2010 hgt:158cm hcl:#b6652a ecl:blu byr:1944 eyr:2021 pid:093154719
diff --git a/input/11sample b/input/11sample
deleted file mode 100644
index 1beaede..0000000
--- a/input/11sample
+++ /dev/null
@@ -1,10 +0,0 @@
1L.LL.LL.LL
2LLLLLLL.LL
3L.L.L..L..
4LLLL.LL.LL
5L.LL.LL.LL
6L.LLLLL.LL
7..L.L.....
8LLLLLLLLLL
9L.LLLLLL.L
10L.LLLLL.LL
diff --git a/input/11sample2 b/input/11sample2
deleted file mode 100644
index a486e35..0000000
--- a/input/11sample2
+++ /dev/null
@@ -1,9 +0,0 @@
1.......#.
2...#.....
3.#.......
4.........
5..#L....#
6....#....
7.........
8#........
9...#.....
diff --git a/input/12 b/input/12
new file mode 100644
index 0000000..d7bc269
--- /dev/null
+++ b/input/12
@@ -0,0 +1,755 @@
1F93
2R90
3F81
4E3
5F80
6R90
7W4
8R90
9F64
10N1
11R90
12W4
13F11
14W1
15L180
16F28
17R90
18W4
19L180
20F95
21N3
22F71
23L90
24W1
25F1
26E2
27L90
28F85
29W3
30L90
31F28
32E3
33N5
34F47
35S2
36R90
37N2
38L90
39W4
40L180
41W3
42F51
43F77
44L90
45W5
46N5
47W3
48S5
49W5
50R180
51N1
52W3
53S5
54F36
55W1
56F34
57N4
58F40
59E2
60S3
61R90
62W5
63S2
64N4
65R90
66S2
67L90
68N4
69L90
70S2
71E1
72F2
73N4
74F65
75N1
76F46
77R180
78F60
79N4
80F45
81R90
82S3
83L90
84F70
85W4
86L270
87N4
88F49
89E3
90F52
91R180
92F5
93E5
94R90
95F43
96L90
97S4
98F54
99N1
100F7
101S2
102F91
103S4
104N3
105E3
106S4
107L180
108F15
109S2
110F90
111W5
112S2
113F80
114N4
115L90
116R90
117N4
118E2
119R180
120E5
121F62
122L90
123N5
124F77
125N5
126F75
127E2
128L90
129S4
130F55
131E1
132N5
133F57
134R90
135F6
136L90
137N3
138E5
139L180
140N2
141L270
142N5
143F8
144E2
145F88
146E3
147N3
148E4
149R90
150N1
151W5
152R90
153N4
154E3
155S3
156R90
157N1
158E2
159F4
160N4
161R90
162N3
163W5
164L180
165E1
166F2
167N4
168W5
169F80
170S4
171F7
172L180
173F96
174L90
175F16
176L90
177E4
178F78
179W2
180R90
181S3
182F29
183W4
184R90
185E4
186F39
187N1
188F48
189E4
190L180
191E1
192R180
193E2
194R90
195N3
196R180
197W2
198N5
199W5
200E3
201F25
202E1
203L180
204N5
205F44
206L90
207N4
208W4
209L90
210F72
211L90
212S1
213E5
214N5
215R90
216N1
217W3
218S5
219R90
220W1
221F14
222L90
223W2
224R90
225W3
226F76
227S5
228W5
229F93
230W4
231R90
232F57
233E3
234R90
235S3
236W1
237R90
238S3
239F8
240R90
241N2
242F46
243W4
244S1
245L90
246E4
247W5
248L90
249W2
250F69
251N5
252W5
253F80
254N3
255E4
256L90
257E4
258F25
259S3
260R180
261F77
262R90
263W2
264F19
265E4
266L180
267W2
268F37
269S2
270F68
271L90
272E2
273F66
274S1
275R90
276F66
277E2
278L180
279F97
280N3
281W4
282F43
283S4
284R180
285N1
286R270
287E3
288N2
289N3
290F65
291L90
292S2
293L90
294N3
295L90
296S3
297F23
298L270
299W3
300S5
301E2
302R90
303S1
304F85
305N3
306R90
307W4
308F58
309E1
310L90
311N3
312L90
313E2
314S1
315F14
316E2
317N5
318W1
319N3
320E1
321L90
322E3
323F43
324E3
325N3
326F21
327E4
328F53
329E2
330L180
331E4
332F20
333E2
334N2
335E5
336L90
337N4
338W3
339N4
340S2
341L90
342W3
343F96
344L90
345S3
346R90
347N1
348E3
349S5
350L270
351F41
352N5
353W5
354S1
355W5
356R90
357F79
358W3
359L90
360E3
361F22
362N1
363L90
364E2
365L90
366R90
367F20
368L90
369W3
370R90
371W2
372L180
373W4
374F57
375R180
376N3
377L90
378F36
379L90
380E2
381R90
382N2
383E3
384N1
385W4
386W4
387N3
388E5
389F54
390R180
391F98
392W1
393R90
394F21
395S1
396L90
397S2
398L90
399S2
400F90
401E4
402S2
403R90
404N5
405F25
406N4
407W3
408N2
409F27
410S3
411E3
412N3
413F15
414L180
415S4
416F62
417W2
418L180
419E2
420N2
421L90
422R90
423F97
424R90
425S1
426R90
427E2
428F16
429W2
430E1
431F89
432W1
433L180
434S3
435W2
436S3
437E1
438F92
439F30
440N1
441E2
442S1
443F76
444E1
445S5
446W5
447F28
448W4
449L90
450F44
451E4
452N5
453F25
454R90
455F59
456S4
457F58
458S2
459F19
460W5
461S4
462E5
463N3
464F37
465E1
466L90
467F40
468E5
469F56
470S2
471W5
472F73
473N5
474F2
475L90
476F18
477E2
478N5
479L90
480F56
481R90
482F18
483W1
484S5
485E1
486N1
487L90
488W2
489E4
490N4
491E1
492W4
493N4
494L90
495N3
496R90
497W5
498S5
499F2
500R180
501F96
502R90
503W3
504F26
505L90
506S4
507E2
508F43
509S2
510R90
511F61
512W5
513F93
514R90
515F95
516L90
517E4
518R90
519N4
520F47
521R90
522W5
523L90
524F42
525L90
526W5
527F87
528R90
529N1
530N2
531E4
532F64
533S5
534L270
535F86
536S4
537W3
538S1
539L90
540F72
541R270
542W1
543F17
544S1
545E2
546R90
547W1
548N1
549F42
550N5
551L90
552F87
553F66
554L90
555N2
556W2
557L90
558S5
559F7
560R90
561N4
562L270
563F2
564W1
565N4
566F94
567W5
568R180
569S4
570F15
571E4
572F76
573N1
574E2
575F68
576S3
577F50
578R270
579E5
580F77
581R90
582S3
583E2
584N3
585S4
586F39
587S1
588E5
589S3
590L90
591E4
592S2
593W3
594F54
595R90
596F44
597L90
598W3
599F59
600R90
601N3
602F37
603E1
604F75
605R90
606F31
607W3
608F70
609S5
610L90
611E1
612F67
613W4
614L90
615S1
616W5
617S1
618S4
619W2
620E2
621S3
622R90
623S2
624E5
625L90
626F43
627R90
628E1
629S5
630F42
631L90
632W1
633N2
634E1
635L180
636S4
637W1
638L90
639F81
640E1
641R180
642N5
643R180
644N5
645L180
646F65
647R90
648F64
649W4
650S4
651R90
652F70
653E1
654S1
655F50
656E2
657S4
658E4
659N2
660S1
661R90
662E4
663R90
664F70
665R90
666N4
667F71
668R180
669F80
670S3
671L90
672N5
673L180
674F11
675N1
676R90
677W2
678N1
679R90
680W4
681R90
682F67
683W3
684R90
685W5
686L90
687E4
688F90
689L90
690N4
691L180
692F48
693R90
694W2
695F94
696R90
697N4
698L90
699W2
700F2
701L90
702W1
703E5
704S2
705W5
706S5
707E2
708N3
709W5
710N1
711F98
712S3
713W3
714L90
715S3
716W4
717R90
718W1
719F64
720N5
721R90
722S5
723W5
724F84
725S1
726E3
727L90
728S3
729E5
730F6
731N4
732W1
733R90
734E4
735F14
736N1
737R90
738F31
739L90
740F24
741F4
742N4
743F54
744S3
745R270
746F98
747E1
748L180
749F2
750E4
751F70
752W1
753R180
754N5
755F23