]> fbox.kageds.com Git - adventofcode.git/blob - day2/day2.erl
minor fixes
[adventofcode.git] / day2 / day2.erl
1 -module(day2).
2
3 -export ([solve/0, solve/1, solve/2]).
4
5 solve() ->
6 solve(['1']),
7 solve(['2']),
8 init:stop().
9
10 solve(A) ->
11 solve(A, get_data()).
12
13 solve(['1'], D) ->
14 io:format("The solution to ~p puzzle1 is: ~p~n", [?MODULE, solve(1, D)]);
15 solve(1, D) ->
16 solution1(D);
17 solve(['2'], D) ->
18 io:format("The solution to ~p puzzle2 is: ~p~n", [?MODULE, solve(2, D)]);
19 solve(2, D) ->
20 solution2(D).
21
22 solution1(D) ->
23 {X, Y} =
24 lists:foldl(fun({Dir, Dis}, {X, Y}) ->
25 case Dir of
26 'up' -> {X, Y - Dis};
27 'down' -> {X, Y + Dis};
28 'forward' -> {X + Dis, Y}
29 end
30 end,
31 {0, 0},
32 D),
33 X * Y.
34
35 solution2(D) ->
36 {X, Y, _} =
37 lists:foldl(fun({Dir, Dis}, {X, Y, Aim}) ->
38 case Dir of
39 'up' -> {X, Y, Aim - Dis};
40 'down' -> {X, Y, Aim + Dis};
41 'forward' -> {X + Dis, Y + (Dis * Aim), Aim}
42 end
43 end,
44 {0,0,0},
45 D),
46 X * Y.
47
48 get_data() ->
49 [
50 {forward, 3},
51 {down, 4},
52 {forward, 3},
53 {up, 4},
54 {down, 4},
55 {down, 6},
56 {down, 3},
57 {down, 1},
58 {up, 7},
59 {down, 7},
60 {forward, 4},
61 {forward, 7},
62 {forward, 3},
63 {down, 2},
64 {forward, 5},
65 {down, 7},
66 {forward, 5},
67 {up, 9},
68 {down, 6},
69 {forward, 8},
70 {forward, 8},
71 {down, 8},
72 {forward, 7},
73 {down, 9},
74 {down, 4},
75 {down, 6},
76 {forward, 1},
77 {down, 2},
78 {down, 7},
79 {up, 4},
80 {forward, 8},
81 {down, 5},
82 {down, 7},
83 {down, 1},
84 {forward, 5},
85 {down, 1},
86 {up, 1},
87 {forward, 5},
88 {forward, 1},
89 {down, 1},
90 {forward, 3},
91 {up, 4},
92 {up, 4},
93 {up, 8},
94 {up, 1},
95 {forward, 7},
96 {down, 3},
97 {forward, 3},
98 {forward, 3},
99 {down, 3},
100 {down, 6},
101 {down, 7},
102 {forward, 4},
103 {down, 2},
104 {up, 3},
105 {forward, 5},
106 {forward, 1},
107 {down, 3},
108 {up, 3},
109 {up, 4},
110 {forward, 2},
111 {forward, 6},
112 {up, 1},
113 {down, 9},
114 {up, 3},
115 {forward, 5},
116 {forward, 2},
117 {up, 9},
118 {up, 2},
119 {down, 5},
120 {down, 5},
121 {forward, 7},
122 {forward, 1},
123 {down, 7},
124 {forward, 9},
125 {forward, 8},
126 {down, 7},
127 {forward, 5},
128 {forward, 4},
129 {down, 5},
130 {forward, 7},
131 {forward, 3},
132 {down, 2},
133 {forward, 2},
134 {forward, 2},
135 {down, 1},
136 {up, 8},
137 {down, 2},
138 {down, 2},
139 {forward, 6},
140 {up, 9},
141 {forward, 6},
142 {up, 6},
143 {forward, 5},
144 {forward, 5},
145 {down, 2},
146 {forward, 5},
147 {up, 5},
148 {forward, 5},
149 {up, 4},
150 {down, 1},
151 {up, 5},
152 {down, 2},
153 {forward, 3},
154 {down, 1},
155 {forward, 2},
156 {up, 4},
157 {down, 6},
158 {forward, 1},
159 {forward, 6},
160 {forward, 6},
161 {forward, 8},
162 {forward, 8},
163 {forward, 3},
164 {forward, 5},
165 {down, 8},
166 {up, 8},
167 {down, 6},
168 {down, 8},
169 {forward, 8},
170 {down, 6},
171 {forward, 4},
172 {down, 4},
173 {forward, 7},
174 {forward, 9},
175 {down, 6},
176 {up, 6},
177 {forward, 6},
178 {down, 9},
179 {up, 7},
180 {up, 9},
181 {down, 1},
182 {up, 5},
183 {forward, 2},
184 {forward, 3},
185 {up, 6},
186 {forward, 8},
187 {forward, 7},
188 {down, 4},
189 {up, 8},
190 {up, 2},
191 {down, 2},
192 {up, 3},
193 {down, 2},
194 {down, 8},
195 {forward, 9},
196 {up, 9},
197 {forward, 7},
198 {down, 9},
199 {forward, 4},
200 {forward, 3},
201 {forward, 2},
202 {down, 5},
203 {forward, 3},
204 {forward, 1},
205 {down, 2},
206 {forward, 3},
207 {down, 7},
208 {down, 8},
209 {forward, 9},
210 {down, 9},
211 {forward, 2},
212 {up, 5},
213 {up, 2},
214 {down, 8},
215 {down, 1},
216 {down, 7},
217 {forward, 6},
218 {down, 2},
219 {forward, 9},
220 {down, 6},
221 {down, 9},
222 {forward, 9},
223 {down, 2},
224 {up, 5},
225 {forward, 2},
226 {down, 7},
227 {down, 6},
228 {up, 1},
229 {forward, 9},
230 {up, 7},
231 {down, 1},
232 {forward, 5},
233 {down, 5},
234 {up, 2},
235 {forward, 6},
236 {forward, 2},
237 {up, 9},
238 {up, 7},
239 {down, 2},
240 {down, 1},
241 {forward, 6},
242 {down, 2},
243 {forward, 9},
244 {forward, 8},
245 {forward, 2},
246 {up, 1},
247 {down, 7},
248 {down, 7},
249 {forward, 5},
250 {forward, 9},
251 {down, 5},
252 {down, 5},
253 {down, 5},
254 {forward, 4},
255 {up, 4},
256 {down, 7},
257 {up, 6},
258 {forward, 3},
259 {up, 5},
260 {forward, 3},
261 {forward, 6},
262 {forward, 8},
263 {down, 6},
264 {forward, 4},
265 {forward, 5},
266 {up, 8},
267 {down, 9},
268 {down, 3},
269 {down, 8},
270 {forward, 8},
271 {forward, 1},
272 {down, 7},
273 {down, 2},
274 {forward, 8},
275 {forward, 7},
276 {up, 2},
277 {down, 9},
278 {forward, 2},
279 {down, 6},
280 {down, 7},
281 {up, 2},
282 {up, 7},
283 {down, 6},
284 {down, 8},
285 {down, 2},
286 {forward, 8},
287 {down, 6},
288 {up, 1},
289 {down, 6},
290 {down, 5},
291 {down, 8},
292 {down, 1},
293 {down, 4},
294 {down, 1},
295 {down, 8},
296 {up, 3},
297 {forward, 1},
298 {forward, 5},
299 {forward, 2},
300 {forward, 2},
301 {down, 5},
302 {down, 2},
303 {down, 8},
304 {up, 7},
305 {forward, 2},
306 {forward, 1},
307 {forward, 4},
308 {up, 4},
309 {down, 5},
310 {up, 4},
311 {down, 8},
312 {up, 5},
313 {down, 6},
314 {down, 8},
315 {down, 8},
316 {forward, 8},
317 {forward, 5},
318 {down, 1},
319 {down, 2},
320 {down, 4},
321 {forward, 5},
322 {up, 3},
323 {forward, 3},
324 {down, 7},
325 {forward, 9},
326 {down, 9},
327 {down, 5},
328 {forward, 5},
329 {down, 9},
330 {forward, 9},
331 {down, 5},
332 {up, 4},
333 {up, 9},
334 {forward, 1},
335 {forward, 6},
336 {forward, 9},
337 {forward, 2},
338 {up, 5},
339 {forward, 9},
340 {down, 8},
341 {up, 2},
342 {up, 9},
343 {forward, 1},
344 {down, 7},
345 {down, 4},
346 {down, 4},
347 {up, 3},
348 {forward, 6},
349 {down, 1},
350 {forward, 6},
351 {forward, 3},
352 {up, 3},
353 {forward, 1},
354 {down, 1},
355 {up, 8},
356 {up, 3},
357 {forward, 9},
358 {forward, 1},
359 {forward, 8},
360 {forward, 8},
361 {up, 7},
362 {forward, 2},
363 {forward, 9},
364 {down, 9},
365 {down, 2},
366 {down, 5},
367 {down, 1},
368 {forward, 9},
369 {forward, 9},
370 {up, 4},
371 {forward, 6},
372 {down, 3},
373 {forward, 2},
374 {forward, 5},
375 {up, 4},
376 {forward, 2},
377 {up, 1},
378 {up, 4},
379 {up, 3},
380 {up, 6},
381 {up, 6},
382 {down, 2},
383 {up, 7},
384 {down, 1},
385 {down, 3},
386 {forward, 3},
387 {up, 5},
388 {forward, 4},
389 {down, 5},
390 {forward, 9},
391 {down, 2},
392 {up, 5},
393 {forward, 9},
394 {down, 3},
395 {down, 5},
396 {forward, 3},
397 {forward, 7},
398 {forward, 9},
399 {up, 2},
400 {down, 6},
401 {up, 6},
402 {down, 8},
403 {forward, 8},
404 {down, 1},
405 {forward, 3},
406 {forward, 4},
407 {up, 6},
408 {up, 3},
409 {forward, 6},
410 {forward, 5},
411 {forward, 2},
412 {down, 7},
413 {down, 1},
414 {down, 5},
415 {forward, 6},
416 {down, 4},
417 {down, 2},
418 {forward, 7},
419 {up, 9},
420 {forward, 3},
421 {down, 2},
422 {up, 3},
423 {down, 3},
424 {down, 1},
425 {up, 5},
426 {down, 4},
427 {forward, 1},
428 {forward, 2},
429 {forward, 2},
430 {forward, 6},
431 {forward, 2},
432 {down, 2},
433 {down, 8},
434 {down, 1},
435 {down, 2},
436 {down, 7},
437 {up, 7},
438 {down, 7},
439 {forward, 7},
440 {forward, 7},
441 {down, 8},
442 {forward, 1},
443 {down, 7},
444 {down, 7},
445 {down, 8},
446 {up, 9},
447 {down, 4},
448 {up, 6},
449 {forward, 7},
450 {up, 2},
451 {down, 8},
452 {forward, 2},
453 {down, 8},
454 {forward, 4},
455 {down, 4},
456 {forward, 4},
457 {up, 1},
458 {down, 2},
459 {forward, 6},
460 {forward, 7},
461 {forward, 8},
462 {down, 2},
463 {forward, 5},
464 {forward, 1},
465 {up, 9},
466 {down, 8},
467 {down, 2},
468 {forward, 1},
469 {down, 8},
470 {forward, 2},
471 {up, 2},
472 {up, 3},
473 {up, 7},
474 {forward, 3},
475 {forward, 3},
476 {up, 3},
477 {up, 5},
478 {forward, 8},
479 {down, 6},
480 {forward, 6},
481 {down, 2},
482 {down, 7},
483 {forward, 3},
484 {forward, 6},
485 {down, 5},
486 {down, 6},
487 {up, 4},
488 {forward, 8},
489 {up, 8},
490 {down, 9},
491 {forward, 7},
492 {forward, 1},
493 {down, 6},
494 {up, 1},
495 {down, 7},
496 {forward, 4},
497 {forward, 8},
498 {down, 2},
499 {forward, 8},
500 {down, 3},
501 {down, 5},
502 {down, 5},
503 {forward, 8},
504 {down, 3},
505 {up, 8},
506 {down, 9},
507 {forward, 2},
508 {down, 9},
509 {forward, 4},
510 {up, 8},
511 {forward, 4},
512 {up, 1},
513 {forward, 8},
514 {forward, 2},
515 {forward, 5},
516 {down, 2},
517 {down, 6},
518 {up, 2},
519 {down, 8},
520 {forward, 9},
521 {forward, 5},
522 {forward, 6},
523 {forward, 4},
524 {down, 4},
525 {down, 6},
526 {up, 1},
527 {forward, 3},
528 {down, 6},
529 {forward, 6},
530 {forward, 1},
531 {forward, 6},
532 {forward, 9},
533 {up, 6},
534 {forward, 5},
535 {down, 4},
536 {forward, 5},
537 {down, 8},
538 {down, 7},
539 {forward, 7},
540 {up, 5},
541 {down, 6},
542 {forward, 4},
543 {forward, 6},
544 {forward, 5},
545 {up, 4},
546 {down, 3},
547 {forward, 1},
548 {down, 1},
549 {forward, 6},
550 {up, 1},
551 {up, 1},
552 {down, 7},
553 {forward, 5},
554 {forward, 1},
555 {down, 2},
556 {forward, 2},
557 {down, 3},
558 {down, 6},
559 {down, 5},
560 {down, 4},
561 {forward, 2},
562 {forward, 1},
563 {down, 7},
564 {forward, 9},
565 {up, 6},
566 {forward, 9},
567 {forward, 2},
568 {down, 1},
569 {forward, 9},
570 {forward, 4},
571 {down, 1},
572 {forward, 3},
573 {up, 9},
574 {down, 1},
575 {down, 3},
576 {down, 6},
577 {down, 9},
578 {forward, 3},
579 {down, 8},
580 {down, 3},
581 {forward, 5},
582 {forward, 1},
583 {forward, 5},
584 {forward, 2},
585 {up, 4},
586 {down, 6},
587 {up, 7},
588 {forward, 7},
589 {down, 9},
590 {forward, 6},
591 {down, 4},
592 {down, 1},
593 {up, 8},
594 {down, 4},
595 {forward, 7},
596 {forward, 5},
597 {down, 5},
598 {down, 2},
599 {down, 1},
600 {down, 4},
601 {up, 5},
602 {down, 8},
603 {forward, 1},
604 {forward, 2},
605 {down, 9},
606 {forward, 7},
607 {down, 8},
608 {forward, 5},
609 {forward, 7},
610 {forward, 2},
611 {down, 6},
612 {down, 5},
613 {down, 6},
614 {down, 7},
615 {forward, 2},
616 {up, 9},
617 {down, 3},
618 {forward, 1},
619 {up, 6},
620 {forward, 4},
621 {down, 3},
622 {up, 7},
623 {forward, 9},
624 {forward, 7},
625 {down, 4},
626 {up, 1},
627 {forward, 6},
628 {up, 4},
629 {down, 1},
630 {down, 4},
631 {down, 2},
632 {down, 5},
633 {down, 4},
634 {down, 7},
635 {forward, 2},
636 {down, 8},
637 {down, 8},
638 {forward, 9},
639 {forward, 3},
640 {down, 2},
641 {down, 2},
642 {forward, 2},
643 {down, 9},
644 {forward, 8},
645 {up, 8},
646 {down, 3},
647 {forward, 4},
648 {down, 9},
649 {up, 2},
650 {forward, 6},
651 {forward, 2},
652 {up, 6},
653 {up, 7},
654 {forward, 1},
655 {forward, 2},
656 {up, 2},
657 {down, 8},
658 {forward, 9},
659 {down, 7},
660 {forward, 1},
661 {down, 6},
662 {down, 8},
663 {forward, 2},
664 {down, 8},
665 {forward, 6},
666 {forward, 7},
667 {forward, 8},
668 {forward, 1},
669 {up, 8},
670 {down, 5},
671 {forward, 8},
672 {down, 3},
673 {down, 6},
674 {forward, 6},
675 {down, 4},
676 {down, 6},
677 {forward, 8},
678 {down, 3},
679 {down, 4},
680 {forward, 6},
681 {forward, 1},
682 {up, 1},
683 {up, 3},
684 {forward, 7},
685 {forward, 2},
686 {down, 1},
687 {down, 7},
688 {down, 3},
689 {down, 4},
690 {down, 3},
691 {forward, 2},
692 {forward, 4},
693 {down, 6},
694 {down, 2},
695 {forward, 3},
696 {down, 9},
697 {down, 5},
698 {down, 6},
699 {down, 7},
700 {down, 5},
701 {down, 3},
702 {forward, 5},
703 {forward, 6},
704 {down, 3},
705 {down, 1},
706 {up, 3},
707 {down, 8},
708 {down, 7},
709 {down, 5},
710 {up, 9},
711 {down, 8},
712 {down, 4},
713 {down, 2},
714 {forward, 4},
715 {forward, 9},
716 {forward, 1},
717 {forward, 7},
718 {down, 3},
719 {down, 4},
720 {up, 9},
721 {down, 6},
722 {forward, 9},
723 {down, 4},
724 {down, 2},
725 {down, 5},
726 {down, 3},
727 {forward, 2},
728 {forward, 9},
729 {forward, 3},
730 {down, 5},
731 {up, 1},
732 {down, 9},
733 {forward, 9},
734 {down, 7},
735 {forward, 6},
736 {down, 6},
737 {down, 9},
738 {down, 7},
739 {down, 8},
740 {down, 2},
741 {up, 3},
742 {forward, 6},
743 {forward, 3},
744 {up, 4},
745 {down, 6},
746 {down, 8},
747 {down, 2},
748 {down, 1},
749 {up, 9},
750 {down, 1},
751 {down, 8},
752 {forward, 5},
753 {forward, 4},
754 {forward, 9},
755 {forward, 3},
756 {forward, 9},
757 {down, 5},
758 {up, 9},
759 {down, 6},
760 {forward, 4},
761 {down, 6},
762 {forward, 4},
763 {forward, 9},
764 {down, 7},
765 {up, 9},
766 {up, 2},
767 {forward, 5},
768 {forward, 6},
769 {up, 2},
770 {forward, 8},
771 {down, 6},
772 {forward, 8},
773 {forward, 1},
774 {forward, 2},
775 {forward, 6},
776 {down, 3},
777 {up, 2},
778 {forward, 7},
779 {up, 8},
780 {forward, 2},
781 {forward, 5},
782 {forward, 4},
783 {up, 6},
784 {forward, 9},
785 {up, 8},
786 {down, 3},
787 {up, 7},
788 {up, 2},
789 {down, 2},
790 {up, 4},
791 {up, 5},
792 {forward, 5},
793 {down, 9},
794 {forward, 2},
795 {down, 1},
796 {down, 6},
797 {down, 4},
798 {down, 1},
799 {down, 1},
800 {forward, 4},
801 {forward, 7},
802 {down, 4},
803 {down, 2},
804 {forward, 7},
805 {down, 4},
806 {up, 1},
807 {up, 8},
808 {down, 6},
809 {down, 8},
810 {forward, 6},
811 {down, 8},
812 {up, 2},
813 {down, 7},
814 {forward, 5},
815 {forward, 8},
816 {down, 9},
817 {forward, 1},
818 {up, 7},
819 {down, 5},
820 {up, 1},
821 {up, 6},
822 {down, 3},
823 {down, 4},
824 {down, 9},
825 {down, 6},
826 {forward, 1},
827 {down, 1},
828 {forward, 4},
829 {down, 4},
830 {down, 8},
831 {up, 1},
832 {down, 7},
833 {forward, 1},
834 {down, 6},
835 {down, 4},
836 {down, 5},
837 {forward, 6},
838 {forward, 8},
839 {down, 5},
840 {down, 5},
841 {up, 3},
842 {forward, 8},
843 {down, 4},
844 {down, 3},
845 {up, 1},
846 {up, 8},
847 {forward, 1},
848 {down, 6},
849 {down, 2},
850 {down, 6},
851 {down, 1},
852 {forward, 9},
853 {down, 1},
854 {forward, 6},
855 {forward, 9},
856 {down, 5},
857 {up, 4},
858 {down, 5},
859 {down, 1},
860 {forward, 2},
861 {down, 2},
862 {forward, 9},
863 {down, 3},
864 {forward, 7},
865 {forward, 8},
866 {forward, 5},
867 {down, 7},
868 {down, 6},
869 {down, 8},
870 {forward, 7},
871 {up, 7},
872 {forward, 6},
873 {forward, 3},
874 {down, 2},
875 {forward, 9},
876 {forward, 4},
877 {down, 6},
878 {down, 6},
879 {up, 9},
880 {down, 1},
881 {forward, 5},
882 {forward, 2},
883 {forward, 2},
884 {forward, 2},
885 {down, 8},
886 {up, 1},
887 {down, 4},
888 {forward, 3},
889 {down, 3},
890 {up, 4},
891 {down, 6},
892 {forward, 2},
893 {forward, 8},
894 {forward, 9},
895 {forward, 3},
896 {down, 4},
897 {forward, 2},
898 {forward, 5},
899 {down, 5},
900 {up, 8},
901 {up, 9},
902 {up, 3},
903 {forward, 9},
904 {forward, 3},
905 {forward, 3},
906 {forward, 8},
907 {forward, 2},
908 {forward, 7},
909 {down, 8},
910 {down, 6},
911 {forward, 6},
912 {forward, 8},
913 {down, 1},
914 {forward, 3},
915 {down, 7},
916 {forward, 5},
917 {forward, 3},
918 {forward, 3},
919 {down, 3},
920 {down, 5},
921 {down, 2},
922 {down, 6},
923 {up, 2},
924 {up, 7},
925 {down, 9},
926 {forward, 6},
927 {down, 9},
928 {down, 8},
929 {up, 8},
930 {down, 1},
931 {forward, 9},
932 {down, 8},
933 {forward, 7},
934 {forward, 6},
935 {down, 5},
936 {down, 7},
937 {down, 4},
938 {forward, 7},
939 {down, 8},
940 {down, 9},
941 {down, 4},
942 {up, 8},
943 {forward, 2},
944 {up, 6},
945 {forward, 6},
946 {forward, 3},
947 {forward, 6},
948 {up, 9},
949 {forward, 1},
950 {down, 3},
951 {up, 6},
952 {down, 8},
953 {up, 4},
954 {up, 5},
955 {forward, 8},
956 {forward, 5},
957 {forward, 3},
958 {forward, 3},
959 {forward, 4},
960 {down, 4},
961 {forward, 2},
962 {up, 2},
963 {down, 7},
964 {down, 5},
965 {forward, 7},
966 {down, 8},
967 {forward, 3},
968 {up, 5},
969 {down, 4},
970 {down, 1},
971 {down, 5},
972 {forward, 6},
973 {forward, 8},
974 {forward, 6},
975 {down, 2},
976 {down, 7},
977 {forward, 6},
978 {forward, 2},
979 {forward, 7},
980 {down, 5},
981 {forward, 2},
982 {forward, 7},
983 {down, 9},
984 {down, 9},
985 {down, 4},
986 {down, 7},
987 {down, 3},
988 {forward, 1},
989 {up, 8},
990 {down, 7},
991 {forward, 2},
992 {forward, 4},
993 {up, 2},
994 {forward, 2},
995 {down, 2},
996 {up, 2},
997 {up, 9},
998 {forward, 1},
999 {down, 5},
1000 {down, 1},
1001 {forward, 8},
1002 {up, 3},
1003 {up, 4},
1004 {down, 3},
1005 {up, 2},
1006 {down, 8},
1007 {down, 6},
1008 {down, 4},
1009 {up, 7},
1010 {forward, 4},
1011 {down, 7},
1012 {down, 4},
1013 {up, 3},
1014 {up, 8},
1015 {down, 1},
1016 {down, 7},
1017 {forward, 1},
1018 {down, 2},
1019 {forward, 6},
1020 {down, 9},
1021 {forward, 3},
1022 {down, 9},
1023 {up, 5},
1024 {up, 1},
1025 {down, 4},
1026 {forward, 1},
1027 {down, 4},
1028 {forward, 4},
1029 {up, 4},
1030 {forward, 7},
1031 {down, 9},
1032 {down, 2},
1033 {down, 8},
1034 {forward, 2},
1035 {up, 3},
1036 {forward, 2},
1037 {down, 7},
1038 {forward, 8},
1039 {forward, 6},
1040 {forward, 1},
1041 {up, 9},
1042 {forward, 7},
1043 {up, 4},
1044 {down, 4},
1045 {down, 3},
1046 {down, 7},
1047 {forward, 5},
1048 {forward, 3},
1049 {forward, 7}
1050 ].