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