feat: clean up old solutions
This commit is contained in:
parent
54865ba454
commit
e5fdc2e5fc
390
1/input.txt
390
1/input.txt
@ -1,200 +1,200 @@
|
||||
1844
|
||||
1123
|
||||
1490
|
||||
1478
|
||||
1108
|
||||
1120
|
||||
1594
|
||||
1101
|
||||
1831
|
||||
1146
|
||||
1084
|
||||
1535
|
||||
1016
|
||||
1722
|
||||
1388
|
||||
1188
|
||||
1351
|
||||
1477
|
||||
1215
|
||||
1678
|
||||
1159
|
||||
1558
|
||||
1581
|
||||
1400
|
||||
1550
|
||||
1306
|
||||
1852
|
||||
1745
|
||||
1224
|
||||
1896
|
||||
1596
|
||||
1005
|
||||
1499
|
||||
1797
|
||||
976
|
||||
1777
|
||||
1129
|
||||
1601
|
||||
1058
|
||||
1510
|
||||
1704
|
||||
1818
|
||||
1795
|
||||
1364
|
||||
1276
|
||||
1362
|
||||
1801
|
||||
1985
|
||||
1421
|
||||
1311
|
||||
1855
|
||||
1977
|
||||
1613
|
||||
1951
|
||||
2001
|
||||
1327
|
||||
1872
|
||||
1517
|
||||
1040
|
||||
1692
|
||||
1595
|
||||
1769
|
||||
1956
|
||||
1763
|
||||
1470
|
||||
1898
|
||||
1366
|
||||
1443
|
||||
312
|
||||
1685
|
||||
1014
|
||||
1409
|
||||
1717
|
||||
1105
|
||||
1290
|
||||
1703
|
||||
1732
|
||||
1939
|
||||
1790
|
||||
1164
|
||||
1225
|
||||
1474
|
||||
1713
|
||||
1413
|
||||
1906
|
||||
1488
|
||||
1931
|
||||
1702
|
||||
1848
|
||||
1668
|
||||
1737
|
||||
1614
|
||||
1719
|
||||
1647
|
||||
1171
|
||||
1508
|
||||
1035
|
||||
1133
|
||||
1179
|
||||
1180
|
||||
1472
|
||||
1414
|
||||
1659
|
||||
1820
|
||||
1544
|
||||
1697
|
||||
1175
|
||||
1033
|
||||
1805
|
||||
1576
|
||||
1196
|
||||
1597
|
||||
1739
|
||||
1291
|
||||
1103
|
||||
1457
|
||||
1514
|
||||
1462
|
||||
1619
|
||||
1683
|
||||
1338
|
||||
1604
|
||||
1372
|
||||
1653
|
||||
16
|
||||
1725
|
||||
1181
|
||||
1952
|
||||
1201
|
||||
1531
|
||||
1505
|
||||
1912
|
||||
1527
|
||||
1853
|
||||
1905
|
||||
1833
|
||||
1913
|
||||
1131
|
||||
1069
|
||||
1537
|
||||
1757
|
||||
1890
|
||||
1750
|
||||
1440
|
||||
1822
|
||||
1957
|
||||
2005
|
||||
1979
|
||||
1405
|
||||
2003
|
||||
1997
|
||||
1741
|
||||
1494
|
||||
1780
|
||||
1774
|
||||
1813
|
||||
447
|
||||
1429
|
||||
1990
|
||||
1767
|
||||
1969
|
||||
1787
|
||||
1944
|
||||
1863
|
||||
1778
|
||||
2004
|
||||
1991
|
||||
1754
|
||||
1551
|
||||
1435
|
||||
1914
|
||||
1093
|
||||
1273
|
||||
1726
|
||||
1094
|
||||
1439
|
||||
1689
|
||||
1607
|
||||
1646
|
||||
1588
|
||||
1698
|
||||
1539
|
||||
1493
|
||||
1352
|
||||
1163
|
||||
1482
|
||||
1044
|
||||
1748
|
||||
1756
|
||||
1977
|
||||
611
|
||||
1934
|
||||
1818
|
||||
1924
|
||||
528
|
||||
1753
|
||||
1867
|
||||
1865
|
||||
1799
|
||||
1743
|
||||
1955
|
||||
1993
|
||||
1972
|
||||
1987
|
||||
1960
|
||||
1817
|
||||
1837
|
||||
1900
|
||||
1839
|
||||
1946
|
||||
1786
|
||||
1857
|
||||
1840
|
||||
1985
|
||||
1850
|
||||
1801
|
||||
1926
|
||||
1523
|
||||
1142
|
||||
1253
|
||||
1250
|
||||
1886
|
||||
1492
|
||||
1737
|
||||
1909
|
||||
1766
|
||||
1986
|
||||
1049
|
||||
1330
|
||||
1219
|
||||
1162
|
||||
1088
|
||||
1100
|
||||
1532
|
||||
1727
|
||||
1761
|
||||
1107
|
||||
1916
|
||||
1220
|
||||
1319
|
||||
1098
|
||||
1431
|
||||
1260
|
||||
1642
|
||||
1269
|
||||
1102
|
||||
1432
|
||||
1267
|
||||
1824
|
||||
1658
|
||||
1149
|
||||
1024
|
||||
1963
|
||||
1498
|
||||
1904
|
||||
1812
|
||||
1600
|
||||
1773
|
||||
1283
|
||||
1463
|
||||
1749
|
||||
1781
|
||||
1760
|
||||
1849
|
||||
1833
|
||||
1854
|
||||
1814
|
||||
1820
|
||||
2000
|
||||
1834
|
||||
1851
|
||||
1779
|
||||
1825
|
||||
1885
|
||||
1882
|
||||
1912
|
||||
962
|
||||
1988
|
||||
302
|
||||
1965
|
||||
1751
|
||||
1764
|
||||
1844
|
||||
1949
|
||||
1984
|
||||
1933
|
||||
958
|
||||
1746
|
||||
1999
|
||||
1914
|
||||
1989
|
||||
1879
|
||||
1954
|
||||
1827
|
||||
1816
|
||||
1918
|
||||
633
|
||||
1797
|
||||
1811
|
||||
1936
|
||||
1961
|
||||
1937
|
||||
1829
|
||||
1788
|
||||
1772
|
||||
1505
|
||||
1905
|
||||
1304
|
||||
1404
|
||||
1868
|
||||
1978
|
||||
1872
|
||||
2006
|
||||
1256
|
||||
1883
|
||||
1966
|
||||
1931
|
||||
1796
|
||||
1793
|
||||
714
|
||||
1904
|
||||
1841
|
||||
1824
|
||||
1962
|
||||
1739
|
||||
1897
|
||||
1906
|
||||
1735
|
||||
1876
|
||||
873
|
||||
1959
|
||||
1963
|
||||
1917
|
||||
1804
|
||||
1789
|
||||
1782
|
||||
1848
|
||||
1828
|
||||
1826
|
||||
1929
|
||||
1525
|
||||
1862
|
||||
1952
|
||||
1878
|
||||
1775
|
||||
1776
|
||||
1406
|
||||
1430
|
||||
1943
|
||||
1938
|
||||
1941
|
||||
1594
|
||||
1928
|
||||
1856
|
||||
1903
|
||||
1871
|
||||
1836
|
||||
1847
|
||||
1956
|
||||
1915
|
||||
1870
|
||||
1875
|
||||
1892
|
||||
276
|
||||
1896
|
||||
1945
|
||||
1821
|
||||
1947
|
||||
1898
|
||||
1802
|
||||
1853
|
||||
1895
|
||||
1790
|
||||
1819
|
||||
1980
|
||||
1832
|
||||
1673
|
||||
1964
|
||||
1800
|
||||
1971
|
||||
1842
|
||||
2002
|
||||
1921
|
||||
1940
|
||||
1845
|
||||
1527
|
||||
1428
|
||||
1932
|
||||
1893
|
||||
1908
|
||||
1889
|
||||
1974
|
||||
1981
|
||||
1791
|
||||
1975
|
||||
|
180
10/input.txt
180
10/input.txt
@ -1,100 +1,98 @@
|
||||
30
|
||||
73
|
||||
84
|
||||
136
|
||||
132
|
||||
117
|
||||
65
|
||||
161
|
||||
49
|
||||
68
|
||||
139
|
||||
46
|
||||
21
|
||||
127
|
||||
109
|
||||
153
|
||||
163
|
||||
160
|
||||
18
|
||||
22
|
||||
131
|
||||
146
|
||||
62
|
||||
113
|
||||
172
|
||||
150
|
||||
171
|
||||
118
|
||||
14
|
||||
98
|
||||
93
|
||||
130
|
||||
170
|
||||
59
|
||||
1
|
||||
110
|
||||
154
|
||||
71
|
||||
127
|
||||
38
|
||||
50
|
||||
36
|
||||
132
|
||||
66
|
||||
121
|
||||
65
|
||||
26
|
||||
119
|
||||
46
|
||||
2
|
||||
55
|
||||
37
|
||||
44
|
||||
148
|
||||
102
|
||||
140
|
||||
95
|
||||
133
|
||||
15
|
||||
40
|
||||
28
|
||||
35
|
||||
43
|
||||
32
|
||||
137
|
||||
45
|
||||
155
|
||||
156
|
||||
97
|
||||
145
|
||||
44
|
||||
153
|
||||
96
|
||||
104
|
||||
58
|
||||
149
|
||||
75
|
||||
72
|
||||
57
|
||||
76
|
||||
56
|
||||
169
|
||||
143
|
||||
11
|
||||
138
|
||||
37
|
||||
9
|
||||
82
|
||||
62
|
||||
17
|
||||
88
|
||||
33
|
||||
5
|
||||
141
|
||||
83
|
||||
15
|
||||
105
|
||||
142
|
||||
36
|
||||
116
|
||||
11
|
||||
45
|
||||
82
|
||||
10
|
||||
17
|
||||
159
|
||||
140
|
||||
12
|
||||
108
|
||||
29
|
||||
72
|
||||
121
|
||||
52
|
||||
91
|
||||
166
|
||||
88
|
||||
97
|
||||
118
|
||||
99
|
||||
124
|
||||
149
|
||||
16
|
||||
9
|
||||
143
|
||||
104
|
||||
57
|
||||
79
|
||||
123
|
||||
58
|
||||
96
|
||||
24
|
||||
162
|
||||
134
|
||||
114
|
||||
23
|
||||
92
|
||||
69
|
||||
147
|
||||
156
|
||||
25
|
||||
133
|
||||
34
|
||||
8
|
||||
85
|
||||
76
|
||||
111
|
||||
81
|
||||
21
|
||||
103
|
||||
122
|
||||
126
|
||||
18
|
||||
8
|
||||
43
|
||||
108
|
||||
120
|
||||
16
|
||||
146
|
||||
110
|
||||
144
|
||||
124
|
||||
67
|
||||
79
|
||||
59
|
||||
89
|
||||
87
|
||||
131
|
||||
80
|
||||
139
|
||||
31
|
||||
115
|
||||
107
|
||||
53
|
||||
68
|
||||
130
|
||||
101
|
||||
22
|
||||
125
|
||||
83
|
||||
92
|
||||
30
|
||||
39
|
||||
102
|
||||
47
|
||||
109
|
||||
152
|
||||
1
|
||||
29
|
||||
86
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
adapters = []
|
||||
with open("input.txt") as f:
|
||||
adapters = list(int(num) for num in f.read().split("\n"))
|
||||
adapters = list(int(num) for num in f.read().splitlines())
|
||||
|
||||
adapters.append(0)
|
||||
adapters.sort()
|
||||
@ -15,4 +15,4 @@ for i in range(0, len(adapters)-1):
|
||||
numOf1Diff += 1
|
||||
elif diff == 3:
|
||||
numOf3Diff += 1
|
||||
print(numOf1Diff * numOf3Diff)
|
||||
print(numOf1Diff * numOf3Diff)
|
||||
|
28
10/part2.py
28
10/part2.py
@ -1,7 +1,7 @@
|
||||
|
||||
adapters = []
|
||||
with open("input.txt") as f:
|
||||
adapters = list(int(num) for num in f.read().split("\n"))
|
||||
adapters = list(int(num) for num in f.read().splitlines())
|
||||
|
||||
adapters.append(0)
|
||||
adapters.sort()
|
||||
@ -10,17 +10,17 @@ adapters.append(adapters[-1]+3)
|
||||
memo = {}
|
||||
memo[adapters[-1]] = 1
|
||||
def getNumOfCombinations(adapterList):
|
||||
if memo.get(adapterList[0]):
|
||||
return memo[adapterList[0]]
|
||||
combinations = 1
|
||||
for i in range(1, len(adapterList)):
|
||||
diff = adapterList[i] - adapterList[0]
|
||||
if 0 < diff <= 3:
|
||||
combinations += getNumOfCombinations(adapterList[i:])
|
||||
else:
|
||||
break
|
||||
combinations = combinations - 1
|
||||
memo[adapterList[0]] = combinations
|
||||
return combinations
|
||||
if memo.get(adapterList[0]):
|
||||
return memo[adapterList[0]]
|
||||
combinations = 1
|
||||
for i in range(1, len(adapterList)):
|
||||
diff = adapterList[i] - adapterList[0]
|
||||
if 0 < diff <= 3:
|
||||
combinations += getNumOfCombinations(adapterList[i:])
|
||||
else:
|
||||
break
|
||||
combinations = combinations - 1
|
||||
memo[adapterList[0]] = combinations
|
||||
return combinations
|
||||
|
||||
print(getNumOfCombinations(adapters))
|
||||
print(getNumOfCombinations(adapters))
|
||||
|
196
11/input.txt
196
11/input.txt
@ -1,97 +1,99 @@
|
||||
LLLLLLLLL.L.LLL.L.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
L..LL.L.L....L..L.L....L.....L.L.L......L..L..L....L.LL.......L.....L....L..L................L....
|
||||
LLLLLLLLLLLLLLL.LLL.LLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL..LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLL.LLLLLLLLL.LLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLL.LLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LL.LLLLLLLLLLLL.LLL.LLL.LLLLLLLL.LLLLLLLL.LLLLLLL..LLLL.LLLLLLL.LLLL.LLLLLL.LLLLL.LLLL.LL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLL.L.LLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLL.LLLL.LLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLL.LL.LLLLLLLLLLLLLLLL
|
||||
.LLLL..L.L..L....L.LLL...LLL..L.L....L.L.L...L.....L...L.....L...L..L...LL...L..LLL..L...L....L..L
|
||||
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLL.LLLL..LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL..LLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL
|
||||
.....LL...LL..L...L..L..LL.L..LLL...L..L.LLL...LLL..L.....L...L.....L........LLLL..LLL.....L....L.
|
||||
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LL
|
||||
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLL.LL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLL.L
|
||||
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLL.LLLLLLLLL.LLLLLLL.LLLL.LLL.LL.LLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLL.LLLLLLLL
|
||||
....L..LL.L.L......L..LL.......LL......L..L...L..L.........LL....LL.LLL..LLLL..L..L.......L....L..
|
||||
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLL.L.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLL.LLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
.LL..LLLLL.LL.L...L...L...L....LLLL...LLLL.LL...LL...L.LL...LL..LL.L..L......L....L.L.L.L...LL...L
|
||||
LLLLLLLLL.LLLLLLLLLLLLL..LLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLLLLL.LL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLL.L.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL..LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LL.LL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLL.LLLLL.L.LLLLLLLL
|
||||
....L.........LL...L.L..LL.L.L..L......L.L.L...L....L.......LL.LL....L.L...L....L...L....L...L....
|
||||
L.LLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LL..LLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLL..LLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.L.LLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLL.LL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLL..L.L........L...L..L.LLLLLLL..LLLL..L...L..L.L..LLL....L..L.LLL..L...L..L.......L.LLLLLL.LL.L.
|
||||
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LL.LLLL.LLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LL.LL.LLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLL.LLL.LLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
L...L.....LL....L.L.LLLLL.....L....LL..L.....L...L.L.LL.......LL...LL............L.L..L..LLL..LL..
|
||||
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLL.LLLLL.LL
|
||||
LL.LLLLLLLLLLLL.L.LLL.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LL.LLLL.LLLLLL.LLLLL.LLLLLLL.L.LLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLL.LLLL
|
||||
LLLLLLLLL.LLLLL.L.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLL
|
||||
LLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLL..LLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
LL...L.........L..LLL........L.L..L....L.L.L....LLLL.LL.L....LL....L.LL.LLL..L..L....LL.L......LLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLL.L.LLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
...L........L....L.L.LL.LL.L.L.....L.L..L.....LL....L..L.L.L..L..L.L...L.........L.LL.LLLLL..L....
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL..LLLL.LLLLLLL.LLLLLLLLLLL.LLL.L.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLL.L.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLL..LLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
..LLLL.L..LL.L......LL.L...L.L..L....LLL.........L....L.......LL.LLL.L.L.....LL.L...L.LLL....L....
|
||||
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.L.LLL.LLLLLLL.LLLL.LLLLLL.LLLL..LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLL.LLLLLLLLL.L.LLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLL.LL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LL...LLLLL.....LL..L.....L....L......L.L........LL......LL.LL..L..LLL.L...L..L..L.L.....LLLL...LLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLL.LLLLL.LLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL
|
||||
.LL..L.....LLLL.LL..L.LL....L.LL...L..LL......L..LL...LL..L.L.LLLL...LL.L..L..LLL.L.L.....L.LL.LL.
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLL.LLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLL.LL
|
||||
LLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLL..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLL.L.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLL.LLLLLLLLLLLLLLL.LLL.LLLL.LLLLLLL.L.LLLLLLL.LLLLLL.LLLLLLLL.LLLLL..LLLLLLLLLLLLLLLLLL
|
||||
LLLLLLL.LLLLLL.LLLL.LLL.LLLLLLLLLL.LLLLLLL.LLLLL.L.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
.LLLLLLLLLLLLLLL.LLLLLL.LLLLLL.LLLLLLLL.LL.LLLLLLL.LLL.LL.LLLLLLLLLLL.LLL..LLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLL..LLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.L.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLL.L.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLL..LLL.LLLLLL.LLLLLL.LLLL.LLLL.L.LLLLLL
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.L.LL.LLLL.LLLLLL..LLLLLL.LLLLLLLL..LLLLL.LLLLLLLL..LLLLLLLL
|
||||
LLLLLLL.LLLLLLLL.LLLLLL.LLLLL.L.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
|
||||
.LLLLLL..LLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL.L.LLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLL
|
||||
..LLLL......L.L..L..L..L.....LL..L.....L.....LLL.L.L.LL...L.....L...LL..L......L...LL......L
|
||||
LL.LLLL.LLLLLLLLL.LLLLL.LLLLL.LLLLLLL.LLLL.LLLLLL..LLLLLL.LLLL.LLL.LLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLL..LLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLL.LL.LLLLLL.LLLL.LLLLLLLL.LLLLLL..LL.LLLLL.LLLL..L.
|
||||
LLLLLLLLLLLLLL.LL.LLLLL.LLLLLLLLLLLLL.L.LL.LLLLLLL.L.LLLL.LLLLLLLL.LLLLLL.L.LLLLLLLLLLLLLLLL
|
||||
LLLLLLL.L.LLLLLL.LLLLLLLLL.LL.LLLLL.LLLLL..L.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LL
|
||||
LLLLLLLLLLLLLLLL.LLLLLLLLL.LL.LLLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLL..LLLLLL.LLLLLLLLL.LLLLLLLL
|
||||
LLLLLLL.LLLLLLL..LLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLL.LLLLLL.L.LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLLL.LLLLL..LLLLLLLLLL.LLL.LLLLLLLLLLLLLL.LLL.LLLLLLLLL.LLLLL.L.LLLL.LLLLLLLLLLL
|
||||
.L......L.LL.L...L.....L..L..L...LL.L.......L.............LL.L......LL.L...LL.L...L.....LL..
|
||||
LL.LLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
|
||||
LLLLL.L.L.LLLLLLLLL.LLLLLLLLLLLLL.LL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLL.LL.LL.LLLLL.LLLL.L.LLLLL.LLLLLLLLLL.LLLLLLLLL..L.LLLLLLLLLLL.L.LLLLL.LLLLLLLLLLLLLLLL.L
|
||||
LLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.L
|
||||
.......LL...L.......LL...L.......LLL......L..L...L...L.....LL..L.L......L.LL.....LL.....L...
|
||||
LLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLL.LL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLLLLLLLLL..LLLLLLLLLLLLL.LLLL.LL.LLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLL.LLLLLL.L.LLL.L.LLL.LLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL
|
||||
L.LLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLL..LLLLLL.LLLLLLLLL.LLLLLLLL
|
||||
LL.LLLL.LLLLLLLL.LLLLLL.LLLLL.LL.LLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLLLL.LLLLLL.LL.LLLLLLLL
|
||||
LLLLL.L.LLLLLLLL.LLLLLLLLLL.L.LLL.LLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLL
|
||||
LLLLLLL.LLLLLLLL.LLLLLL.LLLLL.LLLLL.L.LLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLL.LLLLLL.LL.LLL.LLLL
|
||||
L..LL.........L....L....L..L.LL.....LL.L.LL...L........L...L...L...L.LLL..LL..LLLLL.L.......
|
||||
LLLLLLL.LLLLLLLLLLLL.LL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.L.LLLLLLLL.LLLLLL.LLLLLLL.L..LLLLLLL
|
||||
LLLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLL.LLLLLL.LLLL.L.LL.LLLLLLLL
|
||||
.LLLLLL.LLLLLL.L.LLLLLL.LLLLL.LLLLLLL.L.LL.LLLLLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLL..LLLLLLLL
|
||||
LL.LLLL..LLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL..LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
|
||||
L..LL..........L......L..L....L..L.L.LL.LLL..L.L.L.LLLL...L..L..L.L.L..LLLL.L.L...L..LL.....
|
||||
LLLLLLLLLLLLLLLLLLLLLLL.LL.LLLLLLLLLL.LL.L.LLLLLLL.LLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLL.LLLLLLLL.LLLLLLLLLLLL.LLLL.LL.LLLLL.LL.LLL.LLLLLLLLLLLLLLL.LLL.LLLLLLLLLLLLL.LLLLLL.
|
||||
LLLLLL.LLLLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLL
|
||||
LLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLL
|
||||
LLLLLLL.LLLL.LLL.LLLLLL.LLL.L.LLLLLLLLL.LL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLL.LLL.L.LLLLLL
|
||||
LLLLLLLLLLLLL.LL.LLLLLL.LLL.L.LLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLL.LLL.LLLLLL.LLLLLL.LLLLLLLLLLL
|
||||
.L.LLLL.L.LLL.L....L...LL.L.L..LL.L.LLLL.L..L..L.L.LL...LL..L.L.L...LL.L.......LL..LLL......
|
||||
LLLLL.L..LLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLL.LL.LLLL.LLLLLL.LLLLLL.L.LLLLLL.LLLLLLLLLLLL.LLLLL
|
||||
LLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL..LLL.LLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLL
|
||||
LLLLLLL.LLLLLLLL.LLLL.L.LLL.LLLLLLLLL.LLLL.LLLLLLL.L..LLL.LLLLLLL..LL.LLL.LLLLLLLLL.LLL.LLL.
|
||||
LLLLLLL.LLLLLLLL.LLLLLL.L.LLLLLLLLLL..LLLLLLLLLLLL.L.LLLL.LLLLLLLL.LLLLLL.L.LLLL.LL.LLLL.LLL
|
||||
LLLL.LLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLLL.LLLLLL.LL.LLLLL.LLL.LL.LLLLLLLLLLLLLLLLLL
|
||||
LL.LLLLLLLLLLLLL.LLLLLLLLLLLL.LLL.LLL.LLLL.LLLLLLLLLLLL.L.LLLLL.LL.LLLLLL.L.L.LLLLLLLLLLLLLL
|
||||
LLLLLL.LLLLLL.LL.LLLLLLLLL.LLLLLLLLLL.LLLL.LL.LLLLLLLLLLL.LL.LLLLL.LLLLL.LLLLLLLLLL.LLLLLLLL
|
||||
.LLL.......LL.LL....L..L.....LL.....L..L...LLL....L...L..LLL...L............LLLL.LL.......L.
|
||||
LLLLL.L.LLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLL.LL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL
|
||||
L.LLLLL...LLLLLLLLLLLLL.LLLLLLLLLLLLL..LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLLL.L.L.LLLLLLLL.LLLLLLL.LLLL.LLLLL.L.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLL.LLLLLLLLLLLLLLLLLLL.LLL.LLLLLLLLLL.LLL.LLLLLL..LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
L..L.LL...LLL.L...LLL....L.L.L.L.....LL..........LL...L.L.L.LLLL....L.....L....LLL......LLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.L.LLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLL
|
||||
LLLLLLL..LLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LLL.L.L.LL.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLL.LLLL.L.LLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLL.LLLLLLLLLLLLLL
|
||||
LLLLLLL.LLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.L
|
||||
LLLLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLL.LLL.LLL.LLLLLL.LLLLLLLL.LLLLLL.LLL.LLLLL.LLLLLLLL
|
||||
LLLLLLL.LLLLLLLL.LLLLLL..LLLLLLLLLLLL.LLLL.L..L.LL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLL
|
||||
LLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLL..LLLLLLLLLLLL.LLLLLLLLLL.LLLL.LLLLLL.LLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLL.L.LLLLLLL.LLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL
|
||||
LLLLLL..LLLLLLLL.LLLLLLLLLLLL.LLLLLL..LLLL.LLLL.LL.L.LLLL.LLLL.LLL.LLLLLL.LLLLLLLLLLLL.LLLLL
|
||||
........LL..LL..L............L..L.L..L....L.......LL...L......L....LLL..L.L......LL..LL.L.L.
|
||||
LLLLLLL.LLLLLLLL.LLLLLLLLLLLL.LLLLLL..LLLL.LLLLLLL.LLL.LL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLL.LLLL
|
||||
LLLLLL.LLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
|
||||
LLL.LLL.LLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLL..LLL.LLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
|
||||
LLLLLLL.LLLLLLLL.LLLL.L.LLLLL.LL.LLLL.LLLL.L.LLLLL.LL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL..LLLL.LLLLLL.LLLLLLL.LLLLLL.LLLLLLLL.LLLLLLL.L.LLLLLLLL
|
||||
LLLLLLL.LLLLL.LL.LLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLL.LLLL.LL.LLLLL
|
||||
LLLLLLLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLL.LL.LLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLL.L.L...L.......L..LL.LL.LL....LL..L.L.L......L...LLL..L.L.L...LLL...L.....L.LLLL........
|
||||
.LLLLLL.L.LLLLLL.LLLLLLLLLLL..LLLLLLL.LLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLLL.LLLL.LLLL.LLLLLLLL
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.
|
||||
LLLLLLL.L.LLLLLLLLLLLLL.LLLLL.LLL.LLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLL.LL.L.LLLLLLLLLLLLLLLL
|
||||
LLLLLLL.LLLLL.LL.LLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLL.LL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
L.LLLLL.LLLLL.LLLLLLLLL.LLLLL..LLLLLL.LLLL.LLLLLLL.L.LLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLL.LL..
|
||||
..L...L.L.......LL.LLL.LLL..L....L..L.L.L..L.L........L...L.LL.L.........LLLLL.L.LL.L...L.LL
|
||||
LLLLLLL.LLLLL.LL.LLLLLL.LLLL..LLLLL.L.LL.LLLLLL.LL.LLLLLLLLLLLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLL.L.LLLLLLLLLLLLL.LLLLL.LL.LLLLLLL.LLLLLLLLL.LLL.LL.LLLLLLLL.LLL.LL.LLLLLLLLL.LLLLLLLL
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL..L.LLLLLLLLLLLL.LLLLLL.L.LLLLLL.LLLLLL.LLLLLLLLL.LLL.LLLL
|
||||
.LLLLLL.LL.LL.LLLLLL.L..LLLLLLL.LLLLL.LLLL.LL.LL.L.LL.L.L.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLL..LLLLLLLL.LLL.LLLLLLLLLLLLLLLLLL..LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL
|
||||
LLLLLLL.LLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLLL.LL.LL..LLLLLLLL.LLLLLLLLLLLLLLLL.LLL..LLL
|
||||
LLLLLLLLL.LL.LLL.LLLLLLLLLLLLLLLLLLLL.LLL..LLLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLL
|
||||
LLLLLLL.LLLL.LLLLLLLLLLL.LLLL.LLLLLLLLLL.L.LLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLL......LL...L...L..LL..L..L......L...L.L..L.........L.LL.LL..L..L.L......L..L........L..L.
|
||||
LL.LLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.L.LLLLLLLLLLLL.LL.LLLL..LLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLL.LL.LLLLLLLL
|
||||
LLLLLLL.LLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLLLL.L.LLLLLL.LLLLLLLL..LLLLL.LLLLLLLLL.LLLLLLLL
|
||||
LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLL.LLL.LLLLLL.LL.LLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLLL.LLLLLL.LLL.L.LLLLLLL.LLLLLLLLLLLL.LLLLLLLLL.LLL.L.LLLLLL.LLLLLLLLLLLLLLLLLL
|
||||
LLLLLLL.LLLLL.LL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL..LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLL.LLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
initialState = []
|
||||
with open("input.txt", "r") as f:
|
||||
initialState = f.read().split("\n")
|
||||
initialState = f.read().splitlines()
|
||||
|
||||
stateWidth = len(initialState[0])
|
||||
stateHeight = len(initialState)
|
||||
@ -59,4 +59,4 @@ while True:
|
||||
if currentState == lastState:
|
||||
break
|
||||
|
||||
print(getNumOfOccupiedSeats(currentState))
|
||||
print(getNumOfOccupiedSeats(currentState))
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
initialState = []
|
||||
with open("input.txt", "r") as f:
|
||||
initialState = f.read().split("\n")
|
||||
initialState = f.read().splitlines()
|
||||
|
||||
stateWidth = len(initialState[0])
|
||||
stateHeight = len(initialState)
|
||||
@ -69,4 +69,4 @@ while True:
|
||||
if currentState == lastState:
|
||||
break
|
||||
|
||||
print(getNumOfOccupiedSeats(currentState))
|
||||
print(getNumOfOccupiedSeats(currentState))
|
||||
|
1446
12/input.txt
1446
12/input.txt
File diff suppressed because it is too large
Load Diff
@ -1,2 +1,2 @@
|
||||
1000186
|
||||
17,x,x,x,x,x,x,x,x,x,x,37,x,x,x,x,x,907,x,x,x,x,x,x,x,x,x,x,x,19,x,x,x,x,x,x,x,x,x,x,23,x,x,x,x,x,29,x,653,x,x,x,x,x,x,x,x,x,41,x,x,13
|
||||
1000677
|
||||
29,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,x,x,x,661,x,x,x,x,x,x,x,x,x,x,x,x,13,17,x,x,x,x,x,x,x,x,23,x,x,x,x,x,x,x,521,x,x,x,x,x,37,x,x,x,x,x,x,x,x,x,x,x,x,19
|
||||
|
21
13/part2.py
21
13/part2.py
@ -1,16 +1,19 @@
|
||||
|
||||
def parseBuses(line):
|
||||
return {i:int(x) for i, x in enumerate(line.split(",")) if x != "x"}
|
||||
|
||||
def getBuses(filename):
|
||||
with open(filename, "r") as f:
|
||||
f.readline()
|
||||
return {i:int(x) for i, x in enumerate(f.readline().split(",")) if x != "x"}
|
||||
with open(filename, "r") as f:
|
||||
f.readline()
|
||||
return parseBuses(f.readline())
|
||||
|
||||
buses = getBuses("input.txt")
|
||||
step = list(buses.values())[0]
|
||||
t = step
|
||||
step = 1
|
||||
t = 0
|
||||
|
||||
for dt, busId in buses.items():
|
||||
while (t + dt) % busId != 0:
|
||||
t += step
|
||||
step *= busId
|
||||
while (t + dt) % busId != 0:
|
||||
t += step
|
||||
step *= busId
|
||||
|
||||
print(t)
|
||||
print(t)
|
||||
|
1120
14/input.txt
1120
14/input.txt
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,7 @@
|
||||
|
||||
def getInstructions(filename):
|
||||
with open(filename, "r") as f:
|
||||
return list(line.split(" = ") for line in f.read().split("\n"))
|
||||
return list(line.split(" = ") for line in f.read().splitlines())
|
||||
|
||||
def applyMask(value, mask):
|
||||
return (value | int(mask.replace("X", "0"), 2)) & int(mask.replace("X", "1"), 2)
|
||||
@ -19,4 +19,4 @@ for instruction in instructions:
|
||||
memory[address] = applyMask(value, currentMask)
|
||||
|
||||
memorySum = sum(memory.values())
|
||||
print(memorySum)
|
||||
print(memorySum)
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
def getInstructions(filename):
|
||||
with open(filename, "r") as f:
|
||||
return list(line.split(" = ") for line in f.read().split("\n"))
|
||||
return list(line.split(" = ") for line in f.read().splitlines())
|
||||
|
||||
def decToBin(decimal):
|
||||
binary = bin(decimal)[2:]
|
||||
@ -31,4 +31,4 @@ for instruction in instructions:
|
||||
writeToMemory(memory, maskedAddress, value)
|
||||
|
||||
memorySum = sum(memory.values())
|
||||
print(memorySum)
|
||||
print(memorySum)
|
||||
|
@ -1 +1 @@
|
||||
11,0,1,10,5,19
|
||||
19,20,14,0,9,1
|
||||
|
@ -18,4 +18,4 @@ while len(numbers) < 2020:
|
||||
occurences[number].append(len(numbers))
|
||||
numbers.append(number)
|
||||
|
||||
print(numbers[2019])
|
||||
print(numbers[2019])
|
||||
|
26
15/part2.py
26
15/part2.py
@ -5,20 +5,24 @@ def getStartingNumbers(filename):
|
||||
return [int(n) for n in f.read().split(",")]
|
||||
|
||||
numbers = getStartingNumbers("input.txt")
|
||||
occurences = {n: [i] for i,n in enumerate(numbers)}
|
||||
positions = {n: i for i,n in enumerate(numbers)}
|
||||
diff = {n: 0 for n in numbers}
|
||||
|
||||
lastNumber = numbers[-1]
|
||||
# 30000000
|
||||
targetI = 30000000
|
||||
|
||||
i = len(numbers)-1
|
||||
while i+1 < targetI:
|
||||
if len(occurences[lastNumber]) > 1:
|
||||
number = occurences[lastNumber][-1] - occurences[lastNumber][-2]
|
||||
else:
|
||||
number = 0
|
||||
i += 1
|
||||
occurences[number] = occurences.get(number, [])
|
||||
occurences[number].append(i)
|
||||
occurences[number] = occurences[number][-2:]
|
||||
lastNumber = number
|
||||
number = -1
|
||||
if lastNumber in diff:
|
||||
number = diff[lastNumber]
|
||||
else:
|
||||
number = 0
|
||||
i += 1
|
||||
if number in positions:
|
||||
diff[number] = i - positions[number]
|
||||
positions[number] = i
|
||||
lastNumber = number
|
||||
|
||||
print(lastNumber)
|
||||
print(lastNumber)
|
||||
|
521
16/input.txt
521
16/input.txt
@ -1,266 +1,263 @@
|
||||
departure location: 31-221 or 241-952
|
||||
departure station: 27-780 or 787-957
|
||||
departure platform: 34-405 or 411-970
|
||||
departure track: 41-672 or 689-963
|
||||
departure date: 26-827 or 843-970
|
||||
departure time: 38-283 or 297-963
|
||||
arrival location: 50-250 or 259-970
|
||||
arrival station: 35-878 or 884-950
|
||||
arrival platform: 49-746 or 772-955
|
||||
arrival track: 37-457 or 481-954
|
||||
class: 28-418 or 443-970
|
||||
duration: 32-722 or 728-970
|
||||
price: 41-519 or 525-966
|
||||
route: 50-606 or 628-974
|
||||
row: 46-92 or 111-967
|
||||
seat: 41-112 or 135-972
|
||||
train: 25-540 or 556-957
|
||||
type: 39-574 or 585-954
|
||||
wagon: 32-699 or 719-957
|
||||
zone: 49-71 or 83-951
|
||||
departure location: 48-793 or 800-971
|
||||
departure station: 36-235 or 247-974
|
||||
departure platform: 25-850 or 862-964
|
||||
departure track: 40-173 or 193-959
|
||||
departure date: 42-895 or 902-955
|
||||
departure time: 43-692 or 715-951
|
||||
arrival location: 38-528 or 549-967
|
||||
arrival station: 43-133 or 141-963
|
||||
arrival platform: 40-651 or 675-951
|
||||
arrival track: 48-801 or 811-973
|
||||
class: 50-562 or 587-955
|
||||
duration: 43-520 or 527-968
|
||||
price: 44-745 or 752-950
|
||||
route: 41-929 or 941-963
|
||||
row: 37-828 or 838-958
|
||||
seat: 47-475 or 491-972
|
||||
train: 38-198 or 210-965
|
||||
type: 33-66 or 74-949
|
||||
wagon: 35-492 or 507-962
|
||||
zone: 35-358 or 381-965
|
||||
|
||||
your ticket:
|
||||
61,151,137,191,59,163,89,83,71,179,67,149,197,167,181,173,53,139,193,157
|
||||
157,59,163,149,83,131,107,89,109,113,151,53,127,97,79,103,101,173,167,61
|
||||
|
||||
nearby tickets:
|
||||
854,509,243,913,926,411,308,322,69,875,779,371,51,514,367,873,524,645,934,322
|
||||
358,885,814,800,197,363,388,50,138,820,854,793,89,738,733,306,796,334,387,8
|
||||
194,897,151,634,178,597,173,791,251,344,306,568,804,145,142,136,573,173,242,508
|
||||
793,667,856,328,284,596,215,70,873,507,777,948,851,922,694,153,743,250,926,142
|
||||
219,870,66,945,803,485,325,670,788,186,822,365,451,512,906,443,678,404,312,173
|
||||
329,572,654,409,804,563,847,330,265,148,875,904,173,411,927,259,945,536,148,920
|
||||
788,867,405,249,51,454,819,512,306,850,384,337,71,587,316,649,724,389,645,318
|
||||
271,143,266,447,322,187,650,254,497,155,860,405,655,946,635,862,517,937,729,721
|
||||
211,856,566,262,156,201,804,735,172,809,870,56,313,801,447,508,622,517,91,807
|
||||
312,334,928,657,776,276,319,893,163,162,244,206,446,719,568,856,391,831,722,931
|
||||
250,68,900,183,785,790,270,922,312,914,269,664,305,337,350,904,778,896,68,371
|
||||
516,650,391,333,604,730,406,779,341,354,447,162,884,53,803,327,861,721,321,328
|
||||
654,169,947,825,395,4,374,569,518,885,315,563,67,900,195,511,789,739,345,863
|
||||
909,871,876,874,194,141,151,54,805,381,943,413,556,553,268,305,629,774,179,540
|
||||
325,299,721,195,772,376,255,699,737,911,567,274,859,186,780,605,556,568,220,162
|
||||
482,799,304,784,495,136,949,938,140,58,773,152,855,342,884,393,276,445,557,821
|
||||
534,807,455,221,832,89,658,734,947,945,672,259,456,137,558,557,902,744,382,315
|
||||
274,775,797,928,940,299,821,653,216,918,163,814,162,63,929,640,321,456,362,257
|
||||
889,188,454,309,488,457,775,183,166,382,916,262,322,307,716,204,664,411,790,354
|
||||
366,894,820,567,180,641,146,859,517,497,735,186,310,362,203,381,824,885,718,513
|
||||
60,813,630,672,88,947,663,405,515,376,51,182,910,380,903,847,318,843,542,572
|
||||
447,300,897,602,55,918,664,272,623,245,368,411,699,157,735,587,722,641,574,356
|
||||
890,804,648,369,731,848,394,866,249,884,3,652,212,876,742,892,517,844,667,932
|
||||
89,524,529,628,324,944,860,449,887,392,112,805,592,181,905,929,323,787,140,54
|
||||
301,885,646,353,657,820,572,629,666,891,195,378,274,849,729,24,196,875,515,212
|
||||
709,197,454,827,733,742,91,175,366,572,508,314,170,282,744,316,164,69,178,801
|
||||
218,457,484,161,800,860,911,492,250,898,455,888,252,54,932,745,393,856,363,519
|
||||
207,923,189,314,182,483,179,730,174,186,324,481,658,494,294,167,492,854,803,778
|
||||
800,87,644,61,586,517,645,905,190,573,316,855,150,170,304,389,218,979,388,741
|
||||
846,482,84,326,798,745,926,725,362,176,340,197,165,572,268,912,481,558,335,632
|
||||
184,773,536,594,945,494,738,401,649,949,404,135,274,467,817,299,853,740,603,926
|
||||
843,855,551,798,443,586,481,721,809,340,142,570,774,938,150,485,154,299,822,857
|
||||
272,782,366,666,658,917,731,509,733,371,639,245,585,312,336,805,111,868,642,511
|
||||
447,888,511,822,822,940,527,909,274,938,867,984,193,274,527,449,487,888,515,560
|
||||
304,174,393,1,170,444,568,634,395,481,260,586,729,634,694,55,305,531,501,162
|
||||
629,585,932,813,572,945,598,369,743,375,178,411,397,648,221,805,648,72,817,698
|
||||
631,554,698,861,906,380,484,70,739,606,359,519,418,111,728,564,935,208,90,383
|
||||
90,500,825,163,899,532,392,641,571,484,220,877,530,351,368,918,229,337,367,50
|
||||
171,341,914,323,737,256,647,939,745,138,908,648,690,857,145,774,855,919,745,605
|
||||
179,906,324,91,365,322,843,512,857,324,139,69,902,823,332,313,776,254,653,457
|
||||
668,237,456,573,913,503,140,200,283,449,241,148,148,323,635,734,694,143,815,924
|
||||
84,195,63,216,356,730,457,67,923,654,269,173,646,400,65,664,641,455,400,294
|
||||
401,373,418,600,848,659,740,59,400,796,418,449,721,993,644,163,875,444,949,87
|
||||
628,934,497,657,336,325,398,62,384,150,672,335,785,170,305,241,167,361,502,571
|
||||
458,858,501,491,271,217,569,162,168,205,335,325,744,380,54,303,884,794,916,646
|
||||
280,498,728,358,587,171,891,525,935,819,843,398,515,671,729,418,257,512,871,591
|
||||
288,891,658,311,853,166,510,84,502,937,633,360,143,692,374,92,515,393,60,277
|
||||
447,153,383,332,260,447,694,299,531,490,636,534,166,137,892,858,817,498,654,784
|
||||
252,799,885,852,856,774,89,154,333,590,338,504,165,378,696,606,53,728,349,537
|
||||
221,281,278,179,737,813,522,798,355,283,193,570,921,928,264,745,585,241,351,808
|
||||
556,244,60,858,452,221,655,595,204,603,899,329,417,449,503,894,192,56,980,587
|
||||
875,780,350,728,889,527,671,790,589,857,520,936,180,942,818,448,558,664,920,819
|
||||
355,858,531,976,530,135,55,336,894,150,194,905,379,496,338,299,262,247,511,574
|
||||
182,637,184,865,7,933,55,826,733,738,820,245,566,655,632,564,529,900,538,342
|
||||
905,509,943,814,798,819,417,485,327,61,160,168,616,210,788,936,788,365,908,497
|
||||
50,946,380,527,894,203,267,810,906,198,569,803,888,170,555,694,659,70,371,590
|
||||
591,815,364,401,766,815,275,596,176,634,370,561,505,181,890,138,452,735,518,147
|
||||
827,683,52,534,656,510,328,323,52,278,815,930,743,137,53,190,903,741,660,875
|
||||
167,859,260,725,923,917,922,142,339,388,363,508,914,667,790,862,515,282,212,350
|
||||
161,882,443,265,517,483,776,650,661,499,887,794,302,516,150,412,485,698,820,185
|
||||
345,487,810,868,871,190,209,507,327,534,86,856,305,877,931,210,121,886,903,567
|
||||
843,875,362,560,320,17,869,64,948,561,896,248,778,174,54,947,792,386,630,366
|
||||
916,904,884,91,867,796,862,153,453,449,397,908,485,264,53,848,141,936,889,551
|
||||
569,740,646,200,792,649,213,719,787,456,933,414,361,526,340,732,63,135,469,865
|
||||
359,384,221,87,650,396,241,197,281,947,19,418,527,738,172,486,857,282,262,525
|
||||
854,603,494,532,160,329,162,537,358,887,415,913,487,531,172,177,393,521,940,698
|
||||
403,535,738,334,827,530,527,495,229,526,512,340,248,170,866,188,691,820,398,822
|
||||
654,241,630,740,920,485,532,722,479,348,90,51,87,158,241,389,301,531,496,350
|
||||
547,143,492,534,871,939,303,306,88,247,268,55,363,312,564,344,740,560,277,150
|
||||
915,823,90,651,852,416,668,207,905,563,249,308,84,338,216,67,346,112,523,924
|
||||
825,734,211,581,454,811,340,347,207,532,506,400,660,412,328,573,319,146,735,519
|
||||
540,875,176,220,355,184,885,854,780,572,83,142,181,387,371,603,925,514,654,9
|
||||
398,402,561,151,608,565,528,850,136,497,939,386,943,919,938,86,946,329,380,367
|
||||
390,912,651,811,563,63,20,368,146,187,173,538,658,364,938,264,869,194,573,845
|
||||
154,331,321,244,189,445,88,873,208,650,312,368,744,932,243,345,792,58,995,637
|
||||
172,813,638,66,859,161,915,921,928,383,587,644,388,183,868,358,319,681,602,567
|
||||
399,866,603,207,557,172,366,349,707,812,664,806,454,299,593,779,772,651,502,170
|
||||
310,777,312,917,406,670,874,187,559,945,58,505,393,393,418,666,158,297,811,664
|
||||
66,936,270,595,515,844,546,491,638,314,381,177,791,805,264,640,342,693,172,160
|
||||
521,270,906,822,273,269,448,905,456,304,176,330,249,211,492,780,515,539,802,640
|
||||
135,790,271,772,935,492,300,875,827,896,282,260,891,915,657,879,505,88,283,303
|
||||
443,275,414,237,888,596,729,938,161,514,147,275,854,497,652,629,366,910,264,922
|
||||
370,146,402,649,328,859,789,787,794,665,321,810,174,777,889,396,649,389,494,410
|
||||
642,629,221,538,400,591,84,983,815,692,267,267,266,179,667,564,566,359,689,159
|
||||
499,806,219,663,690,536,535,664,83,370,531,640,589,988,654,511,260,666,173,531
|
||||
670,733,900,881,635,313,281,449,179,695,513,397,915,774,532,209,343,375,889,661
|
||||
654,300,195,921,434,564,143,861,720,893,875,208,860,777,557,305,62,774,71,139
|
||||
342,916,201,899,741,357,645,363,146,317,630,380,287,370,773,649,174,358,876,667
|
||||
875,736,866,60,867,308,159,152,296,872,354,241,56,586,656,513,491,933,213,323
|
||||
564,632,648,503,190,728,270,272,850,666,348,663,263,201,406,206,697,249,504,164
|
||||
568,592,738,518,277,456,780,635,883,70,218,411,722,403,175,910,334,413,484,175
|
||||
827,198,282,832,53,111,414,411,329,388,909,208,602,531,745,734,195,52,502,938
|
||||
493,324,779,691,882,746,335,891,937,594,527,145,167,729,848,315,54,556,731,746
|
||||
163,153,806,795,246,398,312,505,52,897,880,780,590,519,70,487,533,53,498,896
|
||||
220,339,843,212,524,596,151,412,853,865,860,496,360,810,559,357,201,746,491,734
|
||||
137,822,270,870,852,53,730,761,648,165,481,801,414,370,399,519,944,305,343,814
|
||||
455,303,137,919,166,336,448,532,531,211,504,773,593,698,905,455,171,995,500,603
|
||||
851,631,742,789,332,205,818,350,386,495,528,544,361,210,693,827,305,870,689,506
|
||||
111,163,207,780,595,393,874,692,368,300,10,485,220,450,499,860,398,190,593,211
|
||||
631,871,733,921,864,599,170,653,361,362,211,746,219,258,313,370,193,321,207,188
|
||||
897,831,929,868,843,342,901,791,450,537,280,445,511,667,719,389,197,360,398,945
|
||||
375,906,876,211,457,361,373,557,65,164,170,184,794,728,692,22,503,325,395,142
|
||||
812,360,395,735,69,825,445,904,356,804,336,858,542,366,171,642,504,903,917,939
|
||||
156,309,731,695,723,450,940,632,793,262,62,638,728,378,186,446,919,263,247,821
|
||||
534,215,60,854,730,867,163,927,799,994,932,865,670,269,791,857,347,53,744,664
|
||||
507,373,844,729,451,264,455,283,923,366,514,212,272,378,307,814,410,662,557,531
|
||||
606,87,594,289,893,772,511,926,111,939,165,314,413,53,650,936,498,263,309,179
|
||||
788,153,740,318,856,444,337,183,178,632,50,180,245,490,792,443,163,723,489,510
|
||||
301,140,324,571,884,508,868,872,301,730,798,484,593,147,259,350,700,810,852,692
|
||||
416,943,853,178,827,565,279,566,317,892,251,857,817,217,538,271,348,63,264,140
|
||||
378,346,699,393,903,943,534,880,151,302,414,397,819,933,689,150,893,397,598,58
|
||||
277,311,645,525,904,141,112,697,347,151,877,376,149,643,358,793,929,773,881,310
|
||||
855,488,659,250,513,918,64,484,889,488,360,91,51,274,932,735,880,54,737,369
|
||||
732,89,976,659,299,772,494,185,268,369,891,513,305,342,188,264,86,945,657,732
|
||||
417,155,392,689,171,186,53,982,931,85,803,147,376,825,499,945,158,719,193,904
|
||||
206,397,910,722,591,359,315,268,194,356,606,948,728,822,805,198,63,292,791,140
|
||||
719,664,490,521,562,938,592,404,401,276,316,313,637,803,177,937,453,794,851,282
|
||||
587,530,400,165,944,873,350,696,389,930,636,260,780,879,383,825,660,655,305,656
|
||||
890,914,67,299,824,914,360,211,68,186,206,899,705,443,246,361,734,568,846,909
|
||||
379,976,403,160,939,737,817,777,263,742,416,506,325,111,597,213,887,405,330,507
|
||||
211,641,930,320,790,719,362,90,792,323,696,519,925,599,92,173,466,592,923,142
|
||||
495,529,164,911,505,668,357,390,88,731,628,630,170,519,910,416,69,335,667,473
|
||||
616,746,332,354,905,730,83,59,903,525,313,571,304,925,56,844,643,383,793,909
|
||||
556,668,601,848,397,175,260,152,727,672,787,664,788,281,369,199,453,573,574,149
|
||||
216,174,851,71,790,366,785,213,594,640,746,216,656,729,207,157,86,570,176,731
|
||||
384,606,204,809,199,303,285,779,509,493,52,217,391,451,596,69,885,629,69,929
|
||||
844,157,61,571,186,184,728,831,646,898,146,902,661,54,391,219,928,62,204,218
|
||||
271,391,809,504,852,157,986,853,889,413,940,791,137,271,628,221,493,813,932,365
|
||||
482,190,329,886,921,162,802,914,787,532,452,790,873,210,657,810,595,235,395,323
|
||||
821,339,199,325,414,150,16,259,566,730,496,799,445,371,249,177,936,511,88,135
|
||||
903,147,384,485,70,300,268,345,830,631,318,269,787,174,937,500,360,511,90,910
|
||||
84,322,277,178,280,153,915,191,92,571,327,822,646,65,413,638,540,715,886,245
|
||||
455,465,316,696,515,112,265,788,533,367,205,193,641,144,282,651,530,190,601,604
|
||||
218,802,398,351,142,886,357,932,210,638,152,734,90,53,787,343,531,873,17,737
|
||||
339,90,808,176,322,316,157,598,302,590,327,775,218,151,806,372,165,478,184,299
|
||||
900,527,921,413,884,573,380,221,482,942,566,778,879,668,144,161,567,208,659,326
|
||||
365,854,372,112,176,457,416,569,152,871,740,809,652,371,147,90,784,735,851,788
|
||||
386,388,573,919,277,69,608,803,813,933,905,855,862,337,326,719,733,563,667,450
|
||||
593,187,825,503,142,187,559,719,175,193,495,849,564,61,524,511,593,737,867,605
|
||||
199,395,635,487,910,822,944,864,415,661,988,55,153,375,248,187,196,641,819,160
|
||||
389,878,304,196,904,395,716,628,925,135,145,593,632,495,649,598,209,86,812,859
|
||||
653,406,798,497,806,556,84,320,202,278,363,787,594,824,305,585,208,192,213,395
|
||||
55,691,789,88,876,910,594,331,274,862,51,563,875,370,614,900,569,947,172,666
|
||||
149,736,926,525,16,929,263,52,444,645,935,83,452,347,815,509,806,454,152,868
|
||||
307,605,265,638,578,797,864,855,414,895,372,495,849,65,318,926,888,528,372,646
|
||||
189,941,53,531,699,415,342,635,633,244,805,193,794,180,976,339,54,456,196,316
|
||||
369,322,332,874,468,52,197,518,507,356,489,694,268,796,351,655,206,655,907,244
|
||||
347,382,161,675,628,745,689,349,662,776,893,787,210,854,411,376,855,510,111,155
|
||||
322,597,266,874,448,774,306,916,905,416,550,820,249,483,663,378,931,65,793,281
|
||||
357,149,598,734,873,344,802,943,745,850,218,61,479,873,58,203,268,371,279,348
|
||||
261,154,947,178,866,360,733,484,195,806,342,312,942,334,252,189,804,221,556,912
|
||||
245,338,858,532,804,565,892,445,491,889,329,190,264,599,347,567,901,879,321,929
|
||||
452,1,213,593,847,850,372,898,660,414,738,947,497,485,795,390,245,632,887,814
|
||||
152,362,445,694,860,272,848,363,2,944,334,926,450,823,943,249,142,318,190,907
|
||||
188,919,70,513,56,501,148,164,600,401,211,353,219,321,449,521,897,71,792,303
|
||||
989,592,493,60,369,655,86,263,772,779,181,537,263,180,450,173,370,84,596,344
|
||||
491,671,934,539,513,163,830,111,314,647,266,798,667,179,325,849,921,356,864,204
|
||||
331,491,181,921,193,925,644,178,411,532,643,874,68,87,601,555,788,343,890,217
|
||||
218,945,341,669,802,143,571,140,188,154,899,777,573,88,302,257,444,587,411,908
|
||||
559,572,365,448,179,930,668,636,58,354,142,7,403,318,387,382,157,388,188,447
|
||||
302,365,799,547,211,872,729,55,585,904,799,189,922,152,645,925,561,273,313,446
|
||||
892,213,531,257,539,855,316,242,349,886,242,248,153,822,670,176,586,670,386,310
|
||||
556,215,50,270,668,484,140,333,867,55,326,944,70,414,454,83,510,626,569,283
|
||||
179,455,501,670,902,185,536,574,376,900,195,919,982,629,148,884,662,487,845,331
|
||||
65,794,491,211,322,388,888,343,782,644,135,558,564,263,488,666,335,275,672,206
|
||||
281,252,887,594,52,203,194,587,606,155,777,843,451,412,851,56,196,194,794,498
|
||||
812,640,850,777,175,450,918,160,418,165,507,304,532,445,385,373,504,492,499,712
|
||||
451,153,209,486,153,500,645,328,324,912,979,691,657,490,381,572,199,931,86,336
|
||||
796,603,908,792,228,525,58,807,363,572,657,66,350,55,331,515,484,775,456,137
|
||||
280,265,910,174,128,343,356,775,200,372,112,598,447,56,154,516,859,268,265,938
|
||||
318,628,356,396,452,266,742,906,180,273,797,661,309,327,310,201,888,872,622,320
|
||||
84,50,311,898,363,320,208,341,358,672,354,995,818,731,199,791,176,810,740,327
|
||||
494,454,931,721,394,918,507,553,656,167,210,662,730,530,807,695,647,917,863,356
|
||||
737,193,215,937,53,347,54,381,793,271,632,389,69,526,162,374,699,324,7,333
|
||||
160,716,746,199,306,629,873,628,163,903,249,585,695,281,403,322,630,261,528,150
|
||||
327,797,533,660,669,638,924,532,307,53,495,24,396,691,908,185,516,283,720,845
|
||||
574,216,58,458,202,221,793,164,454,906,457,182,62,696,943,376,300,312,741,919
|
||||
344,358,691,566,794,316,592,298,361,654,731,189,819,573,493,250,296,894,194,744
|
||||
385,873,483,249,699,808,736,166,899,789,486,900,777,646,345,148,739,762,658,63
|
||||
662,923,853,888,256,259,242,87,589,332,821,876,143,516,367,213,91,935,330,794
|
||||
311,532,802,374,355,526,337,795,662,161,475,646,631,147,561,63,452,194,871,55
|
||||
216,165,263,561,268,896,283,699,327,495,869,332,527,701,260,729,245,145,698,742
|
||||
880,731,453,593,334,919,564,639,335,924,905,65,363,942,780,247,733,411,921,719
|
||||
373,908,601,315,914,656,825,928,351,902,859,734,986,537,639,823,816,634,181,859
|
||||
500,137,378,918,515,923,411,735,415,819,599,346,146,400,459,899,906,798,859,518
|
||||
670,622,590,346,793,518,396,571,810,790,168,866,486,948,602,91,221,283,337,849
|
||||
277,452,731,532,61,266,391,575,503,397,569,825,562,71,298,911,364,175,635,312
|
||||
265,322,849,816,501,821,910,928,909,15,512,539,205,396,564,516,538,851,851,642
|
||||
271,55,901,353,313,386,498,408,383,58,412,337,211,572,217,65,804,917,449,518
|
||||
283,364,187,806,153,891,279,372,350,502,195,338,454,412,538,446,854,864,721,609
|
||||
778,366,398,596,892,867,412,195,274,812,535,883,921,51,353,340,933,83,61,598
|
||||
788,404,934,21,246,888,654,539,145,418,150,658,510,91,281,930,788,932,910,282
|
||||
634,156,798,159,565,487,592,633,390,910,139,854,277,140,585,2,332,513,492,932
|
||||
380,198,209,696,417,385,50,329,804,745,935,516,591,735,719,694,768,731,508,111
|
||||
174,734,268,301,854,745,518,615,345,312,244,565,633,506,599,789,773,352,886,178
|
||||
891,216,324,184,527,449,572,535,378,911,339,659,979,928,560,823,773,318,814,386
|
||||
565,58,253,415,177,402,86,206,201,192,948,395,648,694,628,899,865,561,401,323
|
||||
863,340,557,324,136,986,245,167,482,354,596,56,89,374,178,690,242,849,637,346
|
||||
341,601,416,697,308,777,188,785,150,526,263,903,915,661,897,734,164,497,510,137
|
||||
92,599,932,895,325,499,199,139,561,191,668,697,511,329,315,815,833,887,813,443
|
||||
402,396,495,852,386,453,148,84,826,800,263,564,52,606,659,871,698,185,266,522
|
||||
645,878,352,812,865,776,881,902,262,917,810,205,165,314,606,368,739,644,853,559
|
||||
517,527,452,807,306,68,181,523,216,628,874,719,605,269,266,155,897,496,817,369
|
||||
507,927,927,220,378,775,865,380,339,631,366,917,491,643,156,574,391,543,51,515
|
||||
906,244,787,280,194,806,813,213,523,890,745,671,665,377,336,449,169,565,630,909
|
||||
259,791,87,329,191,275,540,71,155,176,362,874,217,320,827,517,774,782,398,70
|
||||
496,820,812,332,706,370,417,857,649,500,308,559,794,394,181,58,777,92,413,383
|
||||
651,368,357,324,153,244,385,868,70,667,280,372,742,314,556,800,298,578,492,561
|
||||
160,159,324,902,340,158,455,205,370,875,986,787,193,85,507,650,333,663,843,319
|
||||
744,391,514,399,936,65,928,197,678,450,586,662,732,632,654,359,640,203,272,443
|
||||
170,362,136,567,303,596,186,287,183,663,199,811,742,603,338,360,275,918,169,808
|
||||
402,330,894,481,802,218,199,906,147,492,364,315,697,821,842,150,665,720,728,455
|
||||
56,184,204,629,586,197,354,519,318,697,694,742,176,338,664,900,140,518,71,880
|
||||
483,932,861,559,212,503,663,394,863,918,560,887,745,322,881,940,896,60,167,344
|
||||
629,590,176,650,719,374,152,518,409,930,902,643,266,922,205,375,196,387,875,948
|
||||
556,63,800,148,78,886,169,697,516,663,158,185,341,889,499,802,167,851,342,871
|
||||
399,402,946,386,175,640,886,682,633,493,507,371,670,145,892,162,166,198,632,214
|
||||
560,915,526,498,923,305,667,216,602,864,519,186,924,326,241,905,329,407,824,163
|
||||
417,0,138,596,495,797,189,64,404,799,670,381,658,912,482,161,651,537,270,354
|
||||
139,815,530,914,592,318,337,447,449,911,809,184,263,264,781,826,328,731,538,338
|
||||
302,448,272,163,505,313,691,940,392,878,817,258,800,905,642,738,349,856,264,932
|
||||
493,307,64,283,86,925,153,815,600,850,511,698,280,520,305,904,493,179,531,367
|
||||
357,817,648,386,513,806,592,701,735,372,573,564,855,214,366,848,353,816,136,264
|
||||
201,631,313,145,538,912,447,363,194,796,561,668,777,306,780,488,323,646,251,451
|
||||
934,66,490,826,314,168,821,603,539,417,735,864,902,895,358,197,998,777,307,525
|
||||
170,60,858,249,557,197,476,396,416,810,932,737,396,929,602,198,529,657,450,871
|
||||
68,390,153,452,377,907,231,587,187,332,778,385,112,690,513,874,906,357,380,393
|
||||
492,822,261,729,548,138,655,283,485,640,497,920,482,897,320,810,183,175,488,698
|
||||
902,286,366,890,405,603,911,259,499,940,374,271,376,515,694,904,948,653,516,743
|
||||
595,506,741,630,948,401,915,884,549,386,847,166,914,694,690,569,368,371,777,388
|
||||
445,245,145,821,633,141,417,948,327,204,147,149,325,507,857,890,73,537,191,380
|
||||
506,734,638,342,534,55,719,473,369,322,945,894,365,803,889,404,405,179,663,145
|
||||
383,857,774,404,674,338,350,495,187,884,304,507,862,948,155,207,259,61,651,362
|
||||
147,338,892,348,629,210,488,243,299,451,162,161,689,657,280,365,581,302,518,137
|
||||
721,274,947,627,570,892,489,328,221,318,443,557,50,648,250,166,532,186,629,944
|
||||
539,532,191,984,112,282,801,200,913,336,948,739,815,777,161,50,742,804,159,212
|
||||
67,343,887,712,273,500,661,141,57,172,567,356,65,515,788,631,693,922,897,373
|
||||
196,512,803,383,864,802,694,348,417,826,591,8,797,194,191,794,206,862,159,739
|
||||
489,519,484,399,276,774,270,944,176,173,263,908,522,377,744,593,196,162,416,655
|
||||
269,384,55,177,142,699,741,225,807,497,908,314,744,586,221,778,395,276,390,151
|
||||
694,211,643,822,773,348,329,174,269,866,276,242,565,856,167,919,555,343,776,243
|
||||
946,293,123,156,812,202,75,884,162,420,436,60,720,719,272,642,515,724,150,875
|
||||
221,912,887,284,758,512,907,690,384,802,742,118,318,330,282,232,507,470,871,615
|
||||
810,431,649,91,53,784,300,722,904,166,210,75,491,87,892,625,211,151,434,608
|
||||
643,779,232,722,326,212,626,867,265,308,561,565,322,59,466,126,60,398,462,902
|
||||
96,926,879,397,752,863,721,283,648,731,790,314,787,127,646,123,132,228,932,611
|
||||
170,762,169,400,589,606,232,783,97,404,97,187,404,398,436,316,736,50,149,637
|
||||
219,131,774,321,403,362,424,109,434,387,434,650,862,847,229,645,214,941,738,75
|
||||
781,825,387,409,418,393,392,230,501,722,819,877,716,596,636,114,82,75,457,921
|
||||
780,114,230,227,784,267,210,318,78,262,258,902,91,464,728,313,986,753,434,847
|
||||
721,89,151,101,423,52,305,761,679,920,683,835,887,248,643,842,87,422,409,264
|
||||
276,288,942,66,888,195,83,149,840,322,844,323,112,866,167,276,630,813,850,21
|
||||
156,598,212,318,509,193,116,550,560,863,716,587,906,461,229,442,980,254,103,276
|
||||
108,878,230,391,459,715,909,358,56,136,641,921,850,107,197,446,470,154,257,300
|
||||
429,289,136,558,869,233,649,267,725,454,781,589,343,691,528,131,821,784,597,919
|
||||
896,385,874,717,220,630,420,643,255,613,550,817,686,218,562,347,118,86,470,217
|
||||
382,883,106,760,432,933,925,559,780,680,944,913,465,148,56,193,401,300,623,459
|
||||
756,615,507,213,633,332,459,606,610,426,793,547,288,520,843,439,621,298,382,866
|
||||
628,427,555,988,766,313,875,846,924,474,877,58,319,154,606,88,311,622,475,625
|
||||
53,884,689,473,272,87,19,466,437,429,104,470,425,107,458,411,812,294,159,464
|
||||
228,398,462,889,629,683,894,756,724,875,107,793,129,832,781,250,319,166,941,51
|
||||
630,811,639,755,302,235,641,869,692,130,433,859,111,258,269,632,337,132,114,867
|
||||
262,472,683,210,308,679,101,255,60,469,684,901,212,914,418,464,793,947,84,130
|
||||
254,905,261,864,614,866,559,879,78,466,163,632,909,516,304,396,220,204,875,740
|
||||
826,866,633,763,840,903,772,752,558,941,916,108,102,380,754,467,357,313,152,452
|
||||
480,635,828,720,873,145,393,473,112,734,105,344,447,334,743,678,607,308,90,228
|
||||
466,232,907,740,752,332,219,553,388,521,635,599,549,214,330,631,288,129,726,599
|
||||
127,398,601,902,848,297,428,691,163,58,194,94,871,152,91,881,640,516,808,743
|
||||
416,383,432,270,357,382,624,425,105,635,734,999,759,398,61,634,635,471,298,58
|
||||
879,762,84,305,97,912,895,149,55,105,441,167,715,57,314,840,727,331,174,147
|
||||
404,839,97,831,462,556,562,491,925,403,558,110,793,730,131,258,599,271,613,688
|
||||
257,417,266,66,277,743,351,811,409,760,78,254,320,465,467,457,336,945,217,807
|
||||
82,447,444,218,915,101,599,906,394,385,210,552,472,297,562,597,411,194,142,359
|
||||
691,130,312,559,198,290,555,484,324,151,879,221,866,402,560,165,510,788,285,294
|
||||
520,354,609,603,826,728,263,288,478,719,164,763,435,892,905,412,286,126,350,690
|
||||
216,637,56,842,466,925,411,828,306,833,475,269,84,270,116,892,778,270,399,422
|
||||
887,989,786,232,438,322,629,319,422,194,302,387,57,85,267,894,111,128,265,801
|
||||
787,150,367,820,142,79,391,340,285,883,785,616,213,76,50,398,300,724,233,729
|
||||
349,871,621,791,787,407,635,345,890,150,271,998,733,385,893,759,302,273,616,341
|
||||
838,741,337,254,676,405,387,120,800,442,148,329,141,106,410,143,891,488,449,883
|
||||
221,621,686,789,612,258,631,449,104,847,100,266,274,991,817,400,271,98,286,889
|
||||
148,276,228,770,929,797,631,412,104,759,877,401,649,767,553,213,614,402,310,737
|
||||
310,303,587,584,466,333,589,912,763,828,947,339,108,161,618,605,354,235,114,941
|
||||
218,223,646,96,166,108,366,883,315,154,159,650,352,602,77,252,742,515,404,728
|
||||
391,562,716,108,919,521,511,790,430,60,678,675,197,677,221,729,295,340,752,305
|
||||
762,916,949,888,596,516,920,868,522,464,917,512,760,274,337,874,397,65,880,82
|
||||
520,622,286,108,471,730,811,906,553,704,465,122,302,877,151,754,436,877,352,415
|
||||
327,163,814,291,58,731,260,393,633,555,789,941,250,166,610,776,846,95,575,683
|
||||
726,258,342,921,146,145,914,723,349,514,838,594,632,776,925,263,850,930,887,336
|
||||
261,692,739,924,754,138,164,826,754,551,473,871,305,131,81,759,295,946,862,217
|
||||
753,863,309,437,285,162,867,826,704,682,753,759,684,637,801,288,301,734,760,259
|
||||
291,686,406,163,424,473,214,762,405,227,816,556,779,324,225,844,596,705,644,160
|
||||
285,95,276,757,394,212,982,118,290,611,843,438,611,107,438,323,843,877,720,152
|
||||
107,131,327,719,872,345,602,423,453,84,727,733,812,691,910,327,975,459,261,91
|
||||
728,319,568,304,878,424,125,514,848,512,74,740,785,620,215,117,419,839,471,315
|
||||
523,817,891,422,77,232,449,557,52,437,62,801,453,297,332,100,603,948,848,260
|
||||
356,280,894,517,219,305,281,128,55,926,116,324,822,682,354,284,810,528,288,232
|
||||
325,465,724,401,170,690,159,589,427,376,125,228,297,847,734,771,633,153,717,849
|
||||
445,354,404,406,724,231,414,842,297,643,147,914,918,556,214,628,55,764,521,518
|
||||
136,111,817,913,793,892,97,881,266,916,235,684,196,335,614,620,415,722,757,223
|
||||
280,889,234,98,166,874,813,216,584,320,612,692,818,514,397,876,91,730,471,928
|
||||
60,820,880,562,403,444,685,692,866,233,299,210,649,763,16,92,133,783,601,683
|
||||
930,302,453,158,382,773,639,735,356,877,791,602,257,146,723,675,640,198,825,396
|
||||
618,80,850,401,383,560,134,821,787,92,141,313,759,216,341,400,731,649,770,651
|
||||
921,108,916,162,288,919,591,766,911,572,587,846,474,651,225,718,527,443,716,249
|
||||
216,259,882,317,150,83,252,144,115,509,894,228,396,285,124,744,379,227,903,55
|
||||
317,326,381,132,63,172,850,434,938,336,475,905,848,101,906,920,232,98,635,265
|
||||
609,819,650,731,418,387,917,647,433,102,333,678,410,89,390,781,987,442,59,520
|
||||
395,792,904,864,789,880,401,615,148,639,515,845,442,518,909,885,922,511,370,83
|
||||
244,916,109,728,890,455,297,593,173,841,509,520,114,101,153,99,255,167,441,218
|
||||
99,622,881,677,398,598,441,286,779,445,459,528,453,721,887,780,54,827,254,17
|
||||
420,349,413,216,415,898,513,716,741,122,768,927,114,282,718,285,509,198,431,336
|
||||
814,305,302,120,302,754,233,864,298,645,119,142,282,157,492,605,198,605,347,205
|
||||
862,948,283,145,278,324,406,872,337,245,104,766,792,58,129,424,291,103,328,650
|
||||
847,949,875,165,824,551,440,431,7,515,113,688,869,456,268,787,475,890,902,125
|
||||
278,389,765,399,354,724,631,833,303,326,471,106,850,928,515,327,417,163,811,130
|
||||
131,247,870,676,823,703,395,305,157,221,115,944,790,262,559,91,225,767,286,738
|
||||
421,618,346,141,886,860,916,113,436,731,158,915,634,823,556,233,730,407,551,326
|
||||
172,401,850,344,922,443,457,617,417,606,297,619,829,408,880,753,780,159,910,288
|
||||
402,875,271,149,55,558,720,729,136,880,600,692,641,863,330,907,249,876,822,492
|
||||
282,231,454,256,293,437,273,566,195,317,133,382,817,88,826,880,520,850,433,460
|
||||
689,94,795,752,169,519,818,248,927,820,920,400,925,150,719,145,588,610,388,683
|
||||
790,551,431,96,271,392,915,312,175,871,393,772,827,145,347,778,400,121,344,635
|
||||
749,337,787,153,267,212,61,214,334,450,258,65,335,917,812,517,234,109,882,865
|
||||
395,684,597,272,640,763,333,442,901,847,101,142,717,408,281,252,87,775,254,824
|
||||
874,787,125,63,820,768,63,443,875,235,75,995,258,339,388,171,389,850,220,269
|
||||
306,434,927,294,265,511,841,596,446,64,344,234,295,418,690,427,259,993,884,357
|
||||
316,225,792,249,937,735,728,89,518,343,144,424,225,921,382,222,904,847,83,285
|
||||
417,614,514,895,569,678,210,438,388,466,867,818,825,131,454,735,271,60,801,348
|
||||
279,294,684,768,976,801,420,722,688,258,305,80,255,923,914,725,94,322,642,752
|
||||
429,924,232,560,451,921,90,782,773,446,516,255,942,415,759,335,392,784,714,517
|
||||
171,744,604,431,618,389,171,396,761,866,774,816,454,448,113,372,594,513,142,847
|
||||
690,430,145,91,612,907,145,523,819,904,414,683,341,225,389,734,145,270,839,888
|
||||
834,317,597,429,676,247,117,812,253,421,424,125,437,605,255,144,740,307,281,412
|
||||
536,792,911,172,941,409,737,462,291,257,443,247,511,353,257,102,334,609,877,461
|
||||
876,323,898,553,767,394,888,924,729,396,120,399,775,716,928,77,607,173,317,132
|
||||
20,878,561,325,613,426,415,122,300,893,914,819,508,394,722,255,145,528,341,401
|
||||
724,945,323,775,220,452,784,808,633,78,888,350,865,317,621,50,745,947,439,152
|
||||
503,465,912,326,948,383,881,915,649,761,635,344,811,843,862,264,516,784,150,689
|
||||
928,904,631,285,820,726,120,874,107,75,294,389,207,111,61,754,223,109,417,164
|
||||
422,947,95,173,758,610,344,429,554,754,108,238,646,173,285,723,352,520,86,634
|
||||
555,232,684,615,768,562,327,253,92,827,948,524,457,227,736,947,623,786,60,311
|
||||
676,254,358,55,318,95,757,999,82,676,384,491,876,99,682,169,426,792,213,424
|
||||
798,214,435,882,642,509,432,826,786,684,740,84,793,762,866,389,909,347,752,913
|
||||
365,152,65,908,257,811,775,512,229,718,468,554,949,682,647,60,452,786,910,432
|
||||
844,157,770,917,589,88,736,513,103,101,507,792,159,686,611,468,508,246,402,224
|
||||
619,789,839,592,427,744,60,323,50,925,235,718,577,323,761,313,162,715,687,825
|
||||
119,445,470,307,351,880,406,933,56,895,596,411,347,722,301,210,142,756,155,689
|
||||
844,349,853,556,605,151,645,850,611,453,394,388,154,297,772,717,90,163,147,197
|
||||
845,610,336,324,352,889,872,337,919,893,436,234,445,569,80,919,149,555,639,302
|
||||
146,601,789,877,867,587,759,115,906,784,647,677,57,234,393,842,894,825,89,485
|
||||
603,274,319,401,604,928,817,845,341,883,688,499,863,875,285,106,385,94,741,924
|
||||
688,760,426,266,290,636,319,824,949,891,871,557,145,349,421,385,774,370,893,871
|
||||
261,528,615,370,214,507,107,350,925,336,332,618,335,424,410,213,874,82,215,91
|
||||
119,917,551,303,562,251,301,97,112,336,916,695,641,383,256,919,730,403,675,732
|
||||
726,317,115,269,831,904,527,110,520,251,513,847,599,519,273,287,813,65,389,142
|
||||
550,614,257,265,624,485,93,440,722,164,757,406,127,592,154,220,864,840,592,435
|
||||
102,74,498,86,724,274,768,646,420,684,905,173,289,52,680,472,784,920,784,249
|
||||
550,682,420,84,446,806,159,759,91,628,731,332,388,438,155,811,256,91,93,221
|
||||
260,90,784,224,510,401,423,141,868,869,134,558,782,319,227,902,256,907,356,737
|
||||
228,446,471,148,155,628,627,233,104,684,818,805,387,411,171,297,781,409,560,761
|
||||
397,599,355,639,122,349,685,82,445,262,976,272,424,146,828,211,82,729,283,841
|
||||
784,230,268,912,704,885,168,730,338,909,389,824,757,419,194,270,610,647,872,638
|
||||
445,778,159,419,871,63,125,814,792,160,725,840,802,948,779,262,128,643,395,623
|
||||
855,158,288,559,685,415,839,292,905,592,89,161,211,593,195,916,922,456,610,330
|
||||
405,408,731,731,561,282,124,147,300,148,993,410,166,945,549,418,651,459,435,279
|
||||
608,263,740,844,484,156,117,78,622,164,680,329,433,770,355,452,84,76,117,621
|
||||
214,273,61,457,451,356,868,766,839,469,118,299,334,423,948,790,558,258,85,21
|
||||
328,117,384,80,50,172,730,612,459,650,327,120,868,276,461,411,687,188,774,587
|
||||
647,138,257,745,844,213,743,876,600,226,509,731,112,249,198,515,745,555,633,877
|
||||
340,996,905,104,736,685,295,737,291,627,614,893,102,270,676,293,404,520,885,744
|
||||
289,426,920,599,474,460,642,768,161,326,839,286,877,203,153,643,235,310,343,346
|
||||
683,415,553,400,460,645,650,589,763,120,715,883,607,611,78,222,834,266,767,87
|
||||
475,195,421,820,467,303,567,468,457,214,553,86,816,218,160,603,516,107,349,684
|
||||
387,754,155,348,510,193,757,501,297,790,908,440,234,96,115,720,113,612,556,321
|
||||
317,216,58,724,825,597,790,305,237,148,459,285,872,763,642,77,848,893,647,553
|
||||
52,912,118,267,299,399,736,558,292,691,780,768,81,841,717,195,776,994,715,311
|
||||
725,146,117,600,279,413,450,92,465,94,120,317,641,878,310,416,990,82,267,309
|
||||
231,381,649,562,452,381,869,813,75,262,910,374,321,744,631,263,820,266,125,251
|
||||
319,765,769,294,767,147,551,850,728,929,319,51,793,284,558,946,494,125,885,676
|
||||
651,435,893,270,769,755,691,210,824,305,593,840,643,320,226,594,923,684,202,337
|
||||
412,106,787,54,628,330,322,551,325,883,210,519,463,443,818,827,203,165,775,249
|
||||
615,225,420,435,589,310,156,319,361,904,782,827,352,516,781,63,730,355,415,335
|
||||
263,770,330,716,112,412,113,336,388,922,454,465,723,449,928,295,327,522,451,727
|
||||
743,307,677,114,888,243,247,645,820,85,341,556,321,302,821,635,340,762,814,516
|
||||
208,288,116,558,677,737,397,613,838,148,159,903,355,557,260,408,873,732,826,331
|
||||
310,775,201,840,351,329,215,887,828,100,742,341,527,256,274,57,587,528,317,131
|
||||
881,424,948,449,217,358,739,601,886,431,513,269,447,914,922,335,845,598,881,11
|
||||
755,622,937,520,771,169,868,158,620,444,165,839,775,781,315,914,597,615,779,879
|
||||
843,407,475,217,893,107,781,892,165,596,196,895,119,787,738,411,19,611,790,745
|
||||
5,155,314,381,107,617,904,785,300,251,842,83,322,171,51,310,310,783,594,211
|
||||
877,384,66,513,406,645,941,893,353,412,196,924,738,135,216,631,758,257,716,77
|
||||
120,408,477,848,343,438,306,337,406,211,63,336,871,170,304,277,917,685,272,129
|
||||
800,427,121,123,498,57,817,651,403,646,929,868,291,394,779,944,515,385,719,555
|
||||
387,639,844,629,876,428,906,60,149,513,116,335,867,780,247,140,309,292,411,114
|
||||
551,877,761,764,446,254,348,320,737,873,87,758,126,168,997,357,164,231,329,681
|
||||
443,611,169,429,745,644,821,826,224,871,821,740,975,917,145,133,911,902,102,210
|
||||
142,296,591,273,141,691,430,150,806,247,173,116,228,434,755,78,271,51,507,358
|
||||
105,838,744,634,279,325,259,677,160,813,682,745,632,277,438,581,949,826,876,349
|
||||
729,528,689,459,291,413,626,253,639,843,920,320,61,460,620,429,651,877,829,650
|
||||
738,977,507,93,51,825,638,340,791,132,92,106,164,439,736,864,787,382,198,492
|
||||
440,739,717,453,528,844,122,731,435,59,739,911,85,557,114,690,453,443,514,581
|
||||
224,617,74,644,559,818,884,286,641,869,815,324,259,157,588,338,145,139,386,758
|
||||
462,915,444,387,740,222,456,515,761,332,985,884,491,315,462,401,93,275,814,259
|
||||
346,297,277,551,865,850,596,223,515,119,149,990,283,169,527,887,343,887,411,445
|
||||
258,161,56,909,107,684,77,117,627,846,474,550,839,770,435,916,873,942,899,261
|
||||
728,635,474,149,846,253,514,339,839,301,394,882,153,333,19,154,328,732,234,620
|
||||
778,308,392,162,471,436,347,786,922,332,288,930,761,815,77,551,357,947,129,777
|
||||
588,303,84,771,592,50,55,426,436,123,549,799,610,914,608,57,916,452,164,406
|
||||
721,334,402,395,874,406,128,55,764,734,323,519,81,81,435,170,314,802,785,106
|
||||
733,154,184,879,391,614,349,620,783,607,342,438,235,614,304,398,527,59,717,914
|
||||
103,467,338,305,272,162,877,276,336,340,301,631,681,945,99,419,162,830,302,267
|
||||
327,984,848,60,61,845,948,438,843,332,214,102,780,681,353,845,849,765,550,401
|
||||
646,609,527,595,840,592,401,637,354,926,305,428,220,887,340,761,937,870,905,332
|
||||
419,442,997,722,293,269,928,780,59,474,51,516,844,212,459,457,744,159,554,512
|
||||
102,761,296,396,675,403,680,277,193,938,878,735,382,789,941,431,731,105,104,492
|
||||
914,755,911,212,90,248,635,404,650,501,718,277,731,165,266,608,90,474,553,692
|
||||
418,295,299,307,813,500,320,411,160,492,386,445,288,90,639,83,678,440,880,461
|
||||
170,771,115,413,446,631,343,727,720,248,598,787,482,619,596,133,912,882,262,846
|
||||
649,352,766,643,165,928,152,50,864,210,812,748,430,399,218,691,590,173,774,343
|
||||
419,156,318,733,63,402,292,147,731,163,471,213,219,488,512,606,917,132,262,436
|
||||
265,465,552,945,690,758,315,131,692,866,410,271,101,949,559,881,103,329,12,344
|
||||
684,599,816,332,298,716,439,394,908,865,919,638,155,555,99,103,474,813,65,135
|
||||
475,761,928,316,791,895,415,916,391,59,626,341,289,82,599,981,818,432,441,715
|
||||
170,683,840,872,207,718,161,868,924,908,616,515,255,64,866,59,463,256,850,511
|
||||
118,461,701,231,838,605,677,817,550,871,50,792,467,634,742,725,305,155,400,288
|
||||
685,52,346,104,649,397,886,388,79,894,414,93,134,491,161,249,342,225,603,949
|
||||
552,398,525,778,620,872,294,552,870,325,755,403,457,463,130,226,171,87,321,329
|
||||
873,949,947,164,149,643,286,946,832,905,167,93,336,754,679,557,894,893,458,591
|
||||
728,629,64,470,811,778,228,910,645,121,215,324,292,112,785,462,948,62,140,299
|
||||
432,198,788,308,390,775,92,590,349,614,340,272,220,520,779,836,409,62,864,390
|
||||
904,322,74,511,138,406,730,285,326,212,776,813,877,718,446,251,631,117,448,437
|
||||
684,917,260,916,259,844,95,518,613,826,162,264,412,269,114,617,271,446,302,996
|
||||
681,98,243,528,323,211,228,770,515,906,734,723,257,866,168,630,622,553,789,624
|
||||
321,605,758,603,824,823,317,148,77,86,466,267,429,433,325,462,892,774,739,935
|
||||
883,339,802,793,847,472,928,474,390,291,790,891,411,918,249,315,305,470,690,557
|
||||
554,74,417,402,516,318,217,491,171,595,268,632,821,346,942,118,442,504,391,551
|
||||
592,946,231,155,262,146,305,407,684,911,143,924,395,8,560,838,902,611,735,355
|
||||
822,716,888,553,619,212,347,278,878,609,883,887,305,292,732,94,12,921,354,172
|
||||
784,906,328,205,562,827,439,335,211,792,91,838,644,307,127,649,811,329,302,517
|
||||
513,323,132,773,452,264,725,286,854,640,115,420,257,154,780,684,107,684,417,775
|
||||
426,213,753,469,722,325,410,603,162,100,426,842,425,86,642,555,609,987,414,435
|
||||
120,825,351,381,216,265,947,757,754,594,948,518,423,764,866,689,719,317,505,744
|
||||
587,343,279,680,105,885,303,207,686,276,689,844,76,112,104,144,774,763,849,824
|
||||
67,430,263,475,466,774,275,629,411,446,127,613,123,281,907,127,308,492,446,319
|
||||
355,632,131,197,594,440,286,800,929,849,249,129,157,424,617,16,121,342,718,170
|
||||
621,296,128,291,409,625,382,644,876,621,82,402,648,879,828,130,221,566,415,723
|
||||
569,724,912,619,196,66,593,156,551,908,433,463,258,295,92,251,340,221,821,106
|
||||
763,631,819,382,169,873,352,129,287,483,467,302,679,625,425,234,630,451,339,330
|
||||
645,289,746,849,264,279,599,123,769,615,277,108,819,624,170,422,447,720,772,258
|
||||
403,632,114,319,682,224,906,133,53,398,384,146,425,118,288,914,132,299,257,836
|
||||
449,150,320,386,101,348,255,138,331,632,388,729,775,414,782,761,623,922,840,300
|
||||
826,146,318,157,776,142,260,998,53,328,745,847,629,80,641,402,868,400,218,470
|
||||
223,839,56,839,86,176,325,214,211,890,387,721,790,514,549,635,551,846,783,737
|
||||
863,338,165,676,141,862,261,615,122,272,942,403,143,321,588,214,579,107,763,282
|
||||
436,194,120,286,266,554,893,615,785,352,572,472,298,399,873,756,352,427,819,324
|
||||
311,159,780,163,815,814,823,256,893,263,917,138,327,849,909,268,821,922,84,912
|
||||
602,826,125,137,408,294,59,915,108,277,676,945,248,869,315,210,520,436,267,407
|
||||
313,906,61,786,692,58,157,862,724,998,721,606,307,144,510,121,944,283,167,724
|
||||
250,296,626,597,475,334,65,589,625,893,297,638,131,66,600,132,481,731,553,445
|
||||
681,406,560,93,984,823,343,166,452,788,311,448,121,325,790,470,355,872,158,126
|
||||
463,947,274,217,806,115,826,107,210,621,893,288,100,903,457,612,132,626,826,122
|
||||
893,550,983,53,917,816,838,109,299,408,406,322,874,221,161,325,642,388,94,102
|
||||
397,279,788,463,268,233,423,604,894,640,815,893,560,76,274,675,211,684,240,274
|
||||
687,455,825,76,716,864,520,351,769,929,472,200,786,315,812,890,279,891,449,394
|
||||
352,730,81,742,948,148,436,338,686,103,345,596,849,717,195,462,872,316,480,254
|
||||
710,881,230,784,491,635,144,423,449,775,234,623,882,772,304,871,465,745,133,113
|
||||
275,92,170,392,155,821,892,406,203,409,302,66,115,634,756,773,75,720,840,81
|
||||
267,101,431,793,678,890,453,376,864,447,76,605,555,788,599,457,339,124,725,595
|
||||
850,942,169,873,340,398,463,636,91,681,145,676,371,280,943,455,893,457,422,875
|
||||
873,650,89,159,79,578,611,886,554,902,247,845,595,256,840,51,318,787,421,345
|
||||
416,80,468,736,382,295,690,636,252,604,389,232,600,276,595,352,135,234,912,683
|
||||
868,927,719,268,312,876,153,684,740,203,78,403,398,283,553,866,640,760,390,147
|
||||
257,263,723,872,561,837,913,274,840,680,121,588,352,55,327,252,618,52,948,436
|
||||
82,475,337,130,491,303,633,621,770,942,274,478,682,354,758,824,232,731,886,328
|
||||
414,616,833,141,431,118,309,332,871,397,150,868,826,215,737,907,604,627,93,422
|
||||
304,863,471,79,522,683,508,353,908,918,516,124,418,613,382,214,422,774,65,117
|
||||
350,643,549,409,366,649,253,885,88,417,766,221,769,331,800,683,879,683,142,812
|
||||
180,111,948,783,948,678,171,278,550,210,311,432,78,508,330,764,416,198,88,382
|
||||
|
47
16/part1.py
47
16/part1.py
@ -1,30 +1,31 @@
|
||||
import re
|
||||
|
||||
def getInput(filename):
|
||||
with open(filename, "r") as f:
|
||||
fields, myTicket, nearbyTickets = f.read().split("\n\n")
|
||||
myTicket = myTicket.replace("your ticket:\n", "")
|
||||
nearbyTickets = nearbyTickets.replace("nearby tickets:\n", "")
|
||||
with open(filename, "r") as f:
|
||||
fields, myTicket, nearbyTickets = f.read().split("\n\n")
|
||||
myTicket = myTicket.replace("your ticket:\n", "")
|
||||
nearbyTickets = nearbyTickets.replace("nearby tickets:\n", "")
|
||||
|
||||
return (
|
||||
{m[1]: m[2] for m in re.finditer(r"(.+): ([^\n]+)", fields)},
|
||||
[int(n) for n in myTicket.split(",")],
|
||||
[[int(n) for n in ticket.split(",") ] for ticket in nearbyTickets.split("\n")]
|
||||
)
|
||||
return (
|
||||
{m[1]: m[2] for m in re.finditer(r"(.+): ([^\n]+)", fields)},
|
||||
[int(n) for n in myTicket.split(",")],
|
||||
[[int(n) for n in ticket.split(",") ] for ticket in nearbyTickets.splitlines()]
|
||||
)
|
||||
|
||||
class FieldRule:
|
||||
def __init__(self, raw: str):
|
||||
self.raw = raw
|
||||
match = re.match(r"(\d+)\-(\d+) or (\d+)\-(\d+)", raw)
|
||||
self.range1 = [int(match[1]), int(match[2])]
|
||||
self.range2 = [int(match[3]), int(match[4])]
|
||||
def __init__(self, raw: str):
|
||||
self.raw = raw
|
||||
match = re.match(r"(\d+)\-(\d+) or (\d+)\-(\d+)", raw)
|
||||
assert match
|
||||
self.range1 = [int(match[1]), int(match[2])]
|
||||
self.range2 = [int(match[3]), int(match[4])]
|
||||
|
||||
def __call__(self, num: int):
|
||||
return (self.range1[0] <= num <= self.range1[1]) or \
|
||||
(self.range2[0] <= num <= self.range2[1])
|
||||
def __call__(self, num: int):
|
||||
return (self.range1[0] <= num <= self.range1[1]) or \
|
||||
(self.range2[0] <= num <= self.range2[1])
|
||||
|
||||
def __repr__(self):
|
||||
return f'FieldRule("{self.raw}")'
|
||||
def __repr__(self):
|
||||
return f'FieldRule("{self.raw}")'
|
||||
|
||||
fields, myTicket, nearbyTickets = getInput("input.txt")
|
||||
|
||||
@ -33,8 +34,8 @@ for fieldName, fieldRule in fields.items():
|
||||
|
||||
invalidNumbers = []
|
||||
for ticket in nearbyTickets:
|
||||
for num in ticket:
|
||||
if all(not rule(num) for rule in fields.values()):
|
||||
invalidNumbers.append(num)
|
||||
for num in ticket:
|
||||
if all(not rule(num) for rule in fields.values()): # type: ignore
|
||||
invalidNumbers.append(num)
|
||||
|
||||
print(sum(invalidNumbers))
|
||||
print(sum(invalidNumbers))
|
||||
|
81
16/part2.py
81
16/part2.py
@ -9,50 +9,51 @@ def getInput(filename):
|
||||
return (
|
||||
{m[1]: m[2] for m in re.finditer(r"(.+): ([^\n]+)", fields)},
|
||||
[int(n) for n in myTicket.split(",")],
|
||||
[[int(n) for n in ticket.split(",") ] for ticket in nearbyTickets.split("\n")]
|
||||
[[int(n) for n in ticket.split(",") ] for ticket in nearbyTickets.splitlines()]
|
||||
)
|
||||
|
||||
class FieldRule:
|
||||
def __init__(self, raw: str):
|
||||
self.raw = raw
|
||||
match = re.match(r"(\d+)\-(\d+) or (\d+)\-(\d+)", raw)
|
||||
self.range1 = [int(match[1]), int(match[2])]
|
||||
self.range2 = [int(match[3]), int(match[4])]
|
||||
def __init__(self, raw: str):
|
||||
self.raw = raw
|
||||
match = re.match(r"(\d+)\-(\d+) or (\d+)\-(\d+)", raw)
|
||||
assert match
|
||||
self.range1 = [int(match[1]), int(match[2])]
|
||||
self.range2 = [int(match[3]), int(match[4])]
|
||||
|
||||
def __call__(self, num: int):
|
||||
return (self.range1[0] <= num <= self.range1[1]) or \
|
||||
(self.range2[0] <= num <= self.range2[1])
|
||||
def __call__(self, num: int):
|
||||
return (self.range1[0] <= num <= self.range1[1]) or \
|
||||
(self.range2[0] <= num <= self.range2[1])
|
||||
|
||||
def __repr__(self):
|
||||
return f'FieldRule("{self.raw}")'
|
||||
def __repr__(self):
|
||||
return f'FieldRule("{self.raw}")'
|
||||
|
||||
def isFieldValid(tickets, fieldRule, pos):
|
||||
for ticket in tickets:
|
||||
if not fieldRule(ticket[pos]):
|
||||
return False
|
||||
return True
|
||||
for ticket in tickets:
|
||||
if not fieldRule(ticket[pos]):
|
||||
return False
|
||||
return True
|
||||
|
||||
# A backtracking algorithm to find the field order
|
||||
def solveFieldOrder(tickets, fields: dict):
|
||||
fieldOrder = {}
|
||||
fieldOrder = {}
|
||||
|
||||
numOfFields = len(fields)
|
||||
unassignedFields = fields.copy()
|
||||
while len(fieldOrder) < numOfFields:
|
||||
possibleFields = {}
|
||||
numOfFields = len(fields)
|
||||
unassignedFields = fields.copy()
|
||||
while len(fieldOrder) < numOfFields:
|
||||
possibleFields = {}
|
||||
|
||||
for fieldName, fieldRule in unassignedFields.items():
|
||||
for i in range(numOfFields):
|
||||
if i not in fieldOrder.values() and isFieldValid(tickets, fieldRule, i):
|
||||
possibleFields[fieldName] = possibleFields.get(fieldName, [])
|
||||
possibleFields[fieldName].append(i)
|
||||
for fieldName, fieldRule in unassignedFields.items():
|
||||
for i in range(numOfFields):
|
||||
if i not in fieldOrder.values() and isFieldValid(tickets, fieldRule, i):
|
||||
possibleFields[fieldName] = possibleFields.get(fieldName, [])
|
||||
possibleFields[fieldName].append(i)
|
||||
|
||||
for fieldName, orders in possibleFields.items():
|
||||
if len(orders) == 1:
|
||||
fieldOrder[fieldName] = orders[0]
|
||||
del unassignedFields[fieldName];
|
||||
for fieldName, orders in possibleFields.items():
|
||||
if len(orders) == 1:
|
||||
fieldOrder[fieldName] = orders[0]
|
||||
del unassignedFields[fieldName];
|
||||
|
||||
return fieldOrder
|
||||
return fieldOrder
|
||||
|
||||
fields, myTicket, nearbyTickets = getInput("input.txt")
|
||||
|
||||
@ -63,20 +64,20 @@ for fieldName, fieldRule in fields.items():
|
||||
# Filter out the invalid tickets
|
||||
validNearbyTickets = []
|
||||
for ticket in nearbyTickets:
|
||||
isTicketValid = True
|
||||
for num in ticket:
|
||||
if all(not rule(num) for rule in fields.values()):
|
||||
isTicketValid = False
|
||||
break
|
||||
if isTicketValid:
|
||||
validNearbyTickets.append(ticket)
|
||||
isTicketValid = True
|
||||
for num in ticket:
|
||||
if all(not rule(num) for rule in fields.values()): # type: ignore
|
||||
isTicketValid = False
|
||||
break
|
||||
if isTicketValid:
|
||||
validNearbyTickets.append(ticket)
|
||||
|
||||
# Find combination of fields that is valid
|
||||
fieldOrder = solveFieldOrder(validNearbyTickets, fields)
|
||||
|
||||
solution = 1
|
||||
for fieldName, order in fieldOrder.items():
|
||||
if fieldName.startswith("departure"):
|
||||
solution *= myTicket[order]
|
||||
if fieldName.startswith("departure"):
|
||||
solution *= myTicket[order]
|
||||
|
||||
print(solution)
|
||||
print(solution)
|
||||
|
@ -9,4 +9,4 @@ nearby tickets:
|
||||
7,3,47
|
||||
40,4,50
|
||||
55,2,20
|
||||
38,6,12
|
||||
38,6,12
|
||||
|
16
17/input.txt
16
17/input.txt
@ -1,8 +1,8 @@
|
||||
..#..##.
|
||||
#.....##
|
||||
##.#.#.#
|
||||
..#...#.
|
||||
.###....
|
||||
######..
|
||||
.###..#.
|
||||
..#..##.
|
||||
....#...
|
||||
.#..###.
|
||||
.#.#.###
|
||||
.#....#.
|
||||
...#.#.#
|
||||
#.......
|
||||
##....#.
|
||||
.##..#.#
|
||||
|
2000
2/input.txt
2000
2/input.txt
File diff suppressed because it is too large
Load Diff
646
3/input.txt
646
3/input.txt
@ -1,323 +1,323 @@
|
||||
...............#.#.............
|
||||
##..#....................#...##
|
||||
......#..#.#.....#..#.#.##.....
|
||||
.........#...#..............#.#
|
||||
............#.......##.........
|
||||
...#.....#.....#...#.....#..#..
|
||||
..............#..##.#..#......#
|
||||
.##.....#.....#......##.#......
|
||||
.#..........###....#...##....#.
|
||||
.....#....#.#.......#......##..
|
||||
.#....#......#.......#........#
|
||||
..#.#.......#..##.....##.......
|
||||
...#.#....#.......#.......#...#
|
||||
##.##...##..#......#.#.....#..#
|
||||
.#.#.......#..#.#......#...#.#.
|
||||
#.......##.......#...#.........
|
||||
.....#......#.#.#.....#....##..
|
||||
.#.#........#....#..#..#.......
|
||||
...#....#..###.........#.....#.
|
||||
........#........#........#....
|
||||
..##..............#.....#.#..#.
|
||||
.#...##.............#.#........
|
||||
....#..#...........#.......#...
|
||||
..#....#.....................#.
|
||||
#.#..................##......##
|
||||
.#.##....#......#........#.....
|
||||
.........##.....#....#...##..#.
|
||||
#..........#..#.#.............#
|
||||
.........#...#.#.#.#..##..##...
|
||||
#...#.....#..#..#....#...#.....
|
||||
..##.....#..................#..
|
||||
#..###.....#....#.......#..#...
|
||||
...##.##..#............#......#
|
||||
........###.........###......#.
|
||||
#..##....#.........#.........#.
|
||||
....#.....................#....
|
||||
#..#..##..#..####.##..#.....##.
|
||||
..#...#.#....#....##.....#.....
|
||||
...#.#.........#.....#.#.......
|
||||
....#................#..#...##.
|
||||
....#..#..........#...#.#.##...
|
||||
........#..##............#....#
|
||||
...#......##..........#.##...#.
|
||||
.......##......................
|
||||
.......##..........#....#.#...#
|
||||
......###.##..##..#....#...#..#
|
||||
#.#...........##.....#........#
|
||||
..#...........#..###....#.#.#..
|
||||
........#...........#......##..
|
||||
.........#...##.###...###..#...
|
||||
.....#.....#..##.........##....
|
||||
...##..............#.....#...##
|
||||
.##....#.......###.....#.......
|
||||
.#...........##.............##.
|
||||
......#..#..##.##......#......#
|
||||
........###........#......#.#..
|
||||
#.#....#.....#........#......#.
|
||||
.##..#.........##...##....#....
|
||||
.....#.........#...##.....#....
|
||||
.............#........###....#.
|
||||
......#.......#.#........#.#...
|
||||
..#....#.#...#....#...#.#...##.
|
||||
#...#......##..##......#.##.###
|
||||
...##.#....#...#....#.........#
|
||||
...#..####.....##.#..#.#...##..
|
||||
##.#..#....##......#......##...
|
||||
###.........#.#..#.#.....#.....
|
||||
...#........#..##...#.#.#..#.#.
|
||||
...###..#.###.#...#............
|
||||
....................###........
|
||||
...........#...........#.......
|
||||
#..............#.#.........###.
|
||||
....................##.....#..#
|
||||
#.#.....#.......#...#..........
|
||||
.#...#......#....##...#...#....
|
||||
.....#.##..................###.
|
||||
.........#.#..#.#......#.......
|
||||
.......#.....##..#.##.#........
|
||||
..#..........#.###.....#....#..
|
||||
......#.............#.#........
|
||||
........##....#........#.......
|
||||
...#.............#....#.#......
|
||||
#........#..####.....#.....#.#.
|
||||
.##......##...#........#..#.#..
|
||||
....##....#...#...#..##...#.#..
|
||||
#.##...###..#....##.#..........
|
||||
....#.#...#.#...#..##.###...#..
|
||||
#.....##..#..#....#.#.....##...
|
||||
.#..#..........##.#.....##.....
|
||||
.#..#........#.#.#.#...........
|
||||
.#..#.....#...........#...#....
|
||||
...#......##..........##..#....
|
||||
...#..#....#.##...#..#.....###.
|
||||
#.#....#.....##................
|
||||
#..#......#.#.#.......#........
|
||||
......#....#.#....#..##....#..#
|
||||
.#.....#.#....###.##.........#.
|
||||
.###..#.....#........#.#.......
|
||||
.#...#......#..#.#......#.....#
|
||||
#...............####...#.....#.
|
||||
.......#..........##.#........#
|
||||
#........##....##.....###..##..
|
||||
#..#.....#..##.....#....#..#...
|
||||
#.....#.......##......#.#.....#
|
||||
#.##..#......##..#.............
|
||||
##...#.....#........##.........
|
||||
....#..##....#...#.......#.#...
|
||||
....#...#...##..#....#..#...#..
|
||||
..............#.#...#....###...
|
||||
...#....#..##...##..#....##....
|
||||
#.##.#..#..#......#.#.#.#...#..
|
||||
.......#..#..##........#......#
|
||||
##.#....#....##.#......##.#....
|
||||
.#...#..............#........#.
|
||||
.#.#....#.........#............
|
||||
.#..#..###.............#....#..
|
||||
#......#...#.#..##..#...#....#.
|
||||
.......................#...#.#.
|
||||
.............#..#...##.........
|
||||
..#.#..#....#....#........#....
|
||||
#......#.##..#...#.#...........
|
||||
.....#....#...........##.#..#..
|
||||
..#.#.....#..............#.#...
|
||||
#.......#.....#................
|
||||
#..............#...#....#...#..
|
||||
...#...##..#..#............#...
|
||||
......###.....................#
|
||||
.........#.......##..#....#....
|
||||
........#...#.##..#.##......#..
|
||||
....###..#.#...#...#..#.#...###
|
||||
##...#...##.#...#.#...#.#....#.
|
||||
.........#...#.....###.........
|
||||
...#........##..#.......##.....
|
||||
.#.......##.........#.....##..#
|
||||
.#..................#...#......
|
||||
.##..#..#.#.....#.###..........
|
||||
...#.....##..#.........#...#...
|
||||
.#......#.#.......#.#..........
|
||||
.........#.#...#..........#.#..
|
||||
#..........#.##..#.##....#.....
|
||||
.#.#....#.....#..##.....#...#..
|
||||
..#........##...##..#..#....#..
|
||||
#...........##....#..###....#..
|
||||
...........##.........####...#.
|
||||
..#........###...#.#.........#.
|
||||
.#...............#.##.#.#...#..
|
||||
.#.##..#.....#.#.....##..#.....
|
||||
...#...#..#.##.##...#.......##.
|
||||
..#...#...#......##.##.##...#..
|
||||
##....#...#...#...............#
|
||||
...##...........#......#..#.#..
|
||||
#.........#......#.#.##.....#..
|
||||
........#..#.........##........
|
||||
..#.#....###.....##..#...#.....
|
||||
.........#...#.......#.....##..
|
||||
##.....................#...##..
|
||||
.#.#..#......#.................
|
||||
.....###..#......#..###..#.....
|
||||
...#.....##.........#......#..#
|
||||
......##.....#...#........#.#..
|
||||
..#.#...#......#...#.##.##.....
|
||||
...#..........#...#.......#..##
|
||||
.###........#........##........
|
||||
..#.#.#..........#.#...##......
|
||||
.........#........#......###..#
|
||||
....##..#.........#...........#
|
||||
..####..#............##.......#
|
||||
.....##.#..##.........#...#.#..
|
||||
...#.........#.....#.....#.....
|
||||
.......#...#..#...##.........#.
|
||||
...#...#..#...#....#..#........
|
||||
#............##.##...#.........
|
||||
.#.#.....#.......####.....#....
|
||||
..............#......#.#.......
|
||||
..............#...........#...#
|
||||
#...#........###....#.#....#.#.
|
||||
##.#..#..#......#......#.#.#...
|
||||
.#..#.....#..#.#..#.#.......##.
|
||||
......##.#...#...#......#...#..
|
||||
#...........##....#.#..........
|
||||
....#.......###.#...#..........
|
||||
.......................#.....#.
|
||||
........#...#..#...#.#.#.#.#...
|
||||
.#.#...........#......##...#...
|
||||
.........................#.....
|
||||
.................#.##.#...##...
|
||||
...#...##.....#.....##....#.#..
|
||||
...#...#...................#...
|
||||
...#..#..#...#...#....#........
|
||||
#....#...#.....#...............
|
||||
.......#...........#...#.......
|
||||
....#....#.....##.......#......
|
||||
.......#..........##...........
|
||||
.#.#........#..##....#......#..
|
||||
.....#.......#.#.........#...#.
|
||||
.#..####.#.#...............#..#
|
||||
.....###..#..#..........#.#..##
|
||||
..#.......#...#.....##..#..#.#.
|
||||
#....#......#..................
|
||||
........#.##.#....#...........#
|
||||
....#.#....##..#.#.....##......
|
||||
...#..#.......#....#.....#.#.#.
|
||||
#...#......#.....#.#..........#
|
||||
....#....#...............#.....
|
||||
..###......................###.
|
||||
.##....#..#.......###.....#..#.
|
||||
..###............#........#.##.
|
||||
.#........#......#.....#..#....
|
||||
....#..##...#...#.###.......#.#
|
||||
.......#.##...........#.#..#...
|
||||
.....#...##....................
|
||||
....#....#...##......#.........
|
||||
..#............##....###.#...#.
|
||||
.#........#...............#....
|
||||
#..#.#.##.........#..##....##..
|
||||
#.#....#..#.##....##...#.#.....
|
||||
.....#.....##....#.#........#..
|
||||
#..#...#...#....#....#.........
|
||||
...#........#..#.#.....##......
|
||||
..#...#...#................##..
|
||||
#........#.#.##.......#.#...#..
|
||||
#......#..####.##.....#.#..#.#.
|
||||
............#..#.#....#......##
|
||||
..#.....##....#...#.#..........
|
||||
...#...#.........#...#.#.......
|
||||
.###..#.......##.##.....#.#.#..
|
||||
...#....#...............##.#...
|
||||
....##..#..#..#.#......##.....#
|
||||
#.#..............##...##...####
|
||||
.....#.##...#.#...............#
|
||||
.##.....#.........#.......#.#.#
|
||||
#.#..#.....#.......#.......#..#
|
||||
...#.#.....#.....#......#......
|
||||
.......#....#..#.#..........#..
|
||||
......#......#.##...#..........
|
||||
.....#.......###...#...#.#.....
|
||||
#..#.#.........#.....#.##....#.
|
||||
..#.#.........#..#..#..#.....#.
|
||||
.#..##..#..#....#......#.##..#.
|
||||
...##......###.....#.##.##.....
|
||||
.#.....#...#..#...#............
|
||||
##..##..#.##....#..#...........
|
||||
...#..##..#..#.............#.##
|
||||
...............##............#.
|
||||
..#.....##........##.#...#....#
|
||||
.#.#...#.#.#..#.#.....#....#...
|
||||
.#....#...............#..#.....
|
||||
....#.##..#....#......#...###..
|
||||
#................###...#.#.....
|
||||
...#...#......##..#.#....#.....
|
||||
.#....#....#.#...##............
|
||||
....#...##..#..#........#.##...
|
||||
..##.....#..#..##..............
|
||||
..#..##..#.#..##....#....#....#
|
||||
...##.............#............
|
||||
#....#....#.#........#.....##.#
|
||||
.....#..#.#.....####...###.....
|
||||
................#......#.......
|
||||
.....#.#.#.#.#....#..#........#
|
||||
.##.#...#.#.......##....#....#.
|
||||
.....#........#................
|
||||
..#.....#..#...#..#...........#
|
||||
.#.....#...##.....##..#.#....##
|
||||
......#.......#..#......##.#...
|
||||
#.#..........#.##.#........#...
|
||||
...#..#.............#..........
|
||||
#..#..#..........#..##.#.......
|
||||
.#..#...............####..#....
|
||||
.......#.....#......#.....#.#..
|
||||
.#...............#...#.........
|
||||
.#..#..........#..#.#..##..#..#
|
||||
......##..#.....#..#......###..
|
||||
..........#...#..#.......#.....
|
||||
.#.#.#..#.....#.##.#...#..#....
|
||||
........#.......#.....#.#......
|
||||
......#.....##.....#....##.#...
|
||||
...............#......#.......#
|
||||
..#.#...#.....#.#...##......#..
|
||||
#.#.........#.#...#........####
|
||||
#..........##..#..#........##..
|
||||
.............#..#.......##.#..#
|
||||
..#........#.#....#........#.#.
|
||||
.#......####..#..#.............
|
||||
............###.......#.#..#...
|
||||
#.##......##...#...#.........#.
|
||||
....##.#.#.#......#....#..#...#
|
||||
.#..#.#....#...#.........#.....
|
||||
#...#.....##............#...#..
|
||||
#.#...#..#.................#...
|
||||
............#.#..#.....#.#.#..#
|
||||
...................#....#.##...
|
||||
.....#...#.#....#....#.#......#
|
||||
.......##.#.#......##..........
|
||||
.#..#...##.#...#..#......#.....
|
||||
......#.#..#..###..##..##......
|
||||
.#.#.#.#.....#...###.....#..#..
|
||||
.#....#.....#.......#.......#..
|
||||
..........##.........####......
|
||||
.#.#.............#..#.#...#....
|
||||
........#........##...#.#....#.
|
||||
........#......................
|
||||
..#.#....#...............#...##
|
||||
.......#.#...#..#.....##......#
|
||||
.#...#....#..........##........
|
||||
.#.........#.#............##...
|
||||
.....#......##...#.......#..#..
|
||||
#.#..#.............#...#...#...
|
||||
......#.......#............#...
|
||||
...........##....#......##.....
|
||||
.#.#..#.....................#..
|
||||
##..##.....###..##.#...........
|
||||
...##......##....#...##.....#..
|
||||
#...#.##.............#.........
|
||||
......#..#.........###.#......#
|
||||
#.#.....#.....................#
|
||||
....#####.....##........#.#..#.
|
||||
...........##..##.###..........
|
||||
..........##.....#........#...#
|
||||
.......#..#......#.....##..##.#
|
||||
.....##.#........#.........#...
|
||||
......##......................#
|
||||
.#.......#.#.#............#..#.
|
||||
.....##.#.......#.#........#...
|
||||
........#..#.##.#..............
|
||||
...#...............#.#.........
|
||||
...#..#...#..##....#...........
|
||||
...#.............#....#.....#..
|
||||
..#......#..#...#.......#......
|
||||
..............##...............
|
||||
#.......#.........#......#....#
|
||||
.#.....###.....#...#.#.#...#...
|
||||
#.....................#....#.#.
|
||||
.......#...................#...
|
||||
...#.#...................#....#
|
||||
....#....#.......#...#.........
|
||||
..##.#............#..#.........
|
||||
.....##.#..............##..###.
|
||||
...........#....#....#.........
|
||||
#.....#...#...#.#.#.#.##.#...#.
|
||||
.#...............#....##.......
|
||||
.....#..#......#....#.......##.
|
||||
.....#........#.......#........
|
||||
...#...##...#..##...#.....##...
|
||||
.....#.........#.###...##...#..
|
||||
.#.##...#........#.#.#.#....#..
|
||||
....#......##.#...#.....#....#.
|
||||
.......###..........#..#..#....
|
||||
......#...#.##.................
|
||||
....#...#...#.........#......#.
|
||||
.....#...........#...###....#..
|
||||
.....#...#.#.#....##.#......#.#
|
||||
......#...#.....#..#..#........
|
||||
#......#..#...##........###....
|
||||
##.....#....##..#.#.###.#...#..
|
||||
........#....#.......#.....#..#
|
||||
#.#.#.##.#.#...................
|
||||
..#...##....#......#.....##....
|
||||
.......#.##..#........##..#....
|
||||
.#.#....##......#.#..........#.
|
||||
#..............#............#..
|
||||
.#.#.#.#.#.####.#.#...##.......
|
||||
.#..#.....##.#.......#.##...#..
|
||||
..#.#........#.............#.#.
|
||||
..#.#..........#..#........#...
|
||||
..#..#...#.......##...#.#....##
|
||||
...#.....#.#.#.....#....#....#.
|
||||
.#...#......#.....#..##........
|
||||
...#.......##.#.#.....#......#.
|
||||
...........#.....#.#.......#...
|
||||
#...........#...#..#.#........#
|
||||
....#......#..##........#..###.
|
||||
.#..#........................#.
|
||||
#.......#......#...#...#..#....
|
||||
....#.#...#..#.#....#....##.#..
|
||||
.....#......#..#..........##.#.
|
||||
.#.....#...........#.........#.
|
||||
...###.#...#.......#.#.........
|
||||
.......#....#..........#..#...#
|
||||
......##..#.......#...##.......
|
||||
..#..........#.......#.........
|
||||
..........#..#..#..#..#........
|
||||
.#.................####...#.#.#
|
||||
..##.....#............#........
|
||||
....#.....###...#......#....#.#
|
||||
...##.#...........#.##......#..
|
||||
#..##..#..#....#...#..#........
|
||||
......#....#........#.......#..
|
||||
......#.....#......###.........
|
||||
.#.....#.#......#.......#......
|
||||
..#.........#..#..#........##.#
|
||||
..#.#....#.....#....##....#.#..
|
||||
...#.............##............
|
||||
........#..#..#......#...#.....
|
||||
.....#.#...#...##.....#.....#..
|
||||
.#..#.#..........##...##.....#.
|
||||
......##.#..........#...#.....#
|
||||
#.#.##......#....#..........#..
|
||||
................#.......#.##...
|
||||
#.......#.....#.......#....#...
|
||||
#..#.....#.##..##...........#..
|
||||
.....#....#.#.##..........#..##
|
||||
#.......#.....#.##...........#.
|
||||
........#.##........###..#.#...
|
||||
........#..................#...
|
||||
#.........................#...#
|
||||
....#.........#...#.#..#.....#.
|
||||
.#............#....#...........
|
||||
..#.#...#..##...#.#.......#....
|
||||
.#.#....#...........#.........#
|
||||
...#.#..........#.....#...#....
|
||||
......#....#.#...............##
|
||||
....##......###...##.##.....##.
|
||||
............#.#....#.#.....#..#
|
||||
.....#..#.....#.#...###....#...
|
||||
.......##....##..#...##..#...##
|
||||
.....#.......##..#...#...#....#
|
||||
#.........##....#........###.#.
|
||||
...#..##...#...#.........#.#.#.
|
||||
....#.#.....#.....#............
|
||||
#........#....#..#........#....
|
||||
.......#....#...#..............
|
||||
#...#.........##.....###.#.....
|
||||
.#....##..#...#..##.........#..
|
||||
....#.....#......##..#..#....#.
|
||||
#.#..#.........#........#......
|
||||
..#.......#.........#.....###..
|
||||
..#..........#...........#....#
|
||||
..#...............#......#..#..
|
||||
....#..#...#....###.....#..#..#
|
||||
#...#...#..#...........#....#..
|
||||
.#....#.#..#....#.#...........#
|
||||
.....#.....#..#....#..#....#...
|
||||
#.#..#...........#.#...........
|
||||
..................#.#.......#..
|
||||
...#.........#.....#..##....#..
|
||||
.........#.#...#.........##....
|
||||
...#..#....#.....#...#..#......
|
||||
.#.##.....#....#....#......##..
|
||||
##..#.........#.#....#...#.....
|
||||
#......#.#...#....#.#..#.......
|
||||
.......#.....#.....###....#.#..
|
||||
.#....##.#.....#...#.......#...
|
||||
.#.......#..#...#......#..#..##
|
||||
...............#...#...........
|
||||
#..............#....#.#.#....#.
|
||||
...........#..#.......#.##..#..
|
||||
..#......#.#....#...#.#.....#..
|
||||
#..............................
|
||||
#..#....#..........#...#.......
|
||||
......#.............#####......
|
||||
.#...###......#.#.#.##..#......
|
||||
............#.##.....#.........
|
||||
.........#....##....#..........
|
||||
###....#......#.......#........
|
||||
.#.......##..........#..#....#.
|
||||
#..#.....................#....#
|
||||
........#...........#..........
|
||||
..#..........#...#..#.........#
|
||||
..#..#......##................#
|
||||
.....##..#...#..#..............
|
||||
.......#...##..#...............
|
||||
.......##..#.####....#....#.#..
|
||||
#.#..#..........#........##....
|
||||
....##....#.#..#....#.#...#....
|
||||
......#.......#...#.....#...#..
|
||||
..#..#...#.....#.......###.....
|
||||
...#.......#.#.#.......#.##....
|
||||
...............#..#.#........#.
|
||||
.#....###.#......#.............
|
||||
.#..#...#....#.#..#.....#......
|
||||
.......#.##....#.#.##.##...#.#.
|
||||
..#...#....#.#..##.#.....#...##
|
||||
..#...#......#...#......#...#..
|
||||
....#..#...#.#..#......#.......
|
||||
#..#...............#......#.##.
|
||||
.#....#...#..........#.#.....#.
|
||||
.#..#.#.#................#..#..
|
||||
.#....#.#...#..##.###..#...###.
|
||||
#.............#.....#.........#
|
||||
...#.........#...#.......#..#..
|
||||
......#..#.........#..........#
|
||||
........##................#..#.
|
||||
......#...#.#.....#......##....
|
||||
...............#...#....#......
|
||||
...#.#..#..#.....##.###..##..#.
|
||||
.#....##......#...#..##..#.....
|
||||
.....#.........##.##....#...#..
|
||||
.....#.#..................####.
|
||||
#.....#...#.............##....#
|
||||
#.#..........#...#..#..#.......
|
||||
#..#.#.........#...............
|
||||
....#...#.........#...##.......
|
||||
...........#.....#..##..#......
|
||||
#.....#.......#.#........#.....
|
||||
..##..#.....#...##......#......
|
||||
....#....#.....................
|
||||
............#......#.........##
|
||||
.....##.............#.....##..#
|
||||
.......#.............#..#.#.##.
|
||||
.###...#......#..#........##.#.
|
||||
..#.#...#.#....#.....#..#......
|
||||
..#.#..#.##........#...#.......
|
||||
........#.#...............#..#.
|
||||
........##.......#...#.......#.
|
||||
...#........##.#..........#.#.#
|
||||
..#..###.#.#.......#.#......#..
|
||||
....#..........#...#..#........
|
||||
...#..#...#...#.#....#...#..#..
|
||||
...#...#........#......##...#.#
|
||||
#...........#..........#..#.##.
|
||||
...#..##..................#.#..
|
||||
...##.#...#....#.#...#.####....
|
||||
.....#...#.#.#..#..............
|
||||
.....#..#.#.#..#...............
|
||||
..#..#..##...#.#..#.....##....#
|
||||
.......#.#..#.....#....#.......
|
||||
...#..#....#.........#...#.....
|
||||
..............#.#...#...##.....
|
||||
...................#...........
|
||||
.#......#.#...................#
|
||||
.##.....#........#.........#..#
|
||||
.##..##...#...................#
|
||||
...#....#.#..#.#.#..#.....##...
|
||||
.......#..#....#......####.#...
|
||||
.##..#..##....#.......#........
|
||||
.#...#...........##............
|
||||
.....#.....#........#..........
|
||||
....##..#....#.....#...........
|
||||
.#...#....................#....
|
||||
....#.........#.......##.....#.
|
||||
.#....#..#.....#.##....#.......
|
||||
....#..#.........#.#....#.#....
|
||||
.......#.........##....#.......
|
||||
..#......#....#....#...#.......
|
||||
........#..#.......#.##......#.
|
||||
..#.....#......#...#..#.......#
|
||||
#..#.....##...#...#............
|
||||
.......##.......#........#...#.
|
||||
..#......................#...#.
|
||||
....##.#.............#......#..
|
||||
#.#............................
|
||||
...##.#.....#.#............#.##
|
||||
......#...#..#.........##......
|
||||
.#.......#.....##.......#.#....
|
||||
...........#.#.........#..##...
|
||||
...#..........#.##....#........
|
||||
........#..#..#...#....#....#..
|
||||
........##....#.#....#........#
|
||||
..#........##....###....#......
|
||||
#................###...#...#...
|
||||
................#.#..###......#
|
||||
..#.....##.#................#..
|
||||
.....#...............#..#......
|
||||
..#.......####.....#..#.#....##
|
||||
..#.....#..#....#..............
|
||||
#.#...........#.#.....#..##....
|
||||
#.#..........#.......#...#.###.
|
||||
........#....#...#..#.#........
|
||||
.#.....#......#..#..#..###..#..
|
||||
.#.........#.##.#.#......##....
|
||||
..#.........#...##..#........#.
|
||||
.#...................#.........
|
||||
...#.#........#................
|
||||
............#.....#..##........
|
||||
..#.....#.#......#.......#...#.
|
||||
........#....##..##...#.....##.
|
||||
.#........#.#....#.#....#.#..#.
|
||||
#.#.......#....................
|
||||
.#..#...##.........#..#........
|
||||
.........#...............#.....
|
||||
...#...#.....#......#.......#..
|
||||
###......................#.#..#
|
||||
...#.....####........#..#.....#
|
||||
#.#...#.#...................##.
|
||||
.........#.....................
|
||||
#..........##..#.....#....#....
|
||||
.......#...#.#.##.#..##........
|
||||
..........#..#.#..#.#.......#.#
|
||||
.....................#.#...#...
|
||||
...........#.#........#.#.#....
|
||||
.......#......#........#...#.#.
|
||||
.........#....................#
|
||||
.##.##....#...#.#.#.#..........
|
||||
#....##..#.##....#....#.......#
|
||||
.##.#...#...............#....#.
|
||||
.......#...#.###....#..........
|
||||
.....#....#...#..#.............
|
||||
#.........#.##....#.#.#........
|
||||
..#...#.............##..#..#...
|
||||
#..##.......#..........#...#.#.
|
||||
.#..#.....#...........#......#.
|
||||
......#......#..............##.
|
||||
.#...#..#...#..####.....#.....#
|
||||
....##.......#..........##.....
|
||||
.#.....#.......#.....#.#...#...
|
||||
..#..#..#.#...#......#.........
|
||||
......#.#....#........#.......#
|
||||
........#.......#..............
|
||||
..#...#.#....#........#.......#
|
||||
............#....#...##.#......
|
||||
.........#.............#..#....
|
||||
#.............#.#..##.......#..
|
||||
#....#...........###....#......
|
||||
...#.....................#.....
|
||||
....#.#..........#...#.......#.
|
||||
......#..#.......#...#...#....#
|
||||
.#.#..#.....##.#........#......
|
||||
...........#...#.#.............
|
||||
...###............#...#..#.....
|
||||
..#.#.......#...#.#..#.........
|
||||
.#......##...........#.....#.##
|
||||
.....##.....#....##...##.#.#...
|
||||
..........#.#.#......#........#
|
||||
..#.#........#....##....#.#....
|
||||
.#....#...##...........#....#..
|
||||
##......#...#.......#..........
|
||||
.##...###..#...#......#..##.#.#
|
||||
...........##.#..##...#.......#
|
||||
..#..............##............
|
||||
........#..#........#...#..#.#.
|
||||
..#.............#......#...##..
|
||||
#...##....#...#....#....#.#....
|
||||
.#.#......#..##............#.#.
|
||||
.....###.#....##....#....#.....
|
||||
#.#.#..........#...#...#.#.#...
|
||||
.....#.#...........####........
|
||||
.....#....##...#.##..#......#..
|
||||
#....#.......#.##.......#..#...
|
||||
.....#.....#........#..........
|
||||
.......#.......#...#.##......#.
|
||||
...#.........##...#.#.#......##
|
||||
#........#........#...#..#.....
|
||||
.#......#.#......#.#...#....#..
|
||||
#..#....##.....##..............
|
||||
...#.##............#..........#
|
||||
.....#.#....#..#.#............#
|
||||
..#......#...###.##.......###..
|
||||
........#....#.#.#.#...........
|
||||
............#..#........#.....#
|
||||
....#...............#..........
|
||||
......#....#....###..#.......##
|
||||
#...#...##....#.........#...#..
|
||||
...........#.#.............#...
|
||||
...#..#.....#..##.#....#......#
|
||||
..#...#..#...#......#..........
|
||||
....#..#....#.......#........#.
|
||||
|
2041
4/input.txt
2041
4/input.txt
File diff suppressed because it is too large
Load Diff
1711
5/input.txt
1711
5/input.txt
File diff suppressed because it is too large
Load Diff
29
5/part1.py
29
5/part1.py
@ -4,19 +4,20 @@ with open("input.txt", "r") as f:
|
||||
boardingPasses = f.read().split("\n")
|
||||
|
||||
def decodePass(encoded):
|
||||
row = 0
|
||||
row += 64*(encoded[0] == "B")
|
||||
row += 32*(encoded[1] == "B")
|
||||
row += 16*(encoded[2] == "B")
|
||||
row += 8 *(encoded[3] == "B")
|
||||
row += 4 *(encoded[4] == "B")
|
||||
row += 2 *(encoded[5] == "B")
|
||||
row += 1 *(encoded[6] == "B")
|
||||
column = 0
|
||||
column += 4*(encoded[7] == "R")
|
||||
column += 2*(encoded[8] == "R")
|
||||
column += 1*(encoded[9] == "R")
|
||||
return row * 8 + column
|
||||
if len(encoded) == 0: return 0
|
||||
row = 0
|
||||
row += 64*(encoded[0] == "B")
|
||||
row += 32*(encoded[1] == "B")
|
||||
row += 16*(encoded[2] == "B")
|
||||
row += 8 *(encoded[3] == "B")
|
||||
row += 4 *(encoded[4] == "B")
|
||||
row += 2 *(encoded[5] == "B")
|
||||
row += 1 *(encoded[6] == "B")
|
||||
column = 0
|
||||
column += 4*(encoded[7] == "R")
|
||||
column += 2*(encoded[8] == "R")
|
||||
column += 1*(encoded[9] == "R")
|
||||
return row * 8 + column
|
||||
|
||||
maxBoardingPass = max(decodePass(boardingPass) for boardingPass in boardingPasses)
|
||||
print(maxBoardingPass)
|
||||
print(maxBoardingPass)
|
||||
|
27
5/part2.py
27
5/part2.py
@ -4,19 +4,20 @@ with open("input.txt", "r") as f:
|
||||
boardingPasses = f.read().split("\n")
|
||||
|
||||
def decodePass(encoded):
|
||||
row = 0
|
||||
row += 64*(encoded[0] == "B")
|
||||
row += 32*(encoded[1] == "B")
|
||||
row += 16*(encoded[2] == "B")
|
||||
row += 8 *(encoded[3] == "B")
|
||||
row += 4 *(encoded[4] == "B")
|
||||
row += 2 *(encoded[5] == "B")
|
||||
row += 1 *(encoded[6] == "B")
|
||||
column = 0
|
||||
column += 4*(encoded[7] == "R")
|
||||
column += 2*(encoded[8] == "R")
|
||||
column += 1*(encoded[9] == "R")
|
||||
return row * 8 + column
|
||||
if len(encoded) == 0: return 0
|
||||
row = 0
|
||||
row += 64*(encoded[0] == "B")
|
||||
row += 32*(encoded[1] == "B")
|
||||
row += 16*(encoded[2] == "B")
|
||||
row += 8 *(encoded[3] == "B")
|
||||
row += 4 *(encoded[4] == "B")
|
||||
row += 2 *(encoded[5] == "B")
|
||||
row += 1 *(encoded[6] == "B")
|
||||
column = 0
|
||||
column += 4*(encoded[7] == "R")
|
||||
column += 2*(encoded[8] == "R")
|
||||
column += 1*(encoded[9] == "R")
|
||||
return row * 8 + column
|
||||
|
||||
allIDs = list(decodePass(boardingPass) for boardingPass in boardingPasses)
|
||||
|
||||
|
3796
6/input.txt
3796
6/input.txt
File diff suppressed because it is too large
Load Diff
17
6/part2.py
17
6/part2.py
@ -7,6 +7,17 @@ possibleAnswers = "qwertyuiopasdfghjklzxcvbnm"
|
||||
|
||||
totalGroupYesCount = 0
|
||||
for answerGroup in answerGroups:
|
||||
for possibleAnswer in possibleAnswers:
|
||||
totalGroupYesCount += all(answer.find(possibleAnswer) > -1 for answer in answerGroup)
|
||||
print(totalGroupYesCount)
|
||||
if answerGroup[-1] == "":
|
||||
answerGroup.pop()
|
||||
|
||||
answersCounter = {}
|
||||
for answers in answerGroup:
|
||||
for letter in answers:
|
||||
if letter not in answersCounter:
|
||||
answersCounter[letter] = 0
|
||||
answersCounter[letter] += 1
|
||||
|
||||
for count in answersCounter.values():
|
||||
if count == len(answerGroup):
|
||||
totalGroupYesCount += 1
|
||||
print(totalGroupYesCount)
|
||||
|
15
6/test.txt
Normal file
15
6/test.txt
Normal file
@ -0,0 +1,15 @@
|
||||
abc
|
||||
|
||||
a
|
||||
b
|
||||
c
|
||||
|
||||
ab
|
||||
ac
|
||||
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
|
||||
b
|
1188
7/input.txt
1188
7/input.txt
File diff suppressed because it is too large
Load Diff
@ -5,10 +5,10 @@ with open("input.txt", "r") as f:
|
||||
rawRules = f.read()
|
||||
|
||||
rules = {}
|
||||
for rawRule in rawRules.split("\n"):
|
||||
for rawRule in rawRules.splitlines():
|
||||
bags = re.findall(r"(\d+)? ?(\w+ \w+) bag", rawRule)
|
||||
targetColor = bags[0][1]
|
||||
|
||||
|
||||
rules[targetColor] = {}
|
||||
if (bags[1][1] != "no other"):
|
||||
for bag in bags[1:]:
|
||||
@ -29,4 +29,4 @@ def doesContainShinyGold(color):
|
||||
for color in rules.keys():
|
||||
doesContainShinyGold(color)
|
||||
|
||||
print(sum(shinyGoldMemo.values()))
|
||||
print(sum(shinyGoldMemo.values()))
|
||||
|
@ -5,10 +5,10 @@ with open("input.txt", "r") as f:
|
||||
rawRules = f.read()
|
||||
|
||||
rules = {}
|
||||
for rawRule in rawRules.split("\n"):
|
||||
for rawRule in rawRules.splitlines():
|
||||
bags = re.findall(r"(\d+)? ?(\w+ \w+) bag", rawRule)
|
||||
targetColor = bags[0][1]
|
||||
|
||||
|
||||
rules[targetColor] = {}
|
||||
if (bags[1][1] != "no other"):
|
||||
for bag in bags[1:]:
|
||||
@ -22,4 +22,4 @@ def getTotalBagCount(color):
|
||||
countMemo[color] += (getTotalBagCount(bag[0]) + 1) * bag[1]
|
||||
return countMemo[color]
|
||||
|
||||
print(getTotalBagCount("shiny gold"))
|
||||
print(getTotalBagCount("shiny gold"))
|
||||
|
1191
8/input.txt
1191
8/input.txt
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,7 @@ import re
|
||||
|
||||
lines = []
|
||||
with open("input.txt", "r") as f:
|
||||
lines = f.read().split("\n")
|
||||
lines = f.read().splitlines()
|
||||
|
||||
def simulate():
|
||||
acc = 0
|
||||
@ -40,4 +40,4 @@ for i in range(0, len(lines)):
|
||||
|
||||
if status == "exited":
|
||||
print(acc)
|
||||
break
|
||||
break
|
||||
|
1964
9/input.txt
1964
9/input.txt
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,7 @@ from itertools import combinations
|
||||
|
||||
numbers = []
|
||||
with open("input.txt") as f:
|
||||
numbers = list(int(num) for num in f.read().split("\n"))
|
||||
numbers = list(int(num) for num in f.read().splitlines())
|
||||
|
||||
for i in range(25, len(numbers)):
|
||||
possible = False
|
||||
|
21
9/part2.py
21
9/part2.py
@ -1,13 +1,15 @@
|
||||
from itertools import combinations
|
||||
|
||||
preamble_size = 25
|
||||
|
||||
numbers = []
|
||||
with open("input.txt") as f:
|
||||
numbers = list(int(num) for num in f.read().split("\n"))
|
||||
numbers = list(int(num) for num in f.read().splitlines())
|
||||
|
||||
def getInvalidNumber():
|
||||
for i in range(25, len(numbers)):
|
||||
for i in range(preamble_size, len(numbers)):
|
||||
possible = False
|
||||
for numberPair in combinations(numbers[i-25:i], 2):
|
||||
for numberPair in combinations(numbers[i-preamble_size:i], 2):
|
||||
if sum(numberPair) == numbers[i]:
|
||||
possible = True
|
||||
break
|
||||
@ -17,9 +19,10 @@ def getInvalidNumber():
|
||||
invalidNumber = getInvalidNumber()
|
||||
found = False
|
||||
for setSize in range(2, len(numbers)):
|
||||
for setStart in range(0, len(numbers)-setSize, 1):
|
||||
if sum(numbers[setStart:setStart+setSize]) == invalidNumber:
|
||||
print(numbers[setStart] + numbers[setStart+setSize-1])
|
||||
found = True
|
||||
break
|
||||
if found: break
|
||||
for setStart in range(0, len(numbers)-setSize, 1):
|
||||
contiguos_set = numbers[setStart:setStart+setSize]
|
||||
if sum(contiguos_set) == invalidNumber:
|
||||
print(min(contiguos_set) + max(contiguos_set))
|
||||
found = True
|
||||
break
|
||||
if found: break
|
||||
|
20
9/test.txt
Normal file
20
9/test.txt
Normal file
@ -0,0 +1,20 @@
|
||||
35
|
||||
20
|
||||
15
|
||||
25
|
||||
47
|
||||
40
|
||||
62
|
||||
55
|
||||
65
|
||||
95
|
||||
102
|
||||
117
|
||||
150
|
||||
182
|
||||
127
|
||||
219
|
||||
299
|
||||
277
|
||||
309
|
||||
576
|
Loading…
Reference in New Issue
Block a user