Browse Source

Initial import of days 1-6

master
Chris Smith 8 years ago
parent
commit
5f26e8dd72
11 changed files with 2444 additions and 0 deletions
  1. 16
    0
      1.py
  2. 1
    0
      1.txt
  3. 17
    0
      2.py
  4. 1000
    0
      2.txt
  5. 23
    0
      3.py
  6. 1
    0
      3.txt
  7. 14
    0
      4.py
  8. 31
    0
      5.py
  9. 1000
    0
      5.txt
  10. 41
    0
      6.py
  11. 300
    0
      6.txt

+ 16
- 0
1.py View File

@@ -0,0 +1,16 @@
1
+#!/usr/bin/python
2
+
3
+with open('1.txt', 'r') as file:
4
+    input = file.read()
5
+
6
+floor = 0
7
+position = 1
8
+
9
+while True:
10
+    floor += 1 if input[position - 1] == '(' else -1
11
+
12
+    if floor < 0:
13
+        print('Position %s' % position)
14
+        break
15
+
16
+    position += 1

+ 1
- 0
1.txt
File diff suppressed because it is too large
View File


+ 17
- 0
2.py View File

@@ -0,0 +1,17 @@
1
+#!/usr/bin/python
2
+
3
+with open('2.txt', 'r') as file:
4
+    input = file.read()
5
+
6
+paper = 0
7
+ribbon = 0
8
+
9
+for line in input.split('\n'):
10
+    (w, h, d) = [int(x) for x in line.split('x')]
11
+    areas = [w*h, w*d, h*d]
12
+    perims = [2 * x for x in [w+h, w+d, h+d]]
13
+    paper += sum(areas) * 2 + min(areas)
14
+    ribbon += min(perims) + w*h*d
15
+
16
+print("Paper: %s" % paper)
17
+print("Ribbon: %s" % ribbon)

+ 1000
- 0
2.txt
File diff suppressed because it is too large
View File


+ 23
- 0
3.py View File

@@ -0,0 +1,23 @@
1
+#!/usr/bin/python
2
+
3
+with open('3.txt', 'r') as file:
4
+    input = file.read()
5
+
6
+locations = [[0, 0], [0, 0]]
7
+visited = {'0,0': True}
8
+i = 0
9
+
10
+for dir in input:
11
+    if dir == '^':
12
+        locations[i][1] -= 1
13
+    if dir == 'v':
14
+        locations[i][1] += 1
15
+    if dir == '>':
16
+        locations[i][0] += 1
17
+    if dir == '<':
18
+        locations[i][0] -= 1
19
+
20
+    visited['%s,%s' % (locations[i][0], locations[i][1])] = True
21
+    i = 1 - i  # (Remove this line if only Santa is delivering)
22
+
23
+print(len(visited))

+ 1
- 0
3.txt
File diff suppressed because it is too large
View File


+ 14
- 0
4.py View File

@@ -0,0 +1,14 @@
1
+#!/usr/bin/python
2
+
3
+import hashlib
4
+
5
+input = 'ckczppom'
6
+count = -1
7
+hash = '111111'
8
+
9
+while hash[0:6] != '000000':
10
+    count += 1
11
+    hash = hashlib.md5("%s%s" % (input, count)).hexdigest()
12
+
13
+print(count)
14
+print(hash)

+ 31
- 0
5.py View File

@@ -0,0 +1,31 @@
1
+#!/usr/bin/python
2
+
3
+import re
4
+
5
+
6
+def is_nice_1(word):
7
+    has_vowels = len(re.sub('[^aeiou]+', '', word)) >= 3
8
+    has_doubles = re.search('(.)\\1', word) is not None
9
+    has_bad_letters = re.search('ab|cd|pq|xy', word) is not None
10
+    return has_vowels and has_doubles and not has_bad_letters
11
+
12
+
13
+def is_nice_2(word):
14
+    has_repeated_pair = re.search('(..).*?\\1', word) is not None
15
+    has_repeated_letter = re.search('(.).\\1', word) is not None
16
+    return has_repeated_pair and has_repeated_letter
17
+
18
+
19
+with open('5.txt', 'r') as file:
20
+    input = file.read()
21
+
22
+nice_1 = 0
23
+nice_2 = 0
24
+for string in input.splitlines():
25
+    if is_nice_1(string):
26
+        nice_1 += 1
27
+    if is_nice_2(string):
28
+        nice_2 += 1
29
+
30
+print(nice_1)
31
+print(nice_2)

+ 1000
- 0
5.txt
File diff suppressed because it is too large
View File


+ 41
- 0
6.py View File

