Browse Source

Day 13

master
Chris Smith 5 years ago
parent
commit
73e59cfc37
3 changed files with 244 additions and 0 deletions
  1. 2
    0
      answers/13.txt
  2. 150
    0
      data/13.txt
  3. 92
    0
      day13.nim

+ 2
- 0
answers/13.txt View File

@@ -0,0 +1,2 @@
1
+80,100
2
+16,99

+ 150
- 0
data/13.txt View File

@@ -0,0 +1,150 @@
1
+                                  /----------------------------\                                                                                      
2
+  /-------------------------------+----------------------------+-----------------------\                                                              
3
+  |                               |                            |                     /-+------------------------------------------------\             
4
+  |               /---------------+----------------------------+---------------------+-+-\             /---------\                      |             
5
+  |  /------------+------------\  |                            |                   /-+-+-+-------------+---------+----------------\     |             
6
+  |  |            |            |  |                            |                   | | | |             |         |          /-----+---\ |             
7
+  |  |        /---+------------+--+-------------------------\  |/------------------+-+-+-+-----------\ |         |          |     |   | |             
8
+  |  |        |   |        /---+--+-------------------------+--++------------------+-+-+-+-----------+-+---------+---\      |  /--+---+-+------\      
9
+  |  |        |   |        |/--+--+-------------------------+--++------\           | | | |           | |         |   |      |  |  |   | |      |      
10
+  |  |        |   |        ||  |  |                         |  ||     /+-----------+-+-+-+-----------+-+---------+---+------+--+--+---+-+------+-\    
11
+  |  | /------+---+--------++--+--+-------------------------+--++-----++-----------+-+-+\|           | |         |   |      |  |  |   | |      | |    
12
+  |  | |      |   |        ||  |  |                    /----+--++-----++-----------+-+-+++-----------+-+---------+---+------+--+--+---+\|      | |    
13
+  |  | |    /-+---+--------++--+--+--------------------+----+--++-<---++----------\| | |||           | |/--------+---+-\    |  |  |   |||      | |    
14
+  |  | |    | |  /+--------++--+--+--\               /-+----+--++-----++----------++-+-+++-----------+-++--------+---+-+----+--+--+---+++-----\| |    
15
+  |  | |    | |  ||       /++--+--+--+-----------\   | |    |  ||     ||  /-------++-+-+++-----------+-++--------+---+-+--\ |  |  |   |||     || |    
16
+  | /+-+----+-+--++-------+++--+--+--+-----------+---+-+----+--++-----++--+-------++-+-+++-----------+-++-------\|   | |  | |  |  |   |||     || |    
17
+  | || |    | |  ||       |||/-+--+--+-----------+---+-+----+--++-----++--+-------++-+-+++\          | ||       ||   | |  | |  |  |   |||     || |    
18
+  | || |    | |  ||       |||| |  |  |           |   | |    |  ||     ||  | /-----++-+-++++----------+\||       ||   ^ | /+-+--+--+---+++-----++-+---\
19
+  | || |    | |  ||       |||| |  |  |           |   | |    |  ||     ||  | |     || | ||||          ||||       ||   | | || |  |  |   |||     || |   |
20
+  | || |    | |  ||       |||| |  |  |           |   | |  /-+--++-----++--+-+-----++-+-++++---\      ||||       ||   | | || |  |  |   |||     || |   |
21
+  | || |    | |  ||       |||| |  |  |           |   | |  | |  ||     ||  | |     || | ||||   |      ||||       ||   | | || |  |  |   |||     || |   |
22
+  | || |    | |  ||       |||| |  |/-+-----------+---+-+--+-+--++-----++--+-+-----++-+-++++---+------++++-------++---+-+-++-+--+--+---+++-\   || |   |
23
+  \-++-+----+-+--++-------++++-+--++-+-----------+---+-+--+-+--++-----++--+-+-----++-+-/|||   |      ||||       ||   | | || |  |  |   ||| |   || |   |
24
+    || |    | |  ||     /-++++-+--++-+-----------+---+-+--+-+--++-----++--+-+-----++-+--+++---+------++++-------++---+-+-++-+--+\ |   ||| |   || |   |
25
+    || |    | |  || /---+-++++-+--++-+-----------+---+-+--+-+--++--\  ||  | |     || |  |||   |      ||||       ||   | | || |  || |   ||| |   || |   |
26
+    || | /--+-+--++-+---+-++++-+--++-+-----------+---+-+--+-+--++--+--++--+-+-----++-+-\|||   |      ||||       ||   | | || |  || |   ||| |   || |   |
27
+    || | |  | |  || |   | |||\-+--++-+-----------+---+-+--+-+--++--+--++--+-+-----++-+-+++/   |      ||||       ||   | | || |  || |   ||| |   || |   |
28
+    || | |  | |  || |   | |||  |/-++-+---------\ |   | |  | |  ||  |  ||  | |     || | |||    |      ||||       ||   | | || |  || |   ||^ |   || |   |
29
+  /-++-+-+--+-+--++-+---+-+++--++-++-+---------+-+---+-+--+-+--++--+--++--+-+-----++-+-+++----+-----\||||       ||   | | || |  || |   ||| |   || |   |
30
+  | || | |  | \--++-+---+-+++--++-++-+---------+-+---+-+--+-/  ||  |  ||  | |     || |/+++----+-----+++++-\     ||   | | || |  || |   ||| |   || |   |
31
+  | || | |  |    || |   | |||  || || |         | |   | |  |    ||  |  ||  | |     || |||||    |     ||||| |     ||   | | || |  || |   ||| |   || |   |
32
+  | || | |  |    || |   | |||  || || |         | |   | |  |    ||  |/-++--+-+-----++-+++++----+-----+++++-+-----++---+\| || |  || |   ||| |   || |   |
33
+  | || | |  |    || |   | |||  || || |         | |   | |/-+----++--++-++--+-+-----++-+++++----+-----+++++-+-----++---+++-++-+-\|| |   ||| |   || |   |
34
+  | || | |  |    || |   | |\+--++-++-+---------+-+---+-++-+----++--++-++--+-+-----++-+++++----+-----+++++-+-----++---/|| || | ||| |   ||| |   || |   |
35
+  | |\-+-+--+----++-+---+-+-+--/| || |         | |   | || |  /-++--++-++--+-+-\   || |||||    |     |||\+-+-----+/    || || | ||| |   ||| |   || |   |
36
+  | |  \-+--+----++-+---+-+-+---+-++-+---------+-+---+-++-+--+-++--++-++--+-+-+---++-+++/|    |     ||| | |     |/----++-++-+-+++\|   ||| |   || |   |
37
+  | |    |  | /--++-+---+-+\|   | || |         | |   | || |  | ||  || ||  | | |   || \++-+----+-----+++-+-+-----++----++-++-+-+++++---++/ |   || |   |
38
+/-+-+----+--+-+--++-+---+-+++--\| \+-+---------+-+---+-++-+--+-/|  || ||  | | |   ||  || |    |     ||| | |     ||    || || | |||||   ||  |   || |   |
39
+| | |    |  | |  || |   | |||  ||  | |         | |   | || |  |  |  || ||  | | |   ||  || |    |     ||| | |     ||    || || | |||||   ||  |   || |   |
40
+| | |    | /+-+--++-+---+-+++--++--+-+---------+-+---+-++-+--+-\|  || ||  | | |/--++--++-+----+-----+++-+-+-----++----++-++-+\|||||   ||  |   || |   |
41
+| | |    | || |  || |   | |||  ||  | |  /------+-+---+-++-+--+-++--++-++--+-+-++--++--++-+----+-----+++-+-+---\ ||    || || |||||||   ||  |   || |   |
42
+| | |    | || |  || |   | |||  ||  | |  | /----+-+---+-++-+--+-++--++-++--+-+\||  ||  || |    |     ||| \-+---+-++----+/ || |||||||   ||  |   || |   |
43
+| | |   /+-++-+--++-+---+-+++--++--+-+--+-+----+-+---+-++-+--+-++--++-++--+-++++--++--++-+----+-----+++---+\  |/++----+--++-+++++++--\||  |   || |   |
44
+| | |   || || |  || |   | |||  ||  | |  | |    | |   | || |  | ||  || ||  | ||||  ||  || |    |     |||   ||  ||||    |  || |||||||  |||  |   || |   |
45
+| | |   || || |  || | /-+-+++--++--+-+--+-+----+-+---+-++-+--+-++--++-++--+\|||| /++--++-+----+-----+++--\||  ||||    |  || |||\+++--+++--+---+/ |   |
46
+| | |   || || |  || | | | |||  ||  | |  | |    | |   | || \--+-++--++-++--++++++-+++--++-+----/     |||  |||  ||||    |  || ||| |||  |||  |   |  |   |
47
+| | |   || |\-+--++-+-+-+-+++--++--+-+--+-+----+-+---+-++----+-++--++-++--++++++-+/|  || |          |||  |||  ||||    |  || ||| |||  |||  |   |  |   |
48
+| | |   || |/-+--++-+-+-+-+++--++--+-+--+-+----+-+---+-++----+-++--++-++--++++++-+-+--++-+---\      |||  |||  ||||    |  || ||| |||  |||  |   |  |   |
49
+| | |   || ||/+--++-+-+-+-+++--++--+-+\ | |    | |/--+-++----+-++--++-++--++++++-+-+--++-+---+-\    |||  |||  ||||    |  || ||| |||  |||  |   |  |   |
50
+| | |   || ||||  || | | | |||  ||  | || | |  /-+-++>-+-++----+-++--++-++--++++++-+-+--++-+---+-+----+++--+++--++++----+--++-+++-+++--+++--+---+\ |   |
51
+| | | /-++-++++--++-+-+-+-+++--++--+\|| | |  | | ||  | ||    | ||  || ||  |||||\-+-+--++-+---+-+----+++--+++--++++----+--++-+/| |||  |||  |   || |   |
52
+| ^ | | || ||||  || | | | |||  ||  |||| | |  | | ||  | \+----+-++--++-++--+++++--+-+--++-+---+-+----+++--+++--++++----+--++-+-+-+++--++/  |   || |   |
53
+| | | | ||/++++--++-+-+-+-+++--++--++++-+-+--+-+-++--+--+----+-++--++<++--+++++--+-+--++-+---+-+-\  |||  |||  ||||    |  ||/+-+-+++--++---+--\|| |   |
54
+| | | | |||||||  || | | | |||  ||  ||||/+-+--+-+-++--+--+----+-++--++-++--+++++--+-+--++-+--\| | |  |||  |||  ||||    |  |||| | |||  ||   |  ||| |   |
55
+| | | | |||||||  || | | | |||  ||  |||||| |  | | ||  |  |    \-++--++-++--++++/ /+-+--++-+--++-+-+--+++--+++--++++----+-\|||| | |||  ||   |  ||| |   |
56
+| | | | |||||||  || | | | |||  ||  |||||| |  | | ||  | /+------++--++-++\ \+++--++-+--++-+--++-+-+--+++--+++--++++----+-++/|| | |||  ||   |  ||| |   |
57
+| | | | |||||||  || | | | |||  ||  |||||| |  | | ||  | ||/-----++--++-+++--+++--++-+--++-+--++-+-+--+++--+++--++++----+-++-++-+-+++--++---+--+++\|   |
58
+| | | | |||\+++--++-+-+-+-+++--++--++++++-+--+-+-++--+-+++-----/|  || |||  |||  || |  || |  || | |  |||  |||  ||||    | || || | |||  ||   |  |||||   |
59
+| | | | ||| |||  || | | | |||  ||  |||||| |/-+-+-++--+-+++------+--++-+++--+++--++-+--++-+--++-+-+--+++--+++--++++----+-++-++-+-+++\ ||   |  |||||   |
60
+| | | | ||| |\+--++-+-+-+-+++--++--+++/|| || | | ||  | |||      |  || |||  |||  || | /++-+--++\| |  |||  |||  ||||    | || || | |||| ||   |  |||||   |
61
+| | | | ||| | |  || | | | |||  ||  ||| || || | | ||  | |||      |  || |||  |||  || | ||| |  ||||/+--+++--+++--++++--\ | || || | |||| ||   |  |||||   |
62
+| | | | ||| |/+--++-+-+-+-+++--++\ ||| || || | | ||  | |||      |  || |||  |||  || | ||| |  ||||||  |||  |||  ||||  | | || || | |||| ||   |  |||||   |
63
+| | | | ||| |||  || | | | |||  ||| ||| || ||/+-+-++--+\|||      |  || |||  |||  || | ||| | /++++++--+++--+++--++++--+-+-++-++\| |||| ||   |  |||||   |
64
+| | | | ||| |||  || | | \-+++--+++-+++-++-++++-+-++--+++++------+--++-+++--+++--++-+-+++-+-+++++++--+++--+++--++++--+-+-++-++++-/||| ||   |  |||||   |
65
+| | | | ||| |||  || | |   |||  ||| ||| || \+++-+-++--+++++------+--++-+++--++/  || | ||| | |||||||  |||  |||  ||||  | | || ||||  ||| ||   |  |||||   |
66
+| | v | |\+-+++--++-+-+---+++--+++-+++-++--+++-+-++--+++++------+--++-+++--++---++-+-++/ | |||||||  |||  |||  ||||  | | || ||||  ||| ||   |  |||||   |
67
+| | | | | | |||  || | |   |||  ||| ||| ||  ||| | ||  |||\+------+--++-+++--++---++-+-++--+-+++++++--+++--+++--++++--+-+-++-+++/  ||| ||   |  |||||   |
68
+| | | | | | |||  || |/+---+++--+++-+++-++--+++\| ||  ||| |      |  || |||/>++---++-+-++--+-+++++++--+++--+++--++++--+-+-++-+++---+++-++--\|  |||||   |
69
+| | | | | | |||  ||/+++---+++--+++-+++-++--+++++\||  ||| |      |  || |||| ||/--++-+-++--+-+++++++--+++--+++-\||||  | | || |||   ||| ||  ||  |||||   |
70
+| | | |/+-+-+++--++++++---+++--+++-+++-++--++++++++\ ||| |      |  ||/++++-+++--++-+\||  | |||||||  |||  ||| |||||  | | || |||   ||| ||  ||  |||||   |
71
+| | | \++-+-+++--++++++---+++--+++-+/| ||  ||||||||| ||| |      |  ||||||| |||  || ||||  | |||||||/-+++--+++-+++++-\| | || |||   ||| ||  ||  |||||   |
72
+| | |  || | |||  ||||||   |||  ||| | | ||  ||||||||| ||| |     /+--+++++++-+++--++-++++--+-++++++++-+++--+++-+++++-++-+-++-+++---+++-++--++--+++++\  |
73
+| | |  || | |||  ||||||   |||  ||| \-+-++--+++++++++-+++-+-----++--+++++++-+++--++-++++--+-++++++++-+++--+++-+++++-++-+-++-+++---+++-++--+/  ||||||  |
74
+| | |  || | |||  ||||||   |||  |||   | ||  ||||||||| ||| |     ||  ||||||| |||  || ||||  | |||||||| |||  ||| ||||| || | || |||   ||| ||  |   ||||||  |
75
+| | |  || | ||\--++++++---+/| /+++---+-++--+++++++++-+++-+-----++--+++++++-+++--++-++++--+-++++++++-+++--+++-+++++-++-+-++-+++--\||| ||  |   ||||||  |
76
+| \-+--++-+-++---++++++---+-+-++++---+-++--+++++++++-+++-+-----++--+++++++-+++--++-++++--+-++++++++-/||  ||| ||||| || | || |||  |||| ||  |   ||||||  |
77
+|   |  || | ||   ||||||   | | ||||   | ||  ||||||||| ||| |     ||/-+++++++-+++\ || ||||  | ||||||||  ||  ||| ||||| || | || |||  |||| ||  |   ||||||  |
78
+|   |  || | ||   ||||||   | | ||||   | ||  ||||||||| ||| |     ||| ||||||| |||| || ||||  | ||||||||  ||  ||| ||||| || | || |||  |||| ||  |   ||||||  |
79
+|   |  || | ||   ||||||   | | ||||   | ||  ||||||||| ||| |     ||| ||||||| |||| || \+++--+-++++++++--++--+++-+++++-++-+-++-+++--++/| ||  |   ||||||  |
80
+|   |  || | ||   ||||||   | | ||||   | ||  ||||||||| ||| |     ||| ||||||| |||| ||  |||  | ||||||||  ||  ||| ||||| || | || |||  || | ||  |   ||||||  |
81
+|   |  || | ||   ||||||   | | ||||   | ||  ||||||||| ||| |     ||| ||||||| |||| ||  |||  | \+++++++--++--+++-+++++-++-+-++-++/  || | ||  |   ||||||  |
82
+|   |  || | ||   ||||||   | | |||| /-+-++--+++++++++-+++-+-----+++-+++++++-++++-++--+++--+--+++++++--++\ ||| ||||| || | || ||   || | ||  |   ||||||  |
83
+|   |  || | ||   ||||||   | | |||| | | ||  |\+++++++-+/| \-----+++-+++++++-++++-++--+++--+--+++++++--+++-+++-+++++-++-+-++-++---++-+-++--+---+++/||  |
84
+|   |  || | || /-++++++---+-+\|||| | | || /+-+++++++-+-+\      ||| |||\+++-++++-++--+++--+--+++++++--+++-+++-+++++-++-+-++-++---++-+-++--+---+++-/|  |
85
+|   |/-++-+-++-+-++++++---+-++++++-+-+-++-++-+++++++-+\||      ||| ||| ||v |||| ||  |||  |  |||||||  ||| ||| ||||| || | || ||   || | ||  |   |||  |  |
86
+|   || || | || | ||||||   | |||||| | | || || ||||||| ||||      ||| |\+-+++-++++-++--+++--+--+++++++--+++-+++-+++++-++-/ ^| ||   || | ||  |   |||  |  |
87
+|   || || | || | ||||||   | ||||\+-+-+-++-++-++/|||| ||||      ||| | | ||| ||\+-++--+++--+--+++++++--+++-+++-/|||| ||   || ||   || | ||  |   |||  |  |
88
+|   || || | || | ||||||   | |||| | | | || || ||/++++-++++---\  ||| | | ||| || | ||  |||  |  |||||||  ||| |||  |||\-++---++-++---+/ | ||  |   |||  |  |
89
+|   || |\-+-++-+-++++++---+-++++-+-+-+-++-++-+++++++-++++---+--+++-+-+-+++-++-+-++--+++--+--+++++++--+++-++/  |||  ||   || ||   |  | ||  |   |||  |  |
90
+|   || |  | || | ||||||   | |||| | | | || || ||||||| \+++---+--+++-+-+-+++-++-+-++--+++--+--+++++++--+++-++---+++--++---++-++---+--+-++--+---+/|  |  |
91
+|   || |  | || | ||||||   \-++++-+-+-+-++-++-++++/||  |||   |  ||| | | ||| || | ||  |||  |  |||||||  ||| ||   |||  ||   || ||   |  | ||  |   | |  |  |
92
+|   || |  | || | ||||||     |||| | | | || || |||| ||  |||   |  ||| | | ||| || | ||  |||  |  ||||\++--+++-++---+++--+/   || ||   |  | ||  |   | |  |  |
93
+|   || |  | || | ||||||     |||| | | | || || |||| ||  |||   |  ||| | | ||| || | |\--+++--+--++++-++--+++-/|   |||  |    || ||   |  | ||  |   | |  |  |
94
+|   || |  | || | ||||||     |||| | | | || || |||| ||  |||   |  ||| | |/+++-++-+\|   |||  |  |||| ||  |||  |   |||  |    || ||   |  | ||  |   | |  v  |
95
+|   || |  \-++-+-++++++-----++++-+-+-+-++-++-++++-++--+++---+--+++-+-+++++-++-+++---+++--+--++++-/|  |||  |   |||  |    |\-++---+--+-++--+---+-+--+--/
96
+|   |\-+----++-+-++++++-----++++-+-+-+-++-++-++++-++--/||   |  ||| | ||||| || |||   |||  |  ||||  |  |||  |   |||  |    |  ||   |  | ||  |   | |  |   
97
+|   |  | /--++-+-++++++-----++++-+-+-+-++-++-++++-++-\ ||   |  ||| | \++++-++-+++---/||  |  ||||  |  |||  |   |||  |    |  |\---+--+-+/  |   | |  |   
98
+|   |  | |  || | ||||||/----++++-+-+-+-++\|| |||| || | ||   |  \++-+--++++-++-+++----++--+--++++--+--+++--+---+++--+----+--+----+--+-+---+---+-+--/   
99
+|   |  | |/-++-+-+++++++----++++-+-+-+-+++++-++++-++-+-++---+---++-+--++++-++-+++\   ||  |  ||||  |  |||  |   |||  |    |  |    |  | |   |   | |      
100
+|   |  | ||/++-+-+++++++----++++-+-+-+-+++++\|||| || | ||   |   || |  |||| || ||||   ||  |  ||||  |  |||  |   |||  |    |  |    |  | |   |   | |      
101
+|   |  | ||||| | \++++++----++++-+-+-/ |||||||||| ||/+-++---+---++-+--++++-++-++++---++--+--++++--+-\|||  |   |||  |    |  |    |  | |   |   | |      
102
+|   |  | ||||| \--++++++----+/|| | |   \+++++++++-++++-++---+---++-+--++++-++-++++---++--+--/|||  | ||||  |  /+++--+----+-\|    |  | |   |   | |      
103
+|   \--+-+++++----++++++----+-++-+-+----+++++++++-++++-++---+---++-+--++++-++-++++---++--+---+++--+-++++--+--+++/  |    |/++----+--+-+---+---+\|      
104
+|      | |||||    ||||||    \-++-+-+----+++++++++-++++-++---+---++-+--+/|| |\-++++---++--+---+++--+-++/|  |  |||   |    ||||    |  | |   |   |||      
105
+|      | |||||    ||\+++------++-+-+----+++++++++-++++-++---+---++-/  |/++-+--++++---++--+---+++--+-++-+--+--+++---+----++++----+--+-+-\ |   |||      
106
+|     /+-+++++---\|| |||      || | |    |||||||||/++++-++---+---++----++++-+--++++---++--+---+++--+-++-+--+--+++---+----++++-\  |  | | | |   |||      
107
+|     || |||||   ||| |\+------++-+-+----++++++++++++++-++---+---++----++++-/  ||||   ||  |   |||  | || |  |  |||   |    |||| |  |  | | | |   |||      
108
+|     || |||||   ||| | |      || | |    |||\++++++++++-++---+---++----++++----++++---++--+---+++--+-++-+--+--+++---+----++++-+--+--/ | | |   |||      
109
+|     || |||||   |\+-+-+------++-+-+----+++-++++++++++-++---+---++----++++----++++---++--/   |||  | || |  |  |||   |    |||| |  |    | | |   |||      
110
+|     || |||||   | | | |      || | |    ||| |||||||||| ||   |   \+----++++----++++---++------+++--+-+/ |  |  |||   |    |||| |  |    | | |   |||      
111
+|     || |||||   | | | |      || | |    \++-++++++++++-++---+----+----++++----++++---++------+++--+-+--+--+--+/|   |    |||| |  |    | | |   |||      
112
+|     || |||||   | | | |      || | |     || |||||||||| ||   |    |    ||||    ||||   ||      |||  | |  |  |  | |   |    |||| |  |    | | |   |||      
113
+|     || |||||   | | | |      || | |     || |||||||||| ||   |    |    ||||    ||||   ||      |||  | |  |  |  | |   |    |||| |  |    | | |   |||      
114
+|     |\-+++++---+-+-+-+------++-+-+-----++-+++++++/|| ||   |    |    ||||    ||||   ||      |||  | |  |  |  | |   |    |||| |  |    | | |   |||      
115
+|     |  |||||   | | | |      || | |     |\-+++++++-++-+/   |    |    ||||    ||||   ||      |||  | |  |  |  | |   |    |||| |  |    | | |   |||      
116
+|     |  |||||   | | | |      || | |     |  ||||||| \+-+----+----+----++++----++++---++------+++--+-/  |  |  | |   |    |||| |/-+----+-+-+---+++---\  
117
+|     |  |||||   | | | |      \+-+-+-----+--+++++++--+-+----+----+----++++----++++---++------+++--+----+--+--+-+---+----++++-++-/    | | |   |||   |  
118
+|     |  |||||   | | | |       | | |     |  |||||||  |/+----+----+----++++----++++---++------+++--+----+--+--+-+---+----++++-++------+-+-+---+++---+\ 
119
+|     |  |||||   | | | |       | | |     |  |||||||  |||    |    |    |\++----++++---++------+++--+----+--+--+-+---+----++++-++------+-/ |   |||   || 
120
+|     |  \++++---+-+-+-+-------+-+-+-----+--+++++++--/||    |    |    | ||/---++++---++------+++--+----+--+--+-+---+----++++-++--\   |   |   |||   || 
121
+|     |   ||||   | | | |       | | |     |  |||||||   ||    |    |    | |||   ||\+---++--<---+++--+----+--+--+-+---+----/||| ||  |   |   |   |||   || 
122
+|     |   ||||   | | | |       | | |     |  |\+++++---++----+----+----+-+++---++-+---++------+++--+----+--+--+-+---+-----+++-++--+---+---+---++/   || 
123
+|     |   ||||   | | | |       | | |     |  | |||||   ||    |    |    | |||   || |   ||      |||  |    |  |  | |   |     ||| ||  |   |   |   ||    || 
124
+|     |   ||||   | | | |       | | |     |  | |||||   ||    |    |    | |||   || |   \+------+/|  |    |  |  | |   |     ||| ||  |   |   |   ||    || 
125
+|     |   ||||   | | | |       | | |     |  | |||||   ||    |    |    | |||   || |    |      | |  |    |  |  | |   |     ||| ||  |   |   |   ||    || 
126
+|     |   \+++---+-+-+-+-------+-+-+-----+--+-+++++---++----+----+----+-+++---++-/    |      | |  |    |  |  | |   |     ||| ||  |   |   |   ||    || 
127
+|     |    |||   | | | |       | | |   /-+--+-+++++---++----+----+----+-+++---++------+------+-+--+----+--+\ | |   |     ||| ||  |   |   |   ||    || 
128
+|     |    ||\---+-+-+-+-------+-/ |   | |  | |\+++---++----/    \----+-+++---/|      |      | |  |    |  || | |   |     ||| ||  |   |   |   ||    || 
129
+|     |    || /--+-+-+-+-------+---+\  | |  | | |||   ||              | |||    |      \------+-+--+----+--/| \-+---+-----+/| ||  |   |   |   ||    || 
130
+|     |    \+-+--+-+-+-+-------+---++--+-+--/ | |||   ||              | |||    |             | |  |    |   |   |   |     | | ||  |   |   |   ||    || 
131
+|     |     | |  | |/+-+-------+---++--+-+----+-+++---++--------\     | |||    |             | |  |    |   |   |   |     | | ||  |   |   |   ||    || 
132
+|     |    /+-+--+-+++-+-------+---++--+-+----+-+++---++--------+-----+-+++----+----------->-+-+--+----+---+---+\  |     | | |\--+---+---+---++----/| 
133
+|     |    || |  | ||| | /-----+--\||  | |    | |||   ||        |     | |||    |             | |  | /--+---+---++--+-----+-+-+---+--\|   |   ||     | 
134
+|     |    || |  | ||| | |     |  |||  | |    | |||   ||        |     | ||\----+-------------+-+--+-+--+---+---++--+-----+-+-+---/  ||   |   ||     | 
135
+|     |    || |  | ||| | |     |  |||  | |    | |||   ||        |     | ||     |             | |  | |  |   |   ||  |     | | |      ||   |   ||     | 
136
+\-----+----++-+--+-+++-+-+-----/  |||  | |    | |||   ||        |     | ||     |             | |  \-+--+---+---++--/     | | |      ||   |   ||     | 
137
+      |    || |  | ||\-+-+--------+++--+-+----/ |||   ||        |     | ||     |             | |  /-+--+---+---++--------+-+-+------++---+---++\    | 
138
+      |    || |  | ||  | |        |||  | |      |||   ||        |     | ||     |             | |  | |  |   |   ||        | | |      ||   |   |||    | 
139
+      \>---++-+--/ ||  | |        |||  \-+------+++---++--------+-----+-++-----+-------------+-+--+-+--+->-/   ||        \-+-+------++---+---+/|    | 
140
+           || \----++--+-+--------++/    |      |\+---++--------+-----+-++-----+-------------+-+--+-+--+-------++----------+-/      ||   |   | |    | 
141
+           ||      ||  | |        ||     |      | |   \+--------+-----+-++-----+-------------+-+--+-+--+-------++----------+--------++---+---+-+----/ 
142
+           ||      ||  | |        ||     |      | \----+--------+-----+-++-----+-------------+-/  | |  |       ||          |        ||   |   | |      
143
+           |\------++--+-+--------++-----+------+------+--------+-----+-++-----+-------------/    | |  |       ||          \--------++---+---/ |      
144
+           |       |\--+-+---<----++-----+------+------+--------/     | ||     |                  | |  |       ||                   ||   |     |      
145
+           |       |   | \--------/|     |      |      \--------------+-/|     |                  | \--+-------++-------------------/|   |     |      
146
+           |       |   |           \-----+------+---------------------+--+-----+-------<----------+----/       \+--------------------/   |     |      
147
+           |       \---+-----------------+------/                     |  |     |                  |             |                        |     |      
148
+           |           |                 |                            \--+-----/                  \-------------+------------------------+-----/      
149
+           \-----------+-----------------+-------------------------------+--------------------------------------/                        |            
150
+                       \-----------------/                               \---------------------------------------------------------------/            

