Compare commits

..

49 commits

Author SHA1 Message Date
Bruno BELANYI 98f700304a 2021: d13: ex2: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 33ac0a0ef7 2021: d13: ex2: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 2653c113c6 2021: d13: ex1: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI e86edd3ac5 2021: d13: ex1: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 6d6e912dbd 2021: d12: ex2: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 3e10ae4592 2021: d12: ex2: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 7c71e71c9b 2021: d12: ex1: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 729f00ade8 2021: d12: ex1: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 9d81eec57c 2021: d11: ex2: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 9d869389d3 2021: d11: ex2: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI bb829a7c63 2021: d11: ex1: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI bd9ac08665 2021: d11: ex1: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 3cc7725710 2021: d10: ex2: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI de7a1e5845 2021: d10: ex2: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI c4e280470c 2021: d10: ex1: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 51a6918e58 2021: d10: ex1: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI b267f9ffaf 2021: d09: ex2: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 98f960ad29 2021: d09: ex2: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI e3655069e2 2021: d09: ex1: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI ad92d95fd4 2021: d09: ex1: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 8080b1af90 2021: d08: ex2: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 2d32ff35fc 2021: d08: ex2: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 1ef5ea9f5a 2021: d08: ex1: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 9482b211a7 2021: d08: ex1: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 7baac920f0 2021: d07: ex2: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 07dea5a686 2021: d07: ex2: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 127c13e162 2021: d07: ex1: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 2c8baf5722 2021: d07: ex1: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI d965e869f3 2021: d06: ex2: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI c9aabe6500 2021: d06: ex2: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI db366100bf 2021: d06: ex1: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 1ad6c51ca4 2021: d06: ex1: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 9721b7d614 2021: d05: ex2: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI f3ece04967 2021: d05: ex2: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 634d057fd7 2021: d05: ex1: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 5c76967db8 2021: d05: ex1: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 943db5516d 2021: d04: ex2: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 648faefa84 2021: d04: ex2: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 6cfd253d9a 2021: d04: ex1: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 56cb23a39b 2021: d04: ex1: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 7d72fb6974 2021: d03: ex2: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 3849629175 2021: d03: ex2: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI d4aec63da5 2021: d03: ex1: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 4f3f276f52 2021: d03: ex1: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI dd83d8ca96 2021: d02: ex2: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI d647f2776f 2021: d02: ex2: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI 1681d65a2a 2021: d02: ex1: add solution 2021-12-13 14:27:09 +01:00
Bruno BELANYI 8592509eba 2021: d02: ex1: add input 2021-12-13 14:27:09 +01:00
Bruno BELANYI ac3bef16fc 2021: d01: ex2: add solution 2021-12-13 14:27:09 +01:00
14 changed files with 1953 additions and 25 deletions

View file

@ -18,7 +18,7 @@ def sliding_window(iterable, n):
def solve(input: List[int]) -> int:
windowed = [sum(window) for window in sliding_window(input, 3)]
return sum(prev < cur for (prev, cur) in itertools.pairwise(windowed))
return sum(prev < cur for (prev, cur) in zip(windowed, windowed[1:]))
def main() -> None:

View file

@ -9,8 +9,8 @@ def solve(input: List[str]) -> int:
x, y = 0, 0
for instruction in input:
dir, length = instruction.split(" ")
length = int(length)
dir, length_ = instruction.split(" ")
length = int(length_)
if dir == "forward":
x += length
elif dir == "down":

View file

@ -9,8 +9,8 @@ def solve(input: List[str]) -> int:
x, y, aim = 0, 0, 0
for instruction in input:
dir, length = instruction.split(" ")
length = int(length)
dir, length_ = instruction.split(" ")
length = int(length_)
if dir == "forward":
x += length
y += length * aim

View file