@@ -0,0 +1,41 @@
1
+#!/usr/bin/python
2
+
3
+PART_TWO = True
4
+
5
+
6
+def turn_on(old):
7
+    return old + 1 if PART_TWO else True
8
+
9
+
10
+def turn_off(old):
11
+    return max(0, old - 1) if PART_TWO else False
12
+
13
+
14
+def toggle(old):
15
+    return old + 2 if PART_TWO else not old
16
+
17
+
18
+with open('6.txt', 'r') as file:
19
+    input = file.read()
20
+
21
+state = [[0 if PART_TWO else False for x in range(1000)] for y in range(1000)]
22
+
23
+for line in input.splitlines():
24
+    if line.startswith('turn on'):
25
+        action = turn_on
26
+        line = line[8:]
27
+    elif line.startswith('turn off'):
28
+        action = turn_off
29
+        line = line[9:]
30
+    else:
31
+        action = toggle
32
+        line = line[7:]
33
+
34
+    ((x1, y1), (x2, y2)) = [coord.split(',') for coord in line.split(' through ')]
35
+
36
+    for x in range(int(x1), int(x2) + 1):
37
+        for y in range(int(y1), int(y2) + 1):
38
+            state[x][y] = action(state[x][y])
39
+
40
+count = sum([sum(col) for col in state])
41
+print(count)

+ 300
- 0
6.txt View File