+ 92
- 0
day13.nim View File

@@ -0,0 +1,92 @@
1
+import algorithm, math, sequtils, strscans, strutils, tables
2
+
3
+type
4
+    Cart = ref object
5
+        x, y, dx, dy, turn: int
6
+        crashed: bool
7
+
8
+proc newCart(x, y, dx, dy: int): Cart =
9
+    result = new(Cart)
10
+    result.x = x
11
+    result.y = y
12
+    result.dx = dx
13
+    result.dy = dy
14
+
15
+proc cmpCarts(x, y: Cart): int =
16
+    if x.y == y.y:
17
+        x.x - y.x
18
+    else:
19
+        x.y - y.y
20
+
21
+proc cartsAt(carts: seq[Cart], x,y: int): seq[Cart] =
22
+    for cart in carts:
23
+        if cart.x == x and cart.y == y and not cart.crashed:
24
+            result.add(cart)
25
+
26
+proc move(cart: Cart, grid: seq[string]) =
27
+    cart.x += cart.dx
28
+    cart.y += cart.dy
29
+
30
+    var
31
+        dx = cart.dx
32
+        dy = cart.dy
33
+
34
+    let cell = grid[cart.y][cart.x]
35
+    if cell == '/':
36
+        cart.dx = -dy
37
+        cart.dy = -dx
38
+    if cell == '\\':
39
+        cart.dx = dy
40
+        cart.dy = dx
41
+    elif cell == '+':
42
+        if cart.turn == 0:
43
+            cart.dx = dy
44
+            cart.dy = -dx
45
+        elif cart.turn == 2:
46
+            cart.dx = -dy
47
+            cart.dy = dx
48
+        cart.turn = (cart.turn + 1) mod 3
49
+
50
+var
51
+    lines = readFile("data/13.txt").splitlines
52
+    grid: seq[string]
53
+    carts: seq[Cart]
54
+
55
+for i, line in lines:
56
+    var gridLine = ""
57
+    for j, c in line:
58
+        case c:
59
+            of '>':
60
+                carts.add(newCart(j, i, 1, 0))
61
+                gridLine &= '-'
62
+            of '<':
63
+                carts.add(newCart(j, i, -1, 0))
64
+                gridLine &= '-'
65
+            of 'v':
66
+                carts.add(newCart(j, i, 0, 1))
67
+                gridLine &= '|'
68
+            of '^':
69
+                carts.add(newCart(j, i, 0, -1))
70
+                gridLine &= '|'
71
+            else:
72
+                gridLine &= c
73
+    grid.add(gridLine)
74
+
75
+var uncrashed = carts.len
76
+
77
+while uncrashed > 1:
78
+    carts.sort(cmpCarts)
79
+    for cart in carts:
80
+        if not cart.crashed:
81
+            cart.move(grid)
82
+            var dupes = carts.cartsAt(cart.x, cart.y)
83
+            if dupes.len > 1:
84
+                if uncrashed == carts.len:
85
+                    echo cart.x, ",", cart.y
86
+                for crash in dupes:
87
+                    crash.crashed = true
88
+                    uncrashed.dec
89
+
90
+for cart in carts:
91
+    if not cart.crashed:
92
+        echo cart.x, ",", cart.y