@ -3,12 +3,10 @@
import itertools
import sys
from collections import Counter
from dataclasses import dataclass
from typing import Iterable, List, Tuple
from typing import Iterable, List, Tuple, NamedTuple
@dataclass
class Point:
class Point(NamedTuple):
x: int
y: int
@ -40,12 +38,12 @@ def solve(input: List[str]) -> int:
if p1.x == p2.x:
for y in inclusive_range_any_order(p1.y, p2.y):
yield (p1.x, y)
yield Point(p1.x, y)
return
if p1.y == p2.y:
for x in inclusive_range_any_order(p1.x, p2.x):
yield (x, p1.y)
yield Point(x, p1.y)
return
assert False # Sanity check

View file

@ -3,12 +3,10 @@
import itertools
import sys
from collections import Counter
from dataclasses import dataclass
from typing import Iterable, List, Tuple
from typing import Iterable, List, Tuple, NamedTuple
@dataclass
class Point:
class Point(NamedTuple):
x: int
y: int
@ -43,7 +41,7 @@ def solve(input: List[str]) -> int:
if p1.y == p2.y:
ys = itertools.repeat(p1.y)
yield from zip(xs, ys)
yield from map(Point._make, zip(xs, ys))
lines = list(map(parse_line, input))
counts = Counter(itertools.chain.from_iterable(line_to_points(l) for l in lines))

View file

@ -4,10 +4,13 @@ import itertools
import sys
from collections import Counter
from dataclasses import dataclass
from typing import Iterator, List
from typing import Iterator, List, TypeVar
def nth(iterable: Iterator[int], n: int) -> int:
T = TypeVar("T")
def nth(iterable: Iterator[T], n: int) -> T:
return next(itertools.islice(iterable, n, None))

View file

@ -4,10 +4,13 @@ import itertools
import sys
from collections import Counter
from dataclasses import dataclass
from typing import Iterator, List
from typing import Iterator, List, TypeVar
def nth(iterable: Iterator[int], n: int) -> int:
T = TypeVar("T")
def nth(iterable: Iterator[T], n: int) -> T:
return next(itertools.islice(iterable, n, None))

View file

@ -19,7 +19,7 @@ def solve(input: List[str]) -> int:
[set(s) for s in signals.split()], [set(o) for o in outputs.split()]
)
def deduce_signals(entry: Entry) -> Dict[int, str]:
def deduce_signals(entry: Entry) -> Dict[int, Set[str]]:
_1, _7, _4, *signals_to_deduce, _8 = sorted(entry.signals, key=len)
signals = {
1: _1,

View file

@ -2,7 +2,7 @@
import itertools
import sys
from typing import List, Optional
from typing import List, Optional, cast
def solve(input: List[str]) -> int:
@ -36,7 +36,7 @@ def solve(input: List[str]) -> int:
}
return sum(
score[line[find_illegal_char(line)]]
score[line[cast(int, find_illegal_char(line))]]
for line in input
if find_illegal_char(line) is not None
)

View file