@@ -0,0 +1,300 @@
1
+turn off 660,55 through 986,197
2
+turn off 341,304 through 638,850
3
+turn off 199,133 through 461,193
4
+toggle 322,558 through 977,958
5
+toggle 537,781 through 687,941
6
+turn on 226,196 through 599,390
7
+turn on 240,129 through 703,297
8
+turn on 317,329 through 451,798
9
+turn on 957,736 through 977,890
10
+turn on 263,530 through 559,664
11
+turn on 158,270 through 243,802
12
+toggle 223,39 through 454,511
13
+toggle 544,218 through 979,872
14
+turn on 313,306 through 363,621
15
+toggle 173,401 through 496,407
16
+toggle 333,60 through 748,159
17
+turn off 87,577 through 484,608
18
+turn on 809,648 through 826,999
19
+toggle 352,432 through 628,550
20
+turn off 197,408 through 579,569
21
+turn off 1,629 through 802,633
22
+turn off 61,44 through 567,111
23
+toggle 880,25 through 903,973
24
+turn on 347,123 through 864,746
25
+toggle 728,877 through 996,975
26
+turn on 121,895 through 349,906
27
+turn on 888,547 through 931,628
28
+toggle 398,782 through 834,882
29
+turn on 966,850 through 989,953
30
+turn off 891,543 through 914,991
31
+toggle 908,77 through 916,117
32
+turn on 576,900 through 943,934
33
+turn off 580,170 through 963,206
34
+turn on 184,638 through 192,944
35
+toggle 940,147 through 978,730
36
+turn off 854,56 through 965,591
37
+toggle 717,172 through 947,995
38
+toggle 426,987 through 705,998
39
+turn on 987,157 through 992,278
40
+toggle 995,774 through 997,784
41
+turn off 796,96 through 845,182
42
+turn off 451,87 through 711,655
43
+turn off 380,93 through 968,676
44
+turn on 263,468 through 343,534
45
+turn on 917,936 through 928,959
46
+toggle 478,7 through 573,148
47
+turn off 428,339 through 603,624
48
+turn off 400,880 through 914,953
49
+toggle 679,428 through 752,779
50
+turn off 697,981 through 709,986
51
+toggle 482,566 through 505,725
52
+turn off 956,368 through 993,516
53
+toggle 735,823 through 783,883
54
+turn off 48,487 through 892,496
55
+turn off 116,680 through 564,819
56
+turn on 633,865 through 729,930
57
+turn off 314,618 through 571,922
58
+toggle 138,166 through 936,266
59
+turn on 444,732 through 664,960
60
+turn off 109,337 through 972,497
61
+turn off 51,432 through 77,996
62
+turn off 259,297 through 366,744
63
+toggle 801,130 through 917,544
64
+toggle 767,982 through 847,996
65
+turn on 216,507 through 863,885
66
+turn off 61,441 through 465,731
67
+turn on 849,970 through 944,987
68
+toggle 845,76 through 852,951
69
+toggle 732,615 through 851,936
70
+toggle 251,128 through 454,778
71
+turn on 324,429 through 352,539
72
+toggle 52,450 through 932,863
73
+turn off 449,379 through 789,490
74
+turn on 317,319 through 936,449
75
+toggle 887,670 through 957,838
76
+toggle 671,613 through 856,664
77
+turn off 186,648 through 985,991
78
+turn off 471,689 through 731,717
79
+toggle 91,331 through 750,758
80
+toggle 201,73 through 956,524
81
+toggle 82,614 through 520,686
82
+toggle 84,287 through 467,734
83
+turn off 132,367 through 208,838
84
+toggle 558,684 through 663,920
85
+turn on 237,952 through 265,997
86
+turn on 694,713 through 714,754
87
+turn on 632,523 through 862,827
88
+turn on 918,780 through 948,916
89
+turn on 349,586 through 663,976
90
+toggle 231,29 through 257,589
91
+toggle 886,428 through 902,993
92
+turn on 106,353 through 236,374
93
+turn on 734,577 through 759,684
94
+turn off 347,843 through 696,912
95
+turn on 286,699 through 964,883
96
+turn on 605,875 through 960,987
97
+turn off 328,286 through 869,461
98
+turn off 472,569 through 980,848
99
+toggle 673,573 through 702,884
100
+turn off 398,284 through 738,332
101
+turn on 158,50 through 284,411
102
+turn off 390,284 through 585,663
103
+turn on 156,579 through 646,581
104
+turn on 875,493 through 989,980
105
+toggle 486,391 through 924,539
106
+turn on 236,722 through 272,964
107
+toggle 228,282 through 470,581
108
+toggle 584,389 through 750,761
109
+turn off 899,516 through 900,925
110
+turn on 105,229 through 822,846
111
+turn off 253,77 through 371,877
112
+turn on 826,987 through 906,992
113
+turn off 13,152 through 615,931
114
+turn on 835,320 through 942,399
115
+turn on 463,504 through 536,720
116
+toggle 746,942 through 786,998
117
+turn off 867,333 through 965,403
118
+turn on 591,477 through 743,692
119
+turn off 403,437 through 508,908
120
+turn on 26,723 through 368,814
121
+turn on 409,485 through 799,809
122
+turn on 115,630 through 704,705
123
+turn off 228,183 through 317,220
124
+toggle 300,649 through 382,842
125
+turn off 495,365 through 745,562
126
+turn on 698,346 through 744,873
127
+turn on 822,932 through 951,934
128
+toggle 805,30 through 925,421
129
+toggle 441,152 through 653,274
130
+toggle 160,81 through 257,587
131
+turn off 350,781 through 532,917
132
+toggle 40,583 through 348,636
133
+turn on 280,306 through 483,395
134
+toggle 392,936 through 880,955
135
+toggle 496,591 through 851,934
136
+turn off 780,887 through 946,994
137
+turn off 205,735 through 281,863
138
+toggle 100,876 through 937,915
139
+turn on 392,393 through 702,878
140
+turn on 956,374 through 976,636
141
+toggle 478,262 through 894,775
142
+turn off 279,65 through 451,677
143
+turn on 397,541 through 809,847
144
+turn on 444,291 through 451,586
145
+toggle 721,408 through 861,598
146
+turn on 275,365 through 609,382
147
+turn on 736,24 through 839,72
148
+turn off 86,492 through 582,712
149
+turn on 676,676 through 709,703
150
+turn off 105,710 through 374,817
151
+toggle 328,748 through 845,757
152
+toggle 335,79 through 394,326
153
+toggle 193,157 through 633,885
154
+turn on 227,48 through 769,743
155
+toggle 148,333 through 614,568
156
+toggle 22,30 through 436,263
157
+toggle 547,447 through 688,969
158
+toggle 576,621 through 987,740
159
+turn on 711,334 through 799,515
160
+turn on 541,448 through 654,951
161
+toggle 792,199 through 798,990
162
+turn on 89,956 through 609,960
163
+toggle 724,433 through 929,630
164
+toggle 144,895 through 201,916
165
+toggle 226,730 through 632,871
166
+turn off 760,819 through 828,974
167
+toggle 887,180 through 940,310
168
+toggle 222,327 through 805,590
169
+turn off 630,824 through 885,963
170
+turn on 940,740 through 954,946
171
+turn on 193,373 through 779,515
172
+toggle 304,955 through 469,975
173
+turn off 405,480 through 546,960
174
+turn on 662,123 through 690,669
175
+turn off 615,238 through 750,714
176
+turn on 423,220 through 930,353
177
+turn on 329,769 through 358,970
178
+toggle 590,151 through 704,722
179
+turn off 884,539 through 894,671
180
+toggle 449,241 through 984,549
181
+toggle 449,260 through 496,464
182
+turn off 306,448 through 602,924
183
+turn on 286,805 through 555,901
184
+toggle 722,177 through 922,298
185
+toggle 491,554 through 723,753
186
+turn on 80,849 through 174,996
187
+turn off 296,561 through 530,856
188
+toggle 653,10 through 972,284
189
+toggle 529,236 through 672,614
190
+toggle 791,598 through 989,695
191
+turn on 19,45 through 575,757
192
+toggle 111,55 through 880,871
193
+turn off 197,897 through 943,982
194
+turn on 912,336 through 977,605
195
+toggle 101,221 through 537,450
196
+turn on 101,104 through 969,447
197
+toggle 71,527 through 587,717
198
+toggle 336,445 through 593,889
199
+toggle 214,179 through 575,699
200
+turn on 86,313 through 96,674
201
+toggle 566,427 through 906,888
202
+turn off 641,597 through 850,845
203
+turn on 606,524 through 883,704
204
+turn on 835,775 through 867,887
205
+toggle 547,301 through 897,515
206
+toggle 289,930 through 413,979
207
+turn on 361,122 through 457,226
208
+turn on 162,187 through 374,746
209
+turn on 348,461 through 454,675
210
+turn off 966,532 through 985,537
211
+turn on 172,354 through 630,606
212
+turn off 501,880 through 680,993
213
+turn off 8,70 through 566,592
214
+toggle 433,73 through 690,651
215
+toggle 840,798 through 902,971
216
+toggle 822,204 through 893,760
217
+turn off 453,496 through 649,795
218
+turn off 969,549 through 990,942
219
+turn off 789,28 through 930,267
220
+toggle 880,98 through 932,434
221
+toggle 568,674 through 669,753
222
+turn on 686,228 through 903,271
223
+turn on 263,995 through 478,999
224
+toggle 534,675 through 687,955
225
+turn off 342,434 through 592,986
226
+toggle 404,768 through 677,867
227
+toggle 126,723 through 978,987
228
+toggle 749,675 through 978,959
229
+turn off 445,330 through 446,885
230
+turn off 463,205 through 924,815
231
+turn off 417,430 through 915,472
232
+turn on 544,990 through 912,999
233
+turn off 201,255 through 834,789
234
+turn off 261,142 through 537,862
235
+turn off 562,934 through 832,984
236
+turn off 459,978 through 691,980
237
+turn off 73,911 through 971,972
238
+turn on 560,448 through 723,810
239
+turn on 204,630 through 217,854
240
+turn off 91,259 through 611,607
241
+turn on 877,32 through 978,815
242
+turn off 950,438 through 974,746
243
+toggle 426,30 through 609,917
244
+toggle 696,37 through 859,201
245
+toggle 242,417 through 682,572
246
+turn off 388,401 through 979,528
247
+turn off 79,345 through 848,685
248
+turn off 98,91 through 800,434
249
+toggle 650,700 through 972,843
250
+turn off 530,450 through 538,926
251
+turn on 428,559 through 962,909
252
+turn on 78,138 through 92,940
253
+toggle 194,117 through 867,157
254
+toggle 785,355 through 860,617
255
+turn off 379,441 through 935,708
256
+turn off 605,133 through 644,911
257
+toggle 10,963 through 484,975
258
+turn off 359,988 through 525,991
259
+turn off 509,138 through 787,411
260
+toggle 556,467 through 562,773
261
+turn on 119,486 through 246,900
262
+turn on 445,561 through 794,673
263
+turn off 598,681 through 978,921
264
+turn off 974,230 through 995,641
265
+turn off 760,75 through 800,275
266
+toggle 441,215 through 528,680
267
+turn off 701,636 through 928,877
268
+turn on 165,753 through 202,780
269
+toggle 501,412 through 998,516
270
+toggle 161,105 through 657,395
271
+turn on 113,340 through 472,972
272
+toggle 384,994 through 663,999
273
+turn on 969,994 through 983,997
274
+turn on 519,600 through 750,615
275
+turn off 363,899 through 948,935
276
+turn on 271,845 through 454,882
277
+turn off 376,528 through 779,640
278
+toggle 767,98 through 854,853
279
+toggle 107,322 through 378,688
280
+turn off 235,899 through 818,932
281
+turn on 445,611 through 532,705
282
+toggle 629,387 through 814,577
283
+toggle 112,414 through 387,421
284
+toggle 319,184 through 382,203
285
+turn on 627,796 through 973,940
286
+toggle 602,45 through 763,151
287
+turn off 441,375 through 974,545
288
+toggle 871,952 through 989,998
289
+turn on 717,272 through 850,817
290
+toggle 475,711 through 921,882
291
+toggle 66,191 through 757,481
292
+turn off 50,197 through 733,656
293
+toggle 83,575 through 915,728
294
+turn on 777,812 through 837,912
295
+turn on 20,984 through 571,994
296
+turn off 446,432 through 458,648
297
+turn on 715,871 through 722,890
298
+toggle 424,675 through 740,862
299
+toggle 580,592 through 671,900
300
+toggle 296,687 through 906,775

Loading…
Cancel
Save