@ -28,7 +28,7 @@ def solve(input: List[str]) -> int:
return None
def complete_line(input: List[str]) -> str:
def complete_line(input: str) -> str:
chunks: List[str] = []
start_to_end = {
"(": ")",
@ -45,7 +45,7 @@ def solve(input: List[str]) -> int:
# Otherwise we must match the last open chunk
assert start_to_end[chunks.pop()] == c # Sanity check
return reversed(list(start_to_end[c] for c in chunks))
return "".join(reversed(list(start_to_end[c] for c in chunks)))
def score_completion(completion: str) -> int:
char_score = {

71
2021/d13/ex1/ex1.py Executable file
View file

@ -0,0 +1,71 @@
#!/usr/bin/env python
import itertools
import sys
from copy import deepcopy
from typing import Iterable, List, Tuple, cast
Paper = List[List[bool]]
Instruction = Tuple[str, int]
def solve(input: List[str]) -> int:
def transpose(paper: Paper) -> Paper:
return cast(Paper, list(zip(*paper)))
def fold_along_y(paper: Paper, y: int) -> Paper:
assert not any(paper[y]) # Sanity check
assert y >= len(paper) // 2 # Ensure that we can actually fold the paper
paper = deepcopy(paper)
for i, j in zip(itertools.count(y, -1), range(y, len(paper))):
paper[i] = [(dot_i or dot_j) for dot_i, dot_j in zip(paper[i], paper[j])]
paper = paper[:y]
return paper
def fold_along_x(paper: Paper, x: int) -> Paper:
return transpose(fold_along_y(transpose(paper), x))
def do_folds(paper: Paper, instructions: Iterable[Instruction]) -> Paper:
for axis, n in instructions:
if axis == "x":
paper = fold_along_x(paper, n)
elif axis == "y":
paper = fold_along_y(paper, n)
else:
assert False # Sanity check
return paper
def parse() -> Tuple[Paper, List[Instruction]]:
paper_part = itertools.takewhile(lambda s: s != "", input)
fold_part = itertools.islice(
itertools.dropwhile(lambda s: s != "", input), 1, None
)
points = {(int(x), int(y)) for x, y in map(lambda s: s.split(","), paper_part)}
folds = [
(axis[-1], int(n)) for axis, n in map(lambda s: s.split("="), fold_part)
]
width, height = max(p[0] for p in points), max(p[1] for p in points)
paper = [
[(x, y) in points for x in range(width + 1)] for y in range(height + 1)
]
return paper, folds
paper, instructions = parse()
return sum(itertools.chain.from_iterable(do_folds(paper, instructions[:1])))
def main() -> None:
input = [line.strip() for line in sys.stdin.readlines()]
print(solve(input))
if __name__ == "__main__":
main()

890
2021/d13/ex1/input Normal file
View file

@ -0,0 +1,890 @@
1159,502
291,184
850,631
460,631
301,707
768,56
654,829
582,466
490,276
261,3
793,35
559,453
497,288
594,275
458,264
1044,387
654,842
925,22
688,72
224,833
1228,2
1034,487
420,830
172,717
1049,198
669,305
1168,49
157,304
90,669
1036,1
118,549
1084,593
268,61
909,294
467,74
1114,632
1066,609
1058,602
271,35
474,299
1173,35
75,864
470,543
176,100
485,736
199,332
23,634
654,329
748,526
274,395
378,474
910,673
1012,810
383,859
1163,5
353,291
741,383
631,241
179,436
793,75
495,324
321,169
1087,278
1302,361
1232,572
417,317
960,161
1088,642
1161,613
631,653
94,327
244,733
857,549
572,220
75,337
259,5
1235,192
805,393
126,68
1250,723
580,68
397,441
1297,165
700,82
1200,275
214,56
932,711
676,126
676,320
169,388
1049,3
25,319
1218,215
179,217
681,635
512,574
966,371
1124,282
387,444
930,644
179,781
192,247
1061,290
500,557
378,54
855,159
585,891
358,295
545,234
1287,429
425,648
416,579
1255,99
59,290
768,585
1126,733
253,600
1235,332
852,184
223,357
1143,585
1096,36
1125,194
95,677
885,768
870,820
165,527
1201,660
465,291
387,702
1041,872
502,316
358,814
435,747
1217,439
177,113
505,781
850,746
343,38
499,530
85,789
1285,563
321,541
45,15
1295,669
1285,393
363,262
271,347
646,809
1143,794
505,753
224,201
50,420
2,297
507,312
823,100
222,252
1007,241
1116,157
274,499
505,617
1036,137
987,623
22,105
30,239
244,609
835,333
1019,184
572,443
134,613
348,263
927,35
500,625
421,807
763,595
277,838
856,54
1310,52
855,287
166,628
1155,684
609,327
445,892
1116,640
159,346
1116,478
1116,849
982,565
1232,754
1163,337
0,136
422,455
1049,451
857,345
59,640
688,822
507,582
351,485
294,744
1218,383
751,665
969,761
50,165
1253,358
393,59
629,331
550,842
30,80
505,113
731,30
641,761
513,780
221,543
1131,561
1072,315
252,602
87,556
1148,282
902,61
276,308
35,250
1057,600
403,785
113,502
805,501
0,86
1028,364
428,301
1305,353
616,645
199,607
744,68
350,385
412,530
574,554
713,806
1193,327
923,514
952,743
542,586
890,830
378,26
0,394
214,523
335,210
75,30
845,282
395,357
1285,187
597,806
160,154
589,760
52,843
654,117
711,170
137,78
1130,595
959,37
1220,690
797,252
923,444
1285,259
55,99
980,638
641,305
781,549
1126,768
184,161
915,477
731,702
888,868
537,194
738,219
1288,777
982,285
1087,357
595,254
1288,161
266,21
1310,136
1144,745
1111,562
671,893
1198,756
1176,389
1123,372
748,831
1168,400
810,886
805,141
705,614
269,760
417,126
1044,313
1228,226
1158,204
288,645
870,504
266,313
1253,470
954,84
134,806
420,694
348,711
957,623
1285,271
1007,485
428,593
494,493
1051,5
274,698
852,150
1216,327
559,477
522,625
691,644
261,787
823,346
773,775
907,254
1288,789
728,466
559,665
664,809
833,656
258,679
422,474
877,95
1253,246
822,709
224,542
154,456
502,302
171,231
1253,872
1260,824
256,176
372,364
358,743
1056,225
1049,787
1168,285
679,465
157,590
214,820
1051,89
652,358
192,80
888,474
679,241
430,201
681,53
572,668
626,501
724,663
78,98
639,229
591,495
798,721
494,857
437,10
1131,312
1028,194
72,428
1014,151
229,117
1086,835
923,892
515,485
485,288
366,249
1088,252
745,390
266,425
880,649
952,814
656,329
865,78
440,504
397,889
706,294
1096,56
177,672
900,285
154,785
803,582
1126,126
174,466
438,171
658,760
57,694
962,183
440,820
57,134
1138,774
430,733
107,756
1149,600
1242,889
997,57
1156,886
331,497
947,856
671,445
658,358
1118,169
1156,456
276,488
873,884
267,10
880,61
805,589
944,249
412,812
326,394
1265,816
460,74
562,526
377,56
552,61
291,698
822,194
959,241
656,758
1071,332
22,341
565,504
1052,679
1091,299
1217,639
852,296
1268,394
738,883
1238,225
938,194
811,124
1039,347
507,648
460,737
1019,849
177,841
798,270
319,684
915,865
117,226
1006,509
274,163
561,535
497,606
585,3
185,52
30,814
348,183
221,799
395,477
749,887
957,603
1014,631
1310,842
723,473
214,717
1290,768
50,40
1087,2
797,556
425,768
1163,785
387,514
1302,809
813,606
649,786
189,719
343,843
947,262
992,439
93,639
261,451
13,133
932,837
1153,590
582,109
1053,565
922,581
634,320
311,856
1176,281
1265,368
460,605
1084,301
1144,73
341,837
706,729
303,485
445,450
960,385
353,603
1151,122
160,37
564,690
798,574
1049,891
885,563
363,710
879,537
840,49
751,229
1285,779
868,562
353,623
1059,109
269,134
257,329
788,711
462,590
74,490
706,600
602,753
229,246
602,312
1144,628
646,231
1288,105
566,826
619,625
440,717
536,549
1275,250
477,501
1168,721
907,108
708,507
1039,547
13,729
93,455
1118,647
1161,165
74,378
417,518
142,721
967,843
1307,436
947,710
699,773
1280,814
425,200
1260,138
110,395
356,84
1310,381
1146,86
522,631
110,499
5,353
629,563
1242,679
840,319
276,756
134,358
1287,689
152,690
1260,698
217,682
1034,57
440,522
201,773
1193,567
870,729
1253,424
301,719
8,533
738,443
706,165
475,458
256,718
298,875
999,856
894,740
105,246
420,679
668,810
1073,765
301,603
853,756
763,138
991,796
954,19
400,428
1144,266
323,497
938,364
708,312
462,395
870,74
52,644
982,665
1066,40
433,95
421,535
1230,788
997,110
1019,698
161,600
1094,420
559,417
923,702
1022,645
166,821
505,841
162,282
773,119
90,690
977,786
586,231
223,892
457,756
1232,322
512,721
137,443
1201,234
979,49
1258,283
97,246
422,868
1009,187
889,87
251,416
1202,492
1302,533
763,756
597,424
311,221
313,589
1253,134
810,557
1235,30
356,19
982,829
1145,527
132,30
885,648
654,381
654,65
234,816
458,710
1111,332
1019,710
331,49
561,7
440,281
360,150
261,198
440,165
412,59
1131,582
78,754
1009,164
587,501
1029,773
746,690
50,600
1260,756
117,327
257,441
582,557
89,481
400,669
216,249
701,190
50,196
1302,737
933,838
421,87
82,674
80,554
951,30
1089,799
1163,458
562,816
1141,836
65,507
110,691
162,612
189,368
490,170
634,520
179,582
656,198
160,857
1041,760
549,205
994,712
1236,516
1280,239
201,121
706,586
1131,436
629,501
237,70
1285,331
898,82
1230,554
350,161
59,254
945,194
1071,780
1034,308
878,833
1220,669
1049,835
1043,10
142,46
403,109
599,547
403,640
872,723
351,37
562,511
1131,113
462,695
1252,315
179,333
842,282
460,254
887,665
184,768
529,549
269,872
1096,717
117,345
1089,95
159,122
475,436
803,246
597,312
605,614
751,417
542,56
751,453
1015,702
713,760
822,681
595,640
895,108
1056,18
1220,231
1150,717
1173,443
269,470
147,5
214,726
667,0
1243,537
159,621
349,170
1305,338
388,581
611,773
160,149
1228,450
550,700
875,747
305,668
1173,3
418,679
102,833
500,886
1148,612
923,436
894,154
813,288
996,660
922,469
55,302
902,891
1168,718
403,108
490,808
458,184
857,247
678,553
662,887
149,165
1238,785
805,672
520,389
1202,402
1101,700
870,372
1193,119
788,631
734,572
793,371
661,556
1168,848
224,352
505,277
562,368
11,0
888,455
1131,781
865,892
1006,52
298,19
714,385
209,700
803,436
7,679
579,702
522,263
1150,269
1252,586
160,73
1238,428
103,380
1278,374
808,578
169,288
495,845
668,84
137,451
338,182
850,737
587,393
721,555
1275,698
741,105
774,866
803,648
1039,35
1253,200
1303,679
831,278
843,633
421,439
78,572
576,572
852,710
259,889
416,740
294,150
184,817
678,777
994,182
442,562
393,3
885,200
669,761
1150,149
1034,474
542,585
189,67
820,276
65,339
31,416
209,567
502,578
1081,648
445,78
1118,247
217,458
336,455
1126,817
805,753
331,677
25,331
336,439
92,158
960,733
137,603
174,428
734,140
460,157
43,569
58,586
196,632
313,784
199,287
fold along x=655
fold along y=447
fold along x=327
fold along y=223
fold along x=163
fold along y=111
fold along x=81
fold along y=55
fold along x=40
fold along y=27
fold along y=13
fold along y=6

75
2021/d13/ex2/ex2.py Executable file
View file

@ -0,0 +1,75 @@
#!/usr/bin/env python
import itertools
import sys
from copy import deepcopy
from typing import Iterable, List, Tuple, cast
Paper = List[List[bool]]
Instruction = Tuple[str, int]
def solve(input: List[str]) -> None:
def transpose(paper: Paper) -> Paper:
return cast(Paper, list(zip(*paper)))
def fold_along_y(paper: Paper, y: int) -> Paper:
assert not any(paper[y]) # Sanity check
assert y >= len(paper) // 2 # Ensure that we can actually fold the paper
paper = deepcopy(paper)
for i, j in zip(itertools.count(y, -1), range(y, len(paper))):
paper[i] = [(dot_i or dot_j) for dot_i, dot_j in zip(paper[i], paper[j])]
paper = paper[:y]
return paper
def fold_along_x(paper: Paper, x: int) -> Paper:
return transpose(fold_along_y(transpose(paper), x))
def do_folds(paper: Paper, instructions: Iterable[Instruction]) -> Paper:
for axis, n in instructions:
if axis == "x":
paper = fold_along_x(paper, n)
elif axis == "y":
paper = fold_along_y(paper, n)
else:
assert False # Sanity check
return paper
def parse() -> Tuple[Paper, List[Instruction]]:
paper_part = itertools.takewhile(lambda s: s != "", input)
fold_part = itertools.islice(
itertools.dropwhile(lambda s: s != "", input), 1, None
)
points = {(int(x), int(y)) for x, y in map(lambda s: s.split(","), paper_part)}
folds = [
(axis[-1], int(n)) for axis, n in map(lambda s: s.split("="), fold_part)
]
width, height = max(p[0] for p in points), max(p[1] for p in points)
paper = [
[(x, y) in points for x in range(width + 1)] for y in range(height + 1)
]
return paper, folds
def dump(paper: Paper) -> None:
for line in paper:
print("".join("#" if dot else "." for dot in line))
paper, instructions = parse()
dump(do_folds(paper, instructions))
def main() -> None:
input = [line.strip() for line in sys.stdin.readlines()]
solve(input)
if __name__ == "__main__":
main()

890
2021/d13/ex2/input Normal file
View file

@ -0,0 +1,890 @@
1159,502
291,184
850,631
460,631
301,707
768,56
654,829
582,466
490,276
261,3
793,35
559,453
497,288
594,275
458,264
1044,387
654,842
925,22
688,72
224,833
1228,2
1034,487
420,830
172,717
1049,198
669,305
1168,49
157,304
90,669
1036,1
118,549
1084,593
268,61
909,294
467,74
1114,632
1066,609
1058,602
271,35
474,299
1173,35
75,864
470,543
176,100
485,736
199,332
23,634
654,329
748,526
274,395
378,474
910,673
1012,810
383,859
1163,5
353,291
741,383
631,241
179,436
793,75
495,324
321,169
1087,278
1302,361
1232,572
417,317
960,161
1088,642
1161,613
631,653
94,327
244,733
857,549
572,220
75,337
259,5
1235,192
805,393
126,68
1250,723
580,68
397,441
1297,165
700,82
1200,275
214,56
932,711
676,126
676,320
169,388
1049,3
25,319
1218,215
179,217
681,635
512,574
966,371
1124,282
387,444
930,644
179,781
192,247
1061,290
500,557
378,54
855,159
585,891
358,295
545,234
1287,429
425,648
416,579
1255,99
59,290
768,585
1126,733
253,600
1235,332
852,184
223,357
1143,585
1096,36
1125,194
95,677
885,768
870,820
165,527
1201,660
465,291
387,702
1041,872
502,316
358,814
435,747
1217,439
177,113
505,781
850,746
343,38
499,530
85,789
1285,563
321,541
45,15
1295,669
1285,393
363,262
271,347
646,809
1143,794
505,753
224,201
50,420
2,297
507,312
823,100
222,252
1007,241
1116,157
274,499
505,617
1036,137
987,623
22,105
30,239
244,609
835,333
1019,184
572,443
134,613
348,263
927,35
500,625
421,807
763,595
277,838
856,54
1310,52
855,287
166,628
1155,684
609,327
445,892
1116,640
159,346
1116,478
1116,849
982,565
1232,754
1163,337
0,136
422,455
1049,451
857,345
59,640
688,822
507,582
351,485
294,744
1218,383
751,665
969,761
50,165
1253,358
393,59
629,331
550,842
30,80
505,113
731,30
641,761
513,780
221,543
1131,561
1072,315
252,602
87,556
1148,282
902,61
276,308
35,250
1057,600
403,785
113,502
805,501
0,86
1028,364
428,301
1305,353
616,645
199,607
744,68
350,385
412,530
574,554
713,806
1193,327
923,514
952,743
542,586
890,830
378,26
0,394
214,523
335,210
75,30
845,282
395,357
1285,187
597,806
160,154
589,760
52,843
654,117
711,170
137,78
1130,595
959,37
1220,690
797,252
923,444
1285,259
55,99
980,638
641,305
781,549
1126,768
184,161
915,477
731,702
888,868
537,194
738,219
1288,777
982,285
1087,357
595,254
1288,161
266,21
1310,136
1144,745
1111,562
671,893
1198,756
1176,389
1123,372
748,831
1168,400
810,886
805,141
705,614
269,760
417,126
1044,313
1228,226
1158,204
288,645
870,504
266,313
1253,470
954,84
134,806
420,694
348,711
957,623
1285,271
1007,485
428,593
494,493
1051,5
274,698
852,150
1216,327
559,477
522,625
691,644
261,787
823,346
773,775
907,254
1288,789
728,466
559,665
664,809
833,656
258,679
422,474
877,95
1253,246
822,709
224,542
154,456
502,302
171,231
1253,872
1260,824
256,176
372,364
358,743
1056,225
1049,787
1168,285
679,465
157,590
214,820
1051,89
652,358
192,80
888,474
679,241
430,201
681,53
572,668
626,501
724,663
78,98
639,229
591,495
798,721
494,857
437,10
1131,312
1028,194
72,428
1014,151
229,117
1086,835
923,892
515,485
485,288
366,249
1088,252
745,390
266,425
880,649
952,814
656,329
865,78
440,504
397,889
706,294
1096,56
177,672
900,285
154,785
803,582
1126,126
174,466
438,171
658,760
57,694
962,183
440,820
57,134
1138,774
430,733
107,756
1149,600
1242,889
997,57
1156,886
331,497
947,856
671,445
658,358
1118,169
1156,456
276,488
873,884
267,10
880,61
805,589
944,249
412,812
326,394
1265,816
460,74
562,526
377,56
552,61
291,698
822,194
959,241
656,758
1071,332
22,341
565,504
1052,679
1091,299
1217,639
852,296
1268,394
738,883
1238,225
938,194
811,124
1039,347
507,648
460,737
1019,849
177,841
798,270
319,684
915,865
117,226
1006,509
274,163
561,535
497,606
585,3
185,52
30,814
348,183
221,799
395,477
749,887
957,603
1014,631
1310,842
723,473
214,717
1290,768
50,40
1087,2
797,556
425,768
1163,785
387,514
1302,809
813,606
649,786
189,719
343,843
947,262
992,439
93,639
261,451
13,133
932,837
1153,590
582,109
1053,565
922,581
634,320
311,856
1176,281
1265,368
460,605
1084,301
1144,73
341,837
706,729
303,485
445,450
960,385
353,603
1151,122
160,37
564,690
798,574
1049,891
885,563
363,710
879,537
840,49
751,229
1285,779
868,562
353,623
1059,109
269,134
257,329
788,711
462,590
74,490
706,600
602,753
229,246
602,312
1144,628
646,231
1288,105
566,826
619,625
440,717
536,549
1275,250
477,501
1168,721
907,108
708,507
1039,547
13,729
93,455
1118,647
1161,165
74,378
417,518
142,721
967,843
1307,436
947,710
699,773
1280,814
425,200
1260,138
110,395
356,84
1310,381
1146,86
522,631
110,499
5,353
629,563
1242,679
840,319
276,756
134,358
1287,689
152,690
1260,698
217,682
1034,57
440,522
201,773
1193,567
870,729
1253,424
301,719
8,533
738,443
706,165
475,458
256,718
298,875
999,856
894,740
105,246
420,679
668,810
1073,765
301,603
853,756
763,138
991,796
954,19
400,428
1144,266
323,497
938,364
708,312
462,395
870,74
52,644
982,665
1066,40
433,95
421,535
1230,788
997,110
1019,698
161,600
1094,420
559,417
923,702
1022,645
166,821
505,841
162,282
773,119
90,690
977,786
586,231
223,892
457,756
1232,322
512,721
137,443
1201,234
979,49
1258,283
97,246
422,868
1009,187
889,87
251,416
1202,492
1302,533
763,756
597,424
311,221
313,589
1253,134
810,557
1235,30
356,19
982,829
1145,527
132,30
885,648
654,381
654,65
234,816
458,710
1111,332
1019,710
331,49
561,7
440,281
360,150
261,198
440,165
412,59
1131,582
78,754
1009,164
587,501
1029,773
746,690
50,600
1260,756
117,327
257,441
582,557
89,481
400,669
216,249
701,190
50,196
1302,737
933,838
421,87
82,674
80,554
951,30
1089,799
1163,458
562,816
1141,836
65,507
110,691
162,612
189,368
490,170
634,520
179,582
656,198
160,857
1041,760
549,205
994,712
1236,516
1280,239
201,121
706,586
1131,436
629,501
237,70
1285,331
898,82
1230,554
350,161
59,254
945,194
1071,780
1034,308
878,833
1220,669
1049,835
1043,10
142,46
403,109
599,547
403,640
872,723
351,37
562,511
1131,113
462,695
1252,315
179,333
842,282
460,254
887,665
184,768
529,549
269,872
1096,717
117,345
1089,95
159,122
475,436
803,246
597,312
605,614
751,417
542,56
751,453
1015,702
713,760
822,681
595,640
895,108
1056,18
1220,231
1150,717
1173,443
269,470
147,5
214,726
667,0
1243,537
159,621
349,170
1305,338
388,581
611,773
160,149
1228,450
550,700
875,747
305,668
1173,3
418,679
102,833
500,886
1148,612
923,436
894,154
813,288
996,660
922,469
55,302
902,891
1168,718
403,108
490,808
458,184
857,247
678,553
662,887
149,165
1238,785
805,672
520,389
1202,402
1101,700
870,372
1193,119
788,631
734,572
793,371
661,556
1168,848
224,352
505,277
562,368
11,0
888,455
1131,781
865,892
1006,52
298,19
714,385
209,700
803,436
7,679
579,702
522,263
1150,269
1252,586
160,73
1238,428
103,380
1278,374
808,578
169,288
495,845
668,84
137,451
338,182
850,737
587,393
721,555
1275,698
741,105
774,866
803,648
1039,35
1253,200
1303,679
831,278
843,633
421,439
78,572
576,572
852,710
259,889
416,740
294,150
184,817
678,777
994,182
442,562
393,3
885,200
669,761
1150,149
1034,474
542,585
189,67
820,276
65,339
31,416
209,567
502,578
1081,648
445,78
1118,247
217,458
336,455
1126,817
805,753
331,677
25,331
336,439
92,158
960,733
137,603
174,428
734,140
460,157
43,569
58,586
196,632
313,784
199,287
fold along x=655
fold along y=447
fold along x=327
fold along y=223
fold along x=163
fold along y=111
fold along x=81
fold along y=55
fold along x=40
fold along y=27
fold along y=13
fold along y=6