1
0

feat: clean up old solutions

This commit is contained in:
Rokas Puzonas 2022-05-09 01:04:07 +00:00
parent 54865ba454
commit e5fdc2e5fc
39 changed files with 9428 additions and 9358 deletions

View File

@ -1,200 +1,200 @@
1844 1757
1123 1890
1490 1750
1478 1440
1108 1822
1120 1957
1594 2005
1101 1979
1831 1405
1146 2003
1084 1997
1535 1741
1016 1494
1722 1780
1388 1774
1188 1813
1351 447
1477 1429
1215 1990
1678 1767
1159 1969
1558 1787
1581 1944
1400 1863
1550 1778
1306 2004
1852 1991
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
1754 1754
1551 1748
1435 1756
1914 1977
1093 611
1273 1934
1726 1818
1094 1924
1439 528
1689 1753
1607 1867
1646 1865
1588 1799
1698 1743
1539 1955
1493 1993
1352 1972
1163 1987
1482 1960
1044 1817
1837
1900
1839
1946
1786
1857
1840
1985
1850
1801
1926
1523 1523
1142 1886
1253 1492
1250 1737
1909
1766
1986 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 1773
1283 1749
1463 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 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

View File

@ -1,100 +1,98 @@
30 118
73 14
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
98 98
93 154
130 71
170 127
59 38
1 50
110 36
132
66
121
65
26
119
46
2 2
55 140
37 95
44 133
148 15
102
40 40
28 32
35 137
43 45
155
156
97
145
44
153
96
104
58
149
75
72
57
76
56 56
169 143
11
138
37
9
82
62
17
88
33 33
5 5
141
83
15
105
142
36
116
11
45
82
10 10
17 134
159 114
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
23 23
92 111
69 81
147 21
156
25
133
34
8
85
76
103 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

View File

@ -1,7 +1,7 @@
adapters = [] adapters = []
with open("input.txt") as f: 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.append(0)
adapters.sort() adapters.sort()

View File

@ -1,7 +1,7 @@
adapters = [] adapters = []
with open("input.txt") as f: 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.append(0)
adapters.sort() adapters.sort()

View File

@ -1,97 +1,99 @@
LLLLLLLLL.L.LLL.L.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL LLLLLLL.LLLLLLLLLLLLLLL.LLL.LLLL.LLLLLLL.L.LLLLLLL.LLLLLL.LLLLLLLL.LLLLL..LLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL LLLLLLL.LLLLLL.LLLL.LLL.LLLLLLLLLL.LLLLLLL.LLLLL.L.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL .LLLLLLLLLLLLLLL.LLLLLL.LLLLLL.LLLLLLLL.LL.LLLLLLL.LLL.LL.LLLLLLLLLLL.LLL..LLLLLLLL.LLLLLLLL
LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL LLLLLLLLLLLLLLL..LLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.L.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLL.LLLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL LLLLL.L.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLL..LLL.LLLLLL.LLLLLL.LLLL.LLLL.L.LLLLLL
L..LL.L.L....L..L.L....L.....L.L.L......L..L..L....L.LL.......L.....L....L..L................L.... LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.L.LL.LLLL.LLLLLL..LLLLLL.LLLLLLLL..LLLLL.LLLLLLLL..LLLLLLLL
LLLLLLLLLLLLLLL.LLL.LLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL LLLLLLL.LLLLLLLL.LLLLLL.LLLLL.L.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL..LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLL.LLLLLLLLL.LLL.LLLLLLLL .LLLLLL..LLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL.L.LLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLL
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL ..LLLL......L.L..L..L..L.....LL..L.....L.....LLL.L.L.LL...L.....L...LL..L......L...LL......L
LLLLLLLLL.LLLLL.LLL.LLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL LL.LLLL.LLLLLLLLL.LLLLL.LLLLL.LLLLLLL.LLLL.LLLLLL..LLLLLL.LLLL.LLL.LLLLLLLLLLLLLLLLLLLLLLLLL
LL.LLLLLLLLLLLL.LLL.LLL.LLLLLLLL.LLLLLLLL.LLLLLLL..LLLL.LLLLLLL.LLLL.LLLLLL.LLLLL.LLLL.LL.LLLLLLLL LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLL..LLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLL.L.LLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLL LLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLL.LL.LLLLLL.LLLL.LLLLLLLL.LLLLLL..LL.LLLLL.LLLL..L.
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL LLLLLLLLLLLLLL.LL.LLLLL.LLLLLLLLLLLLL.L.LL.LLLLLLL.L.LLLL.LLLLLLLL.LLLLLL.L.LLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLLLLLLLLL.LLLL.LLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL LLLLLLL.L.LLLLLL.LLLLLLLLL.LL.LLLLL.LLLLL..L.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LL
LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLL.LL.LLLLLLLLLLLLLLLL LLLLLLLLLLLLLLLL.LLLLLLLLL.LL.LLLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLL..LLLLLL.LLLLLLLLL.LLLLLLLL
.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 LLLLLLL.LLLLLLL..LLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLL.LLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLL.LLLLLL.L.LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL LLLLLLLLLLLLLLLL.LLLLL..LLLLLLLLLL.LLL.LLLLLLLLLLLLLL.LLL.LLLLLLLLL.LLLLL.L.LLLL.LLLLLLLLLLL
LLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLL.LLLL..LLLLLLL.LLLLLLLL .L......L.LL.L...L.....L..L..L...LL.L.......L.............LL.L......LL.L...LL.L...L.....LL..
LLLLLLLLL.LLLLL..LLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL LL.LLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
.....LL...LL..L...L..L..LL.L..LLL...L..L.LLL...LLL..L.....L...L.....L........LLLL..LLL.....L....L. LLLLL.L.L.LLLLLLLLL.LLLLLLLLLLLLL.LL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL LLLL.LL.LL.LLLLL.LLLL.L.LLLLL.LLLLLLLLLL.LLLLLLLLL..L.LLLLLLLLLLL.L.LLLLL.LLLLLLLLLLLLLLLL.L
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL LLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.L
LLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLL .......LL...L.......LL...L.......LLL......L..L...L...L.....LL..L.L......L.LL.....LL.....L...
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLL LLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLL.LL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLL
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL LLLLLLL.LLLLLLLLLLLLLL..LLLLLLLLLLLLL.LLLL.LL.LLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LL LLLLLLLLLL.LLLLLL.L.LLL.L.LLL.LLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLL.LL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLL.L L.LLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLL..LLLLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLL.LLLLLLLLL.LLLLLLL.LLLL.LLL.LL.LLLLL.LLLLLLLLLLLLLLLL LL.LLLL.LLLLLLLL.LLLLLL.LLLLL.LL.LLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLLLL.LLLLLL.LL.LLLLLLLL
LLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLL.LLLLLLLL LLLLL.L.LLLLLLLL.LLLLLLLLLL.L.LLL.LLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLL
....L..LL.L.L......L..LL.......LL......L..L...L..L.........LL....LL.LLL..LLLL..L..L.......L....L.. LLLLLLL.LLLLLLLL.LLLLLL.LLLLL.LLLLL.L.LLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLL.LLLLLL.LL.LLL.LLLL
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL L..LL.........L....L....L..L.LL.....LL.L.LL...L........L...L...L...L.LLL..LL..LLLLL.L.......
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL LLLLLLL.LLLLLLLLLLLL.LL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.L.LLLLLLLL.LLLLLL.LLLLLLL.L..LLLLLLL
LLLLLLLLL.LLL.L.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLL.LLLLLLLLLLLL LLLLLLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLL.LLLLLL.LLLL.L.LL.LLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL .LLLLLL.LLLLLL.L.LLLLLL.LLLLL.LLLLLLL.L.LL.LLLLLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLL..LLLLLLLL
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL LL.LLLL..LLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL..LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.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 L..LL..........L......L..L....L..L.L.LL.LLL..L.L.L.LLLL...L..L..L.L.L..LLLL.L.L...L..LL.....
LLLLLLLLL.LLLLLLLLLLLLL..LLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL LLLLLLLLLLLLLLLLLLLLLLL.LL.LLLLLLLLLL.LL.L.LLLLLLL.LLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLLLLL.LL.LLLLLLLLLLLLLLLL LLLLLLL.LLLLLLLL.LLLLLLLLLLLL.LLLL.LL.LLLLL.LL.LLL.LLLLLLLLLLLLLLL.LLL.LLLLLLLLLLLLL.LLLLLL.
LLLLLLLLL.LLLLL.L.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL LLLLLL.LLLLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLL..LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL LLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL LLLLLLL.LLLL.LLL.LLLLLL.LLL.L.LLLLLLLLL.LL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLL.LLL.L.LLLLLL
LLLLLLLLL.LL.LL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL LLLLLLLLLLLLL.LL.LLLLLL.LLL.L.LLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLL.LLL.LLLLLL.LLLLLL.LLLLLLLLLLL
LLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL .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......
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLL.LLLLL.L.LLLLLLLL LLLLL.L..LLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLL.LL.LLLL.LLLLLL.LLLLLL.L.LLLLLL.LLLLLLLLLLLL.LLLLL
....L.........LL...L.L..LL.L.L..L......L.L.L...L....L.......LL.LL....L.L...L....L...L....L...L.... LLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL..LLL.LLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLL
L.LLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LL..LLLL LLLLLLL.LLLLLLLL.LLLL.L.LLL.LLLLLLLLL.LLLL.LLLLLLL.L..LLL.LLLLLLL..LL.LLL.LLLLLLLLL.LLL.LLL.
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLL..LLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL LLLLLLL.LLLLLLLL.LLLLLL.L.LLLLLLLLLL..LLLLLLLLLLLL.L.LLLL.LLLLLLLL.LLLLLL.L.LLLL.LL.LLLL.LLL
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.L.LLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL LLLL.LLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL
LLLLLL.LL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL LLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLLL.LLLLLL.LL.LLLLL.LLL.LL.LLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL LL.LLLLLLLLLLLLL.LLLLLLLLLLLL.LLL.LLL.LLLL.LLLLLLLLLLLL.L.LLLLL.LL.LLLLLL.L.L.LLLLLLLLLLLLLL
LLL..L.L........L...L..L.LLLLLLL..LLLL..L...L..L.L..LLL....L..L.LLL..L...L..L.......L.LLLLLL.LL.L. LLLLLL.LLLLLL.LL.LLLLLLLLL.LLLLLLLLLL.LLLL.LL.LLLLLLLLLLL.LL.LLLLL.LLLLL.LLLLLLLLLL.LLLLLLLL
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LL.LLLL.LLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL .LLL.......LL.LL....L..L.....LL.....L..L...LLL....L...L..LLL...L............LLLL.LL.......L.
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL LLLLL.L.LLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLL.LL.LLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LL.LL.LLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL LLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLL.LLL.LLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL L.LLLLL...LLLLLLLLLLLLL.LLLLLLLLLLLLL..LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL
L...L.....LL....L.L.LLLLL.....L....LL..L.....L...L.L.LL.......LL...LL............L.L..L..LLL..LL.. LLLLLLLLLLLLLLLL.L.L.LLLLLLLL.LLLLLLL.LLLL.LLLLL.L.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL LLL.LLLLLLLLLLLLLLLLLLL.LLL.LLLLLLLLLL.LLL.LLLLLL..LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLL.LLLLL.LL L..L.LL...LLL.L...LLL....L.L.L.L.....LL..........LL...L.L.L.LLLL....L.....L....LLL......LLLL
LL.LLLLLLLLLLLL.L.LLL.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LL.LLLL.LLLLLL.LLLLL.LLLLLLL.L.LLLLLL LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.L.LLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLL.LLLL LLLLLLL..LLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LLL.L.L.LL.LLLLLLLLLLL
LLLLLLLLL.LLLLL.L.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL LLLLLLLLLLLLLLLL.LLLL.L.LLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLL.LLLLLLLLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLL LLLLLLL.LLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.L
LLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLL..LLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL LLLLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLL.LLL.LLL.LLLLLL.LLLLLLLL.LLLLLL.LLL.LLLLL.LLLLLLLL
LL...L.........L..LLL........L.L..L....L.L.L....LLLL.LL.L....LL....L.LL.LLL..L..L....LL.L......LLL LLLLLLL.LLLLLLLL.LLLLLL..LLLLLLLLLLLL.LLLL.L..L.LL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLL
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLL.L.LLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL LLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLL..LLLLLLLLLLLL.LLLLLLLLLL.LLLL.LLLLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLL.L.LLLLLLL.LLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL LLLLLL..LLLLLLLL.LLLLLLLLLLLL.LLLLLL..LLLL.LLLL.LL.L.LLLL.LLLL.LLL.LLLLLL.LLLLLLLLLLLL.LLLLL
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL ........LL..LL..L............L..L.L..L....L.......LL...L......L....LLL..L.L......LL..LL.L.L.
...L........L....L.L.LL.LL.L.L.....L.L..L.....LL....L..L.L.L..L..L.L...L.........L.LL.LLLLL..L.... LLLLLLL.LLLLLLLL.LLLLLLLLLLLL.LLLLLL..LLLL.LLLLLLL.LLL.LL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLL.LLLL
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL..LLLL.LLLLLLL.LLLLLLLLLLL.LLL.L.LLLLLLLLLLLLLLLL LLLLLL.LLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLL.L.LLLLLLLL LLL.LLL.LLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLL..LLL.LLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLL.LLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLL..LLLLLLL LLLLLLL.LLLLLLLL.LLLL.L.LLLLL.LL.LLLL.LLLL.L.LLLLL.LL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL LLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL..LLLL.LLLLLL.LLLLLLL.LLLLLL.LLLLLLLL.LLLLLLL.L.LLLLLLLL
..LLLL.L..LL.L......LL.L...L.L..L....LLL.........L....L.......LL.LLL.L.L.....LL.L...L.LLL....L.... LLLLLLL.LLLLL.LL.LLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLL.LLLL.LL.LLLLL
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.L.LLL.LLLLLLL.LLLL.LLLLLL.LLLL..LLLLLLL.LLLLLLLL LLLLLLLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLL.LL.LLLLLLLLLLLLL.LLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLL.LLLLLLLLL.L.LLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL LLLL.L.L...L.......L..LL.LL.LL....LL..L.L.L......L...LLL..L.L.L...LLL...L.....L.LLLL........
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL .LLLLLL.L.LLLLLL.LLLLLLLLLLL..LLLLLLL.LLLL.LLLLLLL.LLLLLL.LLLLL.LLLLLLLLL.LLLL.LLLL.LLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.
LLLLLLLLLLLLLLLLLLLL.LL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL LLLLLLL.L.LLLLLLLLLLLLL.LLLLL.LLL.LLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLL.LL.L.LLLLLLLLLLLLLLLL
LLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL LLLLLLL.LLLLL.LL.LLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLL.LL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL
LL...LLLLL.....LL..L.....L....L......L.L........LL......LL.LL..L..LLL.L...L..L..L.L.....LLLL...LLL L.LLLLL.LLLLL.LLLLLLLLL.LLLLL..LLLLLL.LLLL.LLLLLLL.L.LLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLL.LL..
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL ..L...L.L.......LL.LLL.LLL..L....L..L.L.L..L.L........L...L.LL.L.........LLLLL.L.LL.L...L.LL
LLLLLLLLLLLLLLL.LLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL LLLLLLL.LLLLL.LL.LLLLLL.LLLL..LLLLL.L.LL.LLLLLL.LL.LLLLLLLLLLLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLL LLLLLLL.L.LLLLLLLLLLLLL.LLLLL.LL.LLLLLLL.LLLLLLLLL.LLL.LL.LLLLLLLL.LLL.LL.LLLLLLLLL.LLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL..L.LLLLLLLLLLLL.LLLLLL.L.LLLLLL.LLLLLL.LLLLLLLLL.LLL.LLLL
LLLLLLLLL.LLLLL.LLLLLLL.LLLLL.LLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL .LLLLLL.LL.LL.LLLLLL.L..LLLLLLL.LLLLL.LLLL.LL.LL.L.LL.L.L.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL
.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. LLLLLLLLLLLLLLLLLLLLLLL..LLLLLLLL.LLL.LLLLLLLLLLLLLLLLLL..LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL LLLLLLL.LLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLLL.LL.LL..LLLLLLLL.LLLLLLLLLLLLLLLL.LLL..LLL
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL LLLLLLLLL.LL.LLL.LLLLLLLLLLLLLLLLLLLL.LLL..LLLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLL LLLLLLL.LLLL.LLLLLLLLLLL.LLLL.LLLLLLLLLL.L.LLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL LLL......LL...L...L..LL..L..L......L...L.L..L.........L.LL.LL..L..L.L......L..L........L..L.
LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLL.LLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLL.LL LL.LLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL
LLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLL LLLLLLLLLLLLLL.L.LLLLLLLLLLLL.LL.LLLL..LLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLL.LL.LLLLLLLL
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLL LLLLLLL.LLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLLLL.L.LLLLLL.LLLLLLLL..LLLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLL..LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLL.LLL.LLLLLL.LL.LLLLLL.LLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLL.L.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.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

View File

@ -1,7 +1,7 @@
initialState = [] initialState = []
with open("input.txt", "r") as f: with open("input.txt", "r") as f:
initialState = f.read().split("\n") initialState = f.read().splitlines()
stateWidth = len(initialState[0]) stateWidth = len(initialState[0])
stateHeight = len(initialState) stateHeight = len(initialState)

View File

@ -1,7 +1,7 @@
initialState = [] initialState = []
with open("input.txt", "r") as f: with open("input.txt", "r") as f:
initialState = f.read().split("\n") initialState = f.read().splitlines()
stateWidth = len(initialState[0]) stateWidth = len(initialState[0])
stateHeight = len(initialState) stateHeight = len(initialState)

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,2 @@
1000186 1000677
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 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

View File

@ -1,12 +1,15 @@
def parseBuses(line):
return {i:int(x) for i, x in enumerate(line.split(",")) if x != "x"}
def getBuses(filename): def getBuses(filename):
with open(filename, "r") as f: with open(filename, "r") as f:
f.readline() f.readline()
return {i:int(x) for i, x in enumerate(f.readline().split(",")) if x != "x"} return parseBuses(f.readline())
buses = getBuses("input.txt") buses = getBuses("input.txt")
step = list(buses.values())[0] step = 1
t = step t = 0
for dt, busId in buses.items(): for dt, busId in buses.items():
while (t + dt) % busId != 0: while (t + dt) % busId != 0:

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
def getInstructions(filename): def getInstructions(filename):
with open(filename, "r") as f: 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): def applyMask(value, mask):
return (value | int(mask.replace("X", "0"), 2)) & int(mask.replace("X", "1"), 2) return (value | int(mask.replace("X", "0"), 2)) & int(mask.replace("X", "1"), 2)

View File

@ -1,7 +1,7 @@
def getInstructions(filename): def getInstructions(filename):
with open(filename, "r") as f: 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): def decToBin(decimal):
binary = bin(decimal)[2:] binary = bin(decimal)[2:]

View File

@ -1 +1 @@
11,0,1,10,5,19 19,20,14,0,9,1

View File

@ -5,20 +5,24 @@ def getStartingNumbers(filename):
return [int(n) for n in f.read().split(",")] return [int(n) for n in f.read().split(",")]
numbers = getStartingNumbers("input.txt") 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] lastNumber = numbers[-1]
# 30000000 # 30000000
targetI = 30000000 targetI = 30000000
i = len(numbers)-1 i = len(numbers)-1
while i+1 < targetI: while i+1 < targetI:
if len(occurences[lastNumber]) > 1: number = -1
number = occurences[lastNumber][-1] - occurences[lastNumber][-2] if lastNumber in diff:
number = diff[lastNumber]
else: else:
number = 0 number = 0
i += 1 i += 1
occurences[number] = occurences.get(number, []) if number in positions:
occurences[number].append(i) diff[number] = i - positions[number]
occurences[number] = occurences[number][-2:] positions[number] = i
lastNumber = number lastNumber = number
print(lastNumber) print(lastNumber)

View File

@ -1,266 +1,263 @@
departure location: 31-221 or 241-952 departure location: 48-793 or 800-971
departure station: 27-780 or 787-957 departure station: 36-235 or 247-974
departure platform: 34-405 or 411-970 departure platform: 25-850 or 862-964
departure track: 41-672 or 689-963 departure track: 40-173 or 193-959
departure date: 26-827 or 843-970 departure date: 42-895 or 902-955
departure time: 38-283 or 297-963 departure time: 43-692 or 715-951
arrival location: 50-250 or 259-970 arrival location: 38-528 or 549-967
arrival station: 35-878 or 884-950 arrival station: 43-133 or 141-963
arrival platform: 49-746 or 772-955 arrival platform: 40-651 or 675-951
arrival track: 37-457 or 481-954 arrival track: 48-801 or 811-973
class: 28-418 or 443-970 class: 50-562 or 587-955
duration: 32-722 or 728-970 duration: 43-520 or 527-968
price: 41-519 or 525-966 price: 44-745 or 752-950
route: 50-606 or 628-974 route: 41-929 or 941-963
row: 46-92 or 111-967 row: 37-828 or 838-958
seat: 41-112 or 135-972 seat: 47-475 or 491-972
train: 25-540 or 556-957 train: 38-198 or 210-965
type: 39-574 or 585-954 type: 33-66 or 74-949
wagon: 32-699 or 719-957 wagon: 35-492 or 507-962
zone: 49-71 or 83-951 zone: 35-358 or 381-965
your ticket: 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: nearby tickets:
854,509,243,913,926,411,308,322,69,875,779,371,51,514,367,873,524,645,934,322 946,293,123,156,812,202,75,884,162,420,436,60,720,719,272,642,515,724,150,875
358,885,814,800,197,363,388,50,138,820,854,793,89,738,733,306,796,334,387,8 221,912,887,284,758,512,907,690,384,802,742,118,318,330,282,232,507,470,871,615
194,897,151,634,178,597,173,791,251,344,306,568,804,145,142,136,573,173,242,508 810,431,649,91,53,784,300,722,904,166,210,75,491,87,892,625,211,151,434,608
793,667,856,328,284,596,215,70,873,507,777,948,851,922,694,153,743,250,926,142 643,779,232,722,326,212,626,867,265,308,561,565,322,59,466,126,60,398,462,902
219,870,66,945,803,485,325,670,788,186,822,365,451,512,906,443,678,404,312,173 96,926,879,397,752,863,721,283,648,731,790,314,787,127,646,123,132,228,932,611
329,572,654,409,804,563,847,330,265,148,875,904,173,411,927,259,945,536,148,920 170,762,169,400,589,606,232,783,97,404,97,187,404,398,436,316,736,50,149,637
788,867,405,249,51,454,819,512,306,850,384,337,71,587,316,649,724,389,645,318 219,131,774,321,403,362,424,109,434,387,434,650,862,847,229,645,214,941,738,75
271,143,266,447,322,187,650,254,497,155,860,405,655,946,635,862,517,937,729,721 781,825,387,409,418,393,392,230,501,722,819,877,716,596,636,114,82,75,457,921
211,856,566,262,156,201,804,735,172,809,870,56,313,801,447,508,622,517,91,807 780,114,230,227,784,267,210,318,78,262,258,902,91,464,728,313,986,753,434,847
312,334,928,657,776,276,319,893,163,162,244,206,446,719,568,856,391,831,722,931 721,89,151,101,423,52,305,761,679,920,683,835,887,248,643,842,87,422,409,264
250,68,900,183,785,790,270,922,312,914,269,664,305,337,350,904,778,896,68,371 276,288,942,66,888,195,83,149,840,322,844,323,112,866,167,276,630,813,850,21
516,650,391,333,604,730,406,779,341,354,447,162,884,53,803,327,861,721,321,328 156,598,212,318,509,193,116,550,560,863,716,587,906,461,229,442,980,254,103,276
654,169,947,825,395,4,374,569,518,885,315,563,67,900,195,511,789,739,345,863 108,878,230,391,459,715,909,358,56,136,641,921,850,107,197,446,470,154,257,300
909,871,876,874,194,141,151,54,805,381,943,413,556,553,268,305,629,774,179,540 429,289,136,558,869,233,649,267,725,454,781,589,343,691,528,131,821,784,597,919
325,299,721,195,772,376,255,699,737,911,567,274,859,186,780,605,556,568,220,162 896,385,874,717,220,630,420,643,255,613,550,817,686,218,562,347,118,86,470,217
482,799,304,784,495,136,949,938,140,58,773,152,855,342,884,393,276,445,557,821 382,883,106,760,432,933,925,559,780,680,944,913,465,148,56,193,401,300,623,459
534,807,455,221,832,89,658,734,947,945,672,259,456,137,558,557,902,744,382,315 756,615,507,213,633,332,459,606,610,426,793,547,288,520,843,439,621,298,382,866
274,775,797,928,940,299,821,653,216,918,163,814,162,63,929,640,321,456,362,257 628,427,555,988,766,313,875,846,924,474,877,58,319,154,606,88,311,622,475,625
889,188,454,309,488,457,775,183,166,382,916,262,322,307,716,204,664,411,790,354 53,884,689,473,272,87,19,466,437,429,104,470,425,107,458,411,812,294,159,464
366,894,820,567,180,641,146,859,517,497,735,186,310,362,203,381,824,885,718,513 228,398,462,889,629,683,894,756,724,875,107,793,129,832,781,250,319,166,941,51
60,813,630,672,88,947,663,405,515,376,51,182,910,380,903,847,318,843,542,572 630,811,639,755,302,235,641,869,692,130,433,859,111,258,269,632,337,132,114,867
447,300,897,602,55,918,664,272,623,245,368,411,699,157,735,587,722,641,574,356 262,472,683,210,308,679,101,255,60,469,684,901,212,914,418,464,793,947,84,130
890,804,648,369,731,848,394,866,249,884,3,652,212,876,742,892,517,844,667,932 254,905,261,864,614,866,559,879,78,466,163,632,909,516,304,396,220,204,875,740
89,524,529,628,324,944,860,449,887,392,112,805,592,181,905,929,323,787,140,54 826,866,633,763,840,903,772,752,558,941,916,108,102,380,754,467,357,313,152,452
301,885,646,353,657,820,572,629,666,891,195,378,274,849,729,24,196,875,515,212 480,635,828,720,873,145,393,473,112,734,105,344,447,334,743,678,607,308,90,228
709,197,454,827,733,742,91,175,366,572,508,314,170,282,744,316,164,69,178,801 466,232,907,740,752,332,219,553,388,521,635,599,549,214,330,631,288,129,726,599
218,457,484,161,800,860,911,492,250,898,455,888,252,54,932,745,393,856,363,519 127,398,601,902,848,297,428,691,163,58,194,94,871,152,91,881,640,516,808,743
207,923,189,314,182,483,179,730,174,186,324,481,658,494,294,167,492,854,803,778 416,383,432,270,357,382,624,425,105,635,734,999,759,398,61,634,635,471,298,58
800,87,644,61,586,517,645,905,190,573,316,855,150,170,304,389,218,979,388,741 879,762,84,305,97,912,895,149,55,105,441,167,715,57,314,840,727,331,174,147
846,482,84,326,798,745,926,725,362,176,340,197,165,572,268,912,481,558,335,632 404,839,97,831,462,556,562,491,925,403,558,110,793,730,131,258,599,271,613,688
184,773,536,594,945,494,738,401,649,949,404,135,274,467,817,299,853,740,603,926 257,417,266,66,277,743,351,811,409,760,78,254,320,465,467,457,336,945,217,807
843,855,551,798,443,586,481,721,809,340,142,570,774,938,150,485,154,299,822,857 82,447,444,218,915,101,599,906,394,385,210,552,472,297,562,597,411,194,142,359
272,782,366,666,658,917,731,509,733,371,639,245,585,312,336,805,111,868,642,511 691,130,312,559,198,290,555,484,324,151,879,221,866,402,560,165,510,788,285,294
447,888,511,822,822,940,527,909,274,938,867,984,193,274,527,449,487,888,515,560 520,354,609,603,826,728,263,288,478,719,164,763,435,892,905,412,286,126,350,690
304,174,393,1,170,444,568,634,395,481,260,586,729,634,694,55,305,531,501,162 216,637,56,842,466,925,411,828,306,833,475,269,84,270,116,892,778,270,399,422
629,585,932,813,572,945,598,369,743,375,178,411,397,648,221,805,648,72,817,698 887,989,786,232,438,322,629,319,422,194,302,387,57,85,267,894,111,128,265,801
631,554,698,861,906,380,484,70,739,606,359,519,418,111,728,564,935,208,90,383 787,150,367,820,142,79,391,340,285,883,785,616,213,76,50,398,300,724,233,729
90,500,825,163,899,532,392,641,571,484,220,877,530,351,368,918,229,337,367,50 349,871,621,791,787,407,635,345,890,150,271,998,733,385,893,759,302,273,616,341
171,341,914,323,737,256,647,939,745,138,908,648,690,857,145,774,855,919,745,605 838,741,337,254,676,405,387,120,800,442,148,329,141,106,410,143,891,488,449,883
179,906,324,91,365,322,843,512,857,324,139,69,902,823,332,313,776,254,653,457 221,621,686,789,612,258,631,449,104,847,100,266,274,991,817,400,271,98,286,889
668,237,456,573,913,503,140,200,283,449,241,148,148,323,635,734,694,143,815,924 148,276,228,770,929,797,631,412,104,759,877,401,649,767,553,213,614,402,310,737
84,195,63,216,356,730,457,67,923,654,269,173,646,400,65,664,641,455,400,294 310,303,587,584,466,333,589,912,763,828,947,339,108,161,618,605,354,235,114,941
401,373,418,600,848,659,740,59,400,796,418,449,721,993,644,163,875,444,949,87 218,223,646,96,166,108,366,883,315,154,159,650,352,602,77,252,742,515,404,728
628,934,497,657,336,325,398,62,384,150,672,335,785,170,305,241,167,361,502,571 391,562,716,108,919,521,511,790,430,60,678,675,197,677,221,729,295,340,752,305
458,858,501,491,271,217,569,162,168,205,335,325,744,380,54,303,884,794,916,646 762,916,949,888,596,516,920,868,522,464,917,512,760,274,337,874,397,65,880,82
280,498,728,358,587,171,891,525,935,819,843,398,515,671,729,418,257,512,871,591 520,622,286,108,471,730,811,906,553,704,465,122,302,877,151,754,436,877,352,415
288,891,658,311,853,166,510,84,502,937,633,360,143,692,374,92,515,393,60,277 327,163,814,291,58,731,260,393,633,555,789,941,250,166,610,776,846,95,575,683
447,153,383,332,260,447,694,299,531,490,636,534,166,137,892,858,817,498,654,784 726,258,342,921,146,145,914,723,349,514,838,594,632,776,925,263,850,930,887,336
252,799,885,852,856,774,89,154,333,590,338,504,165,378,696,606,53,728,349,537 261,692,739,924,754,138,164,826,754,551,473,871,305,131,81,759,295,946,862,217
221,281,278,179,737,813,522,798,355,283,193,570,921,928,264,745,585,241,351,808 753,863,309,437,285,162,867,826,704,682,753,759,684,637,801,288,301,734,760,259
556,244,60,858,452,221,655,595,204,603,899,329,417,449,503,894,192,56,980,587 291,686,406,163,424,473,214,762,405,227,816,556,779,324,225,844,596,705,644,160
875,780,350,728,889,527,671,790,589,857,520,936,180,942,818,448,558,664,920,819 285,95,276,757,394,212,982,118,290,611,843,438,611,107,438,323,843,877,720,152
355,858,531,976,530,135,55,336,894,150,194,905,379,496,338,299,262,247,511,574 107,131,327,719,872,345,602,423,453,84,727,733,812,691,910,327,975,459,261,91
182,637,184,865,7,933,55,826,733,738,820,245,566,655,632,564,529,900,538,342 728,319,568,304,878,424,125,514,848,512,74,740,785,620,215,117,419,839,471,315
905,509,943,814,798,819,417,485,327,61,160,168,616,210,788,936,788,365,908,497 523,817,891,422,77,232,449,557,52,437,62,801,453,297,332,100,603,948,848,260
50,946,380,527,894,203,267,810,906,198,569,803,888,170,555,694,659,70,371,590 356,280,894,517,219,305,281,128,55,926,116,324,822,682,354,284,810,528,288,232
591,815,364,401,766,815,275,596,176,634,370,561,505,181,890,138,452,735,518,147 325,465,724,401,170,690,159,589,427,376,125,228,297,847,734,771,633,153,717,849
827,683,52,534,656,510,328,323,52,278,815,930,743,137,53,190,903,741,660,875 445,354,404,406,724,231,414,842,297,643,147,914,918,556,214,628,55,764,521,518
167,859,260,725,923,917,922,142,339,388,363,508,914,667,790,862,515,282,212,350 136,111,817,913,793,892,97,881,266,916,235,684,196,335,614,620,415,722,757,223
161,882,443,265,517,483,776,650,661,499,887,794,302,516,150,412,485,698,820,185 280,889,234,98,166,874,813,216,584,320,612,692,818,514,397,876,91,730,471,928
345,487,810,868,871,190,209,507,327,534,86,856,305,877,931,210,121,886,903,567 60,820,880,562,403,444,685,692,866,233,299,210,649,763,16,92,133,783,601,683
843,875,362,560,320,17,869,64,948,561,896,248,778,174,54,947,792,386,630,366 930,302,453,158,382,773,639,735,356,877,791,602,257,146,723,675,640,198,825,396
916,904,884,91,867,796,862,153,453,449,397,908,485,264,53,848,141,936,889,551 618,80,850,401,383,560,134,821,787,92,141,313,759,216,341,400,731,649,770,651
569,740,646,200,792,649,213,719,787,456,933,414,361,526,340,732,63,135,469,865 921,108,916,162,288,919,591,766,911,572,587,846,474,651,225,718,527,443,716,249
359,384,221,87,650,396,241,197,281,947,19,418,527,738,172,486,857,282,262,525 216,259,882,317,150,83,252,144,115,509,894,228,396,285,124,744,379,227,903,55
854,603,494,532,160,329,162,537,358,887,415,913,487,531,172,177,393,521,940,698 317,326,381,132,63,172,850,434,938,336,475,905,848,101,906,920,232,98,635,265
403,535,738,334,827,530,527,495,229,526,512,340,248,170,866,188,691,820,398,822 609,819,650,731,418,387,917,647,433,102,333,678,410,89,390,781,987,442,59,520
654,241,630,740,920,485,532,722,479,348,90,51,87,158,241,389,301,531,496,350 395,792,904,864,789,880,401,615,148,639,515,845,442,518,909,885,922,511,370,83
547,143,492,534,871,939,303,306,88,247,268,55,363,312,564,344,740,560,277,150 244,916,109,728,890,455,297,593,173,841,509,520,114,101,153,99,255,167,441,218
915,823,90,651,852,416,668,207,905,563,249,308,84,338,216,67,346,112,523,924 99,622,881,677,398,598,441,286,779,445,459,528,453,721,887,780,54,827,254,17
825,734,211,581,454,811,340,347,207,532,506,400,660,412,328,573,319,146,735,519 420,349,413,216,415,898,513,716,741,122,768,927,114,282,718,285,509,198,431,336
540,875,176,220,355,184,885,854,780,572,83,142,181,387,371,603,925,514,654,9 814,305,302,120,302,754,233,864,298,645,119,142,282,157,492,605,198,605,347,205
398,402,561,151,608,565,528,850,136,497,939,386,943,919,938,86,946,329,380,367 862,948,283,145,278,324,406,872,337,245,104,766,792,58,129,424,291,103,328,650
390,912,651,811,563,63,20,368,146,187,173,538,658,364,938,264,869,194,573,845 847,949,875,165,824,551,440,431,7,515,113,688,869,456,268,787,475,890,902,125
154,331,321,244,189,445,88,873,208,650,312,368,744,932,243,345,792,58,995,637 278,389,765,399,354,724,631,833,303,326,471,106,850,928,515,327,417,163,811,130
172,813,638,66,859,161,915,921,928,383,587,644,388,183,868,358,319,681,602,567 131,247,870,676,823,703,395,305,157,221,115,944,790,262,559,91,225,767,286,738
399,866,603,207,557,172,366,349,707,812,664,806,454,299,593,779,772,651,502,170 421,618,346,141,886,860,916,113,436,731,158,915,634,823,556,233,730,407,551,326
310,777,312,917,406,670,874,187,559,945,58,505,393,393,418,666,158,297,811,664 172,401,850,344,922,443,457,617,417,606,297,619,829,408,880,753,780,159,910,288
66,936,270,595,515,844,546,491,638,314,381,177,791,805,264,640,342,693,172,160 402,875,271,149,55,558,720,729,136,880,600,692,641,863,330,907,249,876,822,492
521,270,906,822,273,269,448,905,456,304,176,330,249,211,492,780,515,539,802,640 282,231,454,256,293,437,273,566,195,317,133,382,817,88,826,880,520,850,433,460
135,790,271,772,935,492,300,875,827,896,282,260,891,915,657,879,505,88,283,303 689,94,795,752,169,519,818,248,927,820,920,400,925,150,719,145,588,610,388,683
443,275,414,237,888,596,729,938,161,514,147,275,854,497,652,629,366,910,264,922 790,551,431,96,271,392,915,312,175,871,393,772,827,145,347,778,400,121,344,635
370,146,402,649,328,859,789,787,794,665,321,810,174,777,889,396,649,389,494,410 749,337,787,153,267,212,61,214,334,450,258,65,335,917,812,517,234,109,882,865
642,629,221,538,400,591,84,983,815,692,267,267,266,179,667,564,566,359,689,159 395,684,597,272,640,763,333,442,901,847,101,142,717,408,281,252,87,775,254,824
499,806,219,663,690,536,535,664,83,370,531,640,589,988,654,511,260,666,173,531 874,787,125,63,820,768,63,443,875,235,75,995,258,339,388,171,389,850,220,269
670,733,900,881,635,313,281,449,179,695,513,397,915,774,532,209,343,375,889,661 306,434,927,294,265,511,841,596,446,64,344,234,295,418,690,427,259,993,884,357
654,300,195,921,434,564,143,861,720,893,875,208,860,777,557,305,62,774,71,139 316,225,792,249,937,735,728,89,518,343,144,424,225,921,382,222,904,847,83,285
342,916,201,899,741,357,645,363,146,317,630,380,287,370,773,649,174,358,876,667 417,614,514,895,569,678,210,438,388,466,867,818,825,131,454,735,271,60,801,348
875,736,866,60,867,308,159,152,296,872,354,241,56,586,656,513,491,933,213,323 279,294,684,768,976,801,420,722,688,258,305,80,255,923,914,725,94,322,642,752
564,632,648,503,190,728,270,272,850,666,348,663,263,201,406,206,697,249,504,164 429,924,232,560,451,921,90,782,773,446,516,255,942,415,759,335,392,784,714,517
568,592,738,518,277,456,780,635,883,70,218,411,722,403,175,910,334,413,484,175 171,744,604,431,618,389,171,396,761,866,774,816,454,448,113,372,594,513,142,847
827,198,282,832,53,111,414,411,329,388,909,208,602,531,745,734,195,52,502,938 690,430,145,91,612,907,145,523,819,904,414,683,341,225,389,734,145,270,839,888
493,324,779,691,882,746,335,891,937,594,527,145,167,729,848,315,54,556,731,746 834,317,597,429,676,247,117,812,253,421,424,125,437,605,255,144,740,307,281,412
163,153,806,795,246,398,312,505,52,897,880,780,590,519,70,487,533,53,498,896 536,792,911,172,941,409,737,462,291,257,443,247,511,353,257,102,334,609,877,461
220,339,843,212,524,596,151,412,853,865,860,496,360,810,559,357,201,746,491,734 876,323,898,553,767,394,888,924,729,396,120,399,775,716,928,77,607,173,317,132
137,822,270,870,852,53,730,761,648,165,481,801,414,370,399,519,944,305,343,814 20,878,561,325,613,426,415,122,300,893,914,819,508,394,722,255,145,528,341,401
455,303,137,919,166,336,448,532,531,211,504,773,593,698,905,455,171,995,500,603 724,945,323,775,220,452,784,808,633,78,888,350,865,317,621,50,745,947,439,152
851,631,742,789,332,205,818,350,386,495,528,544,361,210,693,827,305,870,689,506 503,465,912,326,948,383,881,915,649,761,635,344,811,843,862,264,516,784,150,689
111,163,207,780,595,393,874,692,368,300,10,485,220,450,499,860,398,190,593,211 928,904,631,285,820,726,120,874,107,75,294,389,207,111,61,754,223,109,417,164
631,871,733,921,864,599,170,653,361,362,211,746,219,258,313,370,193,321,207,188 422,947,95,173,758,610,344,429,554,754,108,238,646,173,285,723,352,520,86,634
897,831,929,868,843,342,901,791,450,537,280,445,511,667,719,389,197,360,398,945 555,232,684,615,768,562,327,253,92,827,948,524,457,227,736,947,623,786,60,311
375,906,876,211,457,361,373,557,65,164,170,184,794,728,692,22,503,325,395,142 676,254,358,55,318,95,757,999,82,676,384,491,876,99,682,169,426,792,213,424
812,360,395,735,69,825,445,904,356,804,336,858,542,366,171,642,504,903,917,939 798,214,435,882,642,509,432,826,786,684,740,84,793,762,866,389,909,347,752,913
156,309,731,695,723,450,940,632,793,262,62,638,728,378,186,446,919,263,247,821 365,152,65,908,257,811,775,512,229,718,468,554,949,682,647,60,452,786,910,432
534,215,60,854,730,867,163,927,799,994,932,865,670,269,791,857,347,53,744,664 844,157,770,917,589,88,736,513,103,101,507,792,159,686,611,468,508,246,402,224
507,373,844,729,451,264,455,283,923,366,514,212,272,378,307,814,410,662,557,531 619,789,839,592,427,744,60,323,50,925,235,718,577,323,761,313,162,715,687,825
606,87,594,289,893,772,511,926,111,939,165,314,413,53,650,936,498,263,309,179 119,445,470,307,351,880,406,933,56,895,596,411,347,722,301,210,142,756,155,689
788,153,740,318,856,444,337,183,178,632,50,180,245,490,792,443,163,723,489,510 844,349,853,556,605,151,645,850,611,453,394,388,154,297,772,717,90,163,147,197
301,140,324,571,884,508,868,872,301,730,798,484,593,147,259,350,700,810,852,692 845,610,336,324,352,889,872,337,919,893,436,234,445,569,80,919,149,555,639,302
416,943,853,178,827,565,279,566,317,892,251,857,817,217,538,271,348,63,264,140 146,601,789,877,867,587,759,115,906,784,647,677,57,234,393,842,894,825,89,485
378,346,699,393,903,943,534,880,151,302,414,397,819,933,689,150,893,397,598,58 603,274,319,401,604,928,817,845,341,883,688,499,863,875,285,106,385,94,741,924
277,311,645,525,904,141,112,697,347,151,877,376,149,643,358,793,929,773,881,310 688,760,426,266,290,636,319,824,949,891,871,557,145,349,421,385,774,370,893,871
855,488,659,250,513,918,64,484,889,488,360,91,51,274,932,735,880,54,737,369 261,528,615,370,214,507,107,350,925,336,332,618,335,424,410,213,874,82,215,91
732,89,976,659,299,772,494,185,268,369,891,513,305,342,188,264,86,945,657,732 119,917,551,303,562,251,301,97,112,336,916,695,641,383,256,919,730,403,675,732
417,155,392,689,171,186,53,982,931,85,803,147,376,825,499,945,158,719,193,904 726,317,115,269,831,904,527,110,520,251,513,847,599,519,273,287,813,65,389,142
206,397,910,722,591,359,315,268,194,356,606,948,728,822,805,198,63,292,791,140 550,614,257,265,624,485,93,440,722,164,757,406,127,592,154,220,864,840,592,435
719,664,490,521,562,938,592,404,401,276,316,313,637,803,177,937,453,794,851,282 102,74,498,86,724,274,768,646,420,684,905,173,289,52,680,472,784,920,784,249
587,530,400,165,944,873,350,696,389,930,636,260,780,879,383,825,660,655,305,656 550,682,420,84,446,806,159,759,91,628,731,332,388,438,155,811,256,91,93,221
890,914,67,299,824,914,360,211,68,186,206,899,705,443,246,361,734,568,846,909 260,90,784,224,510,401,423,141,868,869,134,558,782,319,227,902,256,907,356,737
379,976,403,160,939,737,817,777,263,742,416,506,325,111,597,213,887,405,330,507 228,446,471,148,155,628,627,233,104,684,818,805,387,411,171,297,781,409,560,761
211,641,930,320,790,719,362,90,792,323,696,519,925,599,92,173,466,592,923,142 397,599,355,639,122,349,685,82,445,262,976,272,424,146,828,211,82,729,283,841
495,529,164,911,505,668,357,390,88,731,628,630,170,519,910,416,69,335,667,473 784,230,268,912,704,885,168,730,338,909,389,824,757,419,194,270,610,647,872,638
616,746,332,354,905,730,83,59,903,525,313,571,304,925,56,844,643,383,793,909 445,778,159,419,871,63,125,814,792,160,725,840,802,948,779,262,128,643,395,623
556,668,601,848,397,175,260,152,727,672,787,664,788,281,369,199,453,573,574,149 855,158,288,559,685,415,839,292,905,592,89,161,211,593,195,916,922,456,610,330
216,174,851,71,790,366,785,213,594,640,746,216,656,729,207,157,86,570,176,731 405,408,731,731,561,282,124,147,300,148,993,410,166,945,549,418,651,459,435,279
384,606,204,809,199,303,285,779,509,493,52,217,391,451,596,69,885,629,69,929 608,263,740,844,484,156,117,78,622,164,680,329,433,770,355,452,84,76,117,621
844,157,61,571,186,184,728,831,646,898,146,902,661,54,391,219,928,62,204,218 214,273,61,457,451,356,868,766,839,469,118,299,334,423,948,790,558,258,85,21
271,391,809,504,852,157,986,853,889,413,940,791,137,271,628,221,493,813,932,365 328,117,384,80,50,172,730,612,459,650,327,120,868,276,461,411,687,188,774,587
482,190,329,886,921,162,802,914,787,532,452,790,873,210,657,810,595,235,395,323 647,138,257,745,844,213,743,876,600,226,509,731,112,249,198,515,745,555,633,877
821,339,199,325,414,150,16,259,566,730,496,799,445,371,249,177,936,511,88,135 340,996,905,104,736,685,295,737,291,627,614,893,102,270,676,293,404,520,885,744
903,147,384,485,70,300,268,345,830,631,318,269,787,174,937,500,360,511,90,910 289,426,920,599,474,460,642,768,161,326,839,286,877,203,153,643,235,310,343,346
84,322,277,178,280,153,915,191,92,571,327,822,646,65,413,638,540,715,886,245 683,415,553,400,460,645,650,589,763,120,715,883,607,611,78,222,834,266,767,87
455,465,316,696,515,112,265,788,533,367,205,193,641,144,282,651,530,190,601,604 475,195,421,820,467,303,567,468,457,214,553,86,816,218,160,603,516,107,349,684
218,802,398,351,142,886,357,932,210,638,152,734,90,53,787,343,531,873,17,737 387,754,155,348,510,193,757,501,297,790,908,440,234,96,115,720,113,612,556,321
339,90,808,176,322,316,157,598,302,590,327,775,218,151,806,372,165,478,184,299 317,216,58,724,825,597,790,305,237,148,459,285,872,763,642,77,848,893,647,553
900,527,921,413,884,573,380,221,482,942,566,778,879,668,144,161,567,208,659,326 52,912,118,267,299,399,736,558,292,691,780,768,81,841,717,195,776,994,715,311
365,854,372,112,176,457,416,569,152,871,740,809,652,371,147,90,784,735,851,788 725,146,117,600,279,413,450,92,465,94,120,317,641,878,310,416,990,82,267,309
386,388,573,919,277,69,608,803,813,933,905,855,862,337,326,719,733,563,667,450 231,381,649,562,452,381,869,813,75,262,910,374,321,744,631,263,820,266,125,251
593,187,825,503,142,187,559,719,175,193,495,849,564,61,524,511,593,737,867,605 319,765,769,294,767,147,551,850,728,929,319,51,793,284,558,946,494,125,885,676
199,395,635,487,910,822,944,864,415,661,988,55,153,375,248,187,196,641,819,160 651,435,893,270,769,755,691,210,824,305,593,840,643,320,226,594,923,684,202,337
389,878,304,196,904,395,716,628,925,135,145,593,632,495,649,598,209,86,812,859 412,106,787,54,628,330,322,551,325,883,210,519,463,443,818,827,203,165,775,249
653,406,798,497,806,556,84,320,202,278,363,787,594,824,305,585,208,192,213,395 615,225,420,435,589,310,156,319,361,904,782,827,352,516,781,63,730,355,415,335
55,691,789,88,876,910,594,331,274,862,51,563,875,370,614,900,569,947,172,666 263,770,330,716,112,412,113,336,388,922,454,465,723,449,928,295,327,522,451,727
149,736,926,525,16,929,263,52,444,645,935,83,452,347,815,509,806,454,152,868 743,307,677,114,888,243,247,645,820,85,341,556,321,302,821,635,340,762,814,516
307,605,265,638,578,797,864,855,414,895,372,495,849,65,318,926,888,528,372,646 208,288,116,558,677,737,397,613,838,148,159,903,355,557,260,408,873,732,826,331
189,941,53,531,699,415,342,635,633,244,805,193,794,180,976,339,54,456,196,316 310,775,201,840,351,329,215,887,828,100,742,341,527,256,274,57,587,528,317,131
369,322,332,874,468,52,197,518,507,356,489,694,268,796,351,655,206,655,907,244 881,424,948,449,217,358,739,601,886,431,513,269,447,914,922,335,845,598,881,11
347,382,161,675,628,745,689,349,662,776,893,787,210,854,411,376,855,510,111,155 755,622,937,520,771,169,868,158,620,444,165,839,775,781,315,914,597,615,779,879
322,597,266,874,448,774,306,916,905,416,550,820,249,483,663,378,931,65,793,281 843,407,475,217,893,107,781,892,165,596,196,895,119,787,738,411,19,611,790,745
357,149,598,734,873,344,802,943,745,850,218,61,479,873,58,203,268,371,279,348 5,155,314,381,107,617,904,785,300,251,842,83,322,171,51,310,310,783,594,211
261,154,947,178,866,360,733,484,195,806,342,312,942,334,252,189,804,221,556,912 877,384,66,513,406,645,941,893,353,412,196,924,738,135,216,631,758,257,716,77
245,338,858,532,804,565,892,445,491,889,329,190,264,599,347,567,901,879,321,929 120,408,477,848,343,438,306,337,406,211,63,336,871,170,304,277,917,685,272,129
452,1,213,593,847,850,372,898,660,414,738,947,497,485,795,390,245,632,887,814 800,427,121,123,498,57,817,651,403,646,929,868,291,394,779,944,515,385,719,555
152,362,445,694,860,272,848,363,2,944,334,926,450,823,943,249,142,318,190,907 387,639,844,629,876,428,906,60,149,513,116,335,867,780,247,140,309,292,411,114
188,919,70,513,56,501,148,164,600,401,211,353,219,321,449,521,897,71,792,303 551,877,761,764,446,254,348,320,737,873,87,758,126,168,997,357,164,231,329,681
989,592,493,60,369,655,86,263,772,779,181,537,263,180,450,173,370,84,596,344 443,611,169,429,745,644,821,826,224,871,821,740,975,917,145,133,911,902,102,210
491,671,934,539,513,163,830,111,314,647,266,798,667,179,325,849,921,356,864,204 142,296,591,273,141,691,430,150,806,247,173,116,228,434,755,78,271,51,507,358
331,491,181,921,193,925,644,178,411,532,643,874,68,87,601,555,788,343,890,217 105,838,744,634,279,325,259,677,160,813,682,745,632,277,438,581,949,826,876,349
218,945,341,669,802,143,571,140,188,154,899,777,573,88,302,257,444,587,411,908 729,528,689,459,291,413,626,253,639,843,920,320,61,460,620,429,651,877,829,650
559,572,365,448,179,930,668,636,58,354,142,7,403,318,387,382,157,388,188,447 738,977,507,93,51,825,638,340,791,132,92,106,164,439,736,864,787,382,198,492
302,365,799,547,211,872,729,55,585,904,799,189,922,152,645,925,561,273,313,446 440,739,717,453,528,844,122,731,435,59,739,911,85,557,114,690,453,443,514,581
892,213,531,257,539,855,316,242,349,886,242,248,153,822,670,176,586,670,386,310 224,617,74,644,559,818,884,286,641,869,815,324,259,157,588,338,145,139,386,758
556,215,50,270,668,484,140,333,867,55,326,944,70,414,454,83,510,626,569,283 462,915,444,387,740,222,456,515,761,332,985,884,491,315,462,401,93,275,814,259
179,455,501,670,902,185,536,574,376,900,195,919,982,629,148,884,662,487,845,331 346,297,277,551,865,850,596,223,515,119,149,990,283,169,527,887,343,887,411,445
65,794,491,211,322,388,888,343,782,644,135,558,564,263,488,666,335,275,672,206 258,161,56,909,107,684,77,117,627,846,474,550,839,770,435,916,873,942,899,261
281,252,887,594,52,203,194,587,606,155,777,843,451,412,851,56,196,194,794,498 728,635,474,149,846,253,514,339,839,301,394,882,153,333,19,154,328,732,234,620
812,640,850,777,175,450,918,160,418,165,507,304,532,445,385,373,504,492,499,712 778,308,392,162,471,436,347,786,922,332,288,930,761,815,77,551,357,947,129,777
451,153,209,486,153,500,645,328,324,912,979,691,657,490,381,572,199,931,86,336 588,303,84,771,592,50,55,426,436,123,549,799,610,914,608,57,916,452,164,406
796,603,908,792,228,525,58,807,363,572,657,66,350,55,331,515,484,775,456,137 721,334,402,395,874,406,128,55,764,734,323,519,81,81,435,170,314,802,785,106
280,265,910,174,128,343,356,775,200,372,112,598,447,56,154,516,859,268,265,938 733,154,184,879,391,614,349,620,783,607,342,438,235,614,304,398,527,59,717,914
318,628,356,396,452,266,742,906,180,273,797,661,309,327,310,201,888,872,622,320 103,467,338,305,272,162,877,276,336,340,301,631,681,945,99,419,162,830,302,267
84,50,311,898,363,320,208,341,358,672,354,995,818,731,199,791,176,810,740,327 327,984,848,60,61,845,948,438,843,332,214,102,780,681,353,845,849,765,550,401
494,454,931,721,394,918,507,553,656,167,210,662,730,530,807,695,647,917,863,356 646,609,527,595,840,592,401,637,354,926,305,428,220,887,340,761,937,870,905,332
737,193,215,937,53,347,54,381,793,271,632,389,69,526,162,374,699,324,7,333 419,442,997,722,293,269,928,780,59,474,51,516,844,212,459,457,744,159,554,512
160,716,746,199,306,629,873,628,163,903,249,585,695,281,403,322,630,261,528,150 102,761,296,396,675,403,680,277,193,938,878,735,382,789,941,431,731,105,104,492
327,797,533,660,669,638,924,532,307,53,495,24,396,691,908,185,516,283,720,845 914,755,911,212,90,248,635,404,650,501,718,277,731,165,266,608,90,474,553,692
574,216,58,458,202,221,793,164,454,906,457,182,62,696,943,376,300,312,741,919 418,295,299,307,813,500,320,411,160,492,386,445,288,90,639,83,678,440,880,461
344,358,691,566,794,316,592,298,361,654,731,189,819,573,493,250,296,894,194,744 170,771,115,413,446,631,343,727,720,248,598,787,482,619,596,133,912,882,262,846
385,873,483,249,699,808,736,166,899,789,486,900,777,646,345,148,739,762,658,63 649,352,766,643,165,928,152,50,864,210,812,748,430,399,218,691,590,173,774,343
662,923,853,888,256,259,242,87,589,332,821,876,143,516,367,213,91,935,330,794 419,156,318,733,63,402,292,147,731,163,471,213,219,488,512,606,917,132,262,436
311,532,802,374,355,526,337,795,662,161,475,646,631,147,561,63,452,194,871,55 265,465,552,945,690,758,315,131,692,866,410,271,101,949,559,881,103,329,12,344
216,165,263,561,268,896,283,699,327,495,869,332,527,701,260,729,245,145,698,742 684,599,816,332,298,716,439,394,908,865,919,638,155,555,99,103,474,813,65,135
880,731,453,593,334,919,564,639,335,924,905,65,363,942,780,247,733,411,921,719 475,761,928,316,791,895,415,916,391,59,626,341,289,82,599,981,818,432,441,715
373,908,601,315,914,656,825,928,351,902,859,734,986,537,639,823,816,634,181,859 170,683,840,872,207,718,161,868,924,908,616,515,255,64,866,59,463,256,850,511
500,137,378,918,515,923,411,735,415,819,599,346,146,400,459,899,906,798,859,518 118,461,701,231,838,605,677,817,550,871,50,792,467,634,742,725,305,155,400,288
670,622,590,346,793,518,396,571,810,790,168,866,486,948,602,91,221,283,337,849 685,52,346,104,649,397,886,388,79,894,414,93,134,491,161,249,342,225,603,949
277,452,731,532,61,266,391,575,503,397,569,825,562,71,298,911,364,175,635,312 552,398,525,778,620,872,294,552,870,325,755,403,457,463,130,226,171,87,321,329
265,322,849,816,501,821,910,928,909,15,512,539,205,396,564,516,538,851,851,642 873,949,947,164,149,643,286,946,832,905,167,93,336,754,679,557,894,893,458,591
271,55,901,353,313,386,498,408,383,58,412,337,211,572,217,65,804,917,449,518 728,629,64,470,811,778,228,910,645,121,215,324,292,112,785,462,948,62,140,299
283,364,187,806,153,891,279,372,350,502,195,338,454,412,538,446,854,864,721,609 432,198,788,308,390,775,92,590,349,614,340,272,220,520,779,836,409,62,864,390
778,366,398,596,892,867,412,195,274,812,535,883,921,51,353,340,933,83,61,598 904,322,74,511,138,406,730,285,326,212,776,813,877,718,446,251,631,117,448,437
788,404,934,21,246,888,654,539,145,418,150,658,510,91,281,930,788,932,910,282 684,917,260,916,259,844,95,518,613,826,162,264,412,269,114,617,271,446,302,996
634,156,798,159,565,487,592,633,390,910,139,854,277,140,585,2,332,513,492,932 681,98,243,528,323,211,228,770,515,906,734,723,257,866,168,630,622,553,789,624
380,198,209,696,417,385,50,329,804,745,935,516,591,735,719,694,768,731,508,111 321,605,758,603,824,823,317,148,77,86,466,267,429,433,325,462,892,774,739,935
174,734,268,301,854,745,518,615,345,312,244,565,633,506,599,789,773,352,886,178 883,339,802,793,847,472,928,474,390,291,790,891,411,918,249,315,305,470,690,557
891,216,324,184,527,449,572,535,378,911,339,659,979,928,560,823,773,318,814,386 554,74,417,402,516,318,217,491,171,595,268,632,821,346,942,118,442,504,391,551
565,58,253,415,177,402,86,206,201,192,948,395,648,694,628,899,865,561,401,323 592,946,231,155,262,146,305,407,684,911,143,924,395,8,560,838,902,611,735,355
863,340,557,324,136,986,245,167,482,354,596,56,89,374,178,690,242,849,637,346 822,716,888,553,619,212,347,278,878,609,883,887,305,292,732,94,12,921,354,172
341,601,416,697,308,777,188,785,150,526,263,903,915,661,897,734,164,497,510,137 784,906,328,205,562,827,439,335,211,792,91,838,644,307,127,649,811,329,302,517
92,599,932,895,325,499,199,139,561,191,668,697,511,329,315,815,833,887,813,443 513,323,132,773,452,264,725,286,854,640,115,420,257,154,780,684,107,684,417,775
402,396,495,852,386,453,148,84,826,800,263,564,52,606,659,871,698,185,266,522 426,213,753,469,722,325,410,603,162,100,426,842,425,86,642,555,609,987,414,435
645,878,352,812,865,776,881,902,262,917,810,205,165,314,606,368,739,644,853,559 120,825,351,381,216,265,947,757,754,594,948,518,423,764,866,689,719,317,505,744
517,527,452,807,306,68,181,523,216,628,874,719,605,269,266,155,897,496,817,369 587,343,279,680,105,885,303,207,686,276,689,844,76,112,104,144,774,763,849,824
507,927,927,220,378,775,865,380,339,631,366,917,491,643,156,574,391,543,51,515 67,430,263,475,466,774,275,629,411,446,127,613,123,281,907,127,308,492,446,319
906,244,787,280,194,806,813,213,523,890,745,671,665,377,336,449,169,565,630,909 355,632,131,197,594,440,286,800,929,849,249,129,157,424,617,16,121,342,718,170
259,791,87,329,191,275,540,71,155,176,362,874,217,320,827,517,774,782,398,70 621,296,128,291,409,625,382,644,876,621,82,402,648,879,828,130,221,566,415,723
496,820,812,332,706,370,417,857,649,500,308,559,794,394,181,58,777,92,413,383 569,724,912,619,196,66,593,156,551,908,433,463,258,295,92,251,340,221,821,106
651,368,357,324,153,244,385,868,70,667,280,372,742,314,556,800,298,578,492,561 763,631,819,382,169,873,352,129,287,483,467,302,679,625,425,234,630,451,339,330
160,159,324,902,340,158,455,205,370,875,986,787,193,85,507,650,333,663,843,319 645,289,746,849,264,279,599,123,769,615,277,108,819,624,170,422,447,720,772,258
744,391,514,399,936,65,928,197,678,450,586,662,732,632,654,359,640,203,272,443 403,632,114,319,682,224,906,133,53,398,384,146,425,118,288,914,132,299,257,836
170,362,136,567,303,596,186,287,183,663,199,811,742,603,338,360,275,918,169,808 449,150,320,386,101,348,255,138,331,632,388,729,775,414,782,761,623,922,840,300
402,330,894,481,802,218,199,906,147,492,364,315,697,821,842,150,665,720,728,455 826,146,318,157,776,142,260,998,53,328,745,847,629,80,641,402,868,400,218,470
56,184,204,629,586,197,354,519,318,697,694,742,176,338,664,900,140,518,71,880 223,839,56,839,86,176,325,214,211,890,387,721,790,514,549,635,551,846,783,737
483,932,861,559,212,503,663,394,863,918,560,887,745,322,881,940,896,60,167,344 863,338,165,676,141,862,261,615,122,272,942,403,143,321,588,214,579,107,763,282
629,590,176,650,719,374,152,518,409,930,902,643,266,922,205,375,196,387,875,948 436,194,120,286,266,554,893,615,785,352,572,472,298,399,873,756,352,427,819,324
556,63,800,148,78,886,169,697,516,663,158,185,341,889,499,802,167,851,342,871 311,159,780,163,815,814,823,256,893,263,917,138,327,849,909,268,821,922,84,912
399,402,946,386,175,640,886,682,633,493,507,371,670,145,892,162,166,198,632,214 602,826,125,137,408,294,59,915,108,277,676,945,248,869,315,210,520,436,267,407
560,915,526,498,923,305,667,216,602,864,519,186,924,326,241,905,329,407,824,163 313,906,61,786,692,58,157,862,724,998,721,606,307,144,510,121,944,283,167,724
417,0,138,596,495,797,189,64,404,799,670,381,658,912,482,161,651,537,270,354 250,296,626,597,475,334,65,589,625,893,297,638,131,66,600,132,481,731,553,445
139,815,530,914,592,318,337,447,449,911,809,184,263,264,781,826,328,731,538,338 681,406,560,93,984,823,343,166,452,788,311,448,121,325,790,470,355,872,158,126
302,448,272,163,505,313,691,940,392,878,817,258,800,905,642,738,349,856,264,932 463,947,274,217,806,115,826,107,210,621,893,288,100,903,457,612,132,626,826,122
493,307,64,283,86,925,153,815,600,850,511,698,280,520,305,904,493,179,531,367 893,550,983,53,917,816,838,109,299,408,406,322,874,221,161,325,642,388,94,102
357,817,648,386,513,806,592,701,735,372,573,564,855,214,366,848,353,816,136,264 397,279,788,463,268,233,423,604,894,640,815,893,560,76,274,675,211,684,240,274
201,631,313,145,538,912,447,363,194,796,561,668,777,306,780,488,323,646,251,451 687,455,825,76,716,864,520,351,769,929,472,200,786,315,812,890,279,891,449,394
934,66,490,826,314,168,821,603,539,417,735,864,902,895,358,197,998,777,307,525 352,730,81,742,948,148,436,338,686,103,345,596,849,717,195,462,872,316,480,254
170,60,858,249,557,197,476,396,416,810,932,737,396,929,602,198,529,657,450,871 710,881,230,784,491,635,144,423,449,775,234,623,882,772,304,871,465,745,133,113
68,390,153,452,377,907,231,587,187,332,778,385,112,690,513,874,906,357,380,393 275,92,170,392,155,821,892,406,203,409,302,66,115,634,756,773,75,720,840,81
492,822,261,729,548,138,655,283,485,640,497,920,482,897,320,810,183,175,488,698 267,101,431,793,678,890,453,376,864,447,76,605,555,788,599,457,339,124,725,595
902,286,366,890,405,603,911,259,499,940,374,271,376,515,694,904,948,653,516,743 850,942,169,873,340,398,463,636,91,681,145,676,371,280,943,455,893,457,422,875
595,506,741,630,948,401,915,884,549,386,847,166,914,694,690,569,368,371,777,388 873,650,89,159,79,578,611,886,554,902,247,845,595,256,840,51,318,787,421,345
445,245,145,821,633,141,417,948,327,204,147,149,325,507,857,890,73,537,191,380 416,80,468,736,382,295,690,636,252,604,389,232,600,276,595,352,135,234,912,683
506,734,638,342,534,55,719,473,369,322,945,894,365,803,889,404,405,179,663,145 868,927,719,268,312,876,153,684,740,203,78,403,398,283,553,866,640,760,390,147
383,857,774,404,674,338,350,495,187,884,304,507,862,948,155,207,259,61,651,362 257,263,723,872,561,837,913,274,840,680,121,588,352,55,327,252,618,52,948,436
147,338,892,348,629,210,488,243,299,451,162,161,689,657,280,365,581,302,518,137 82,475,337,130,491,303,633,621,770,942,274,478,682,354,758,824,232,731,886,328
721,274,947,627,570,892,489,328,221,318,443,557,50,648,250,166,532,186,629,944 414,616,833,141,431,118,309,332,871,397,150,868,826,215,737,907,604,627,93,422
539,532,191,984,112,282,801,200,913,336,948,739,815,777,161,50,742,804,159,212 304,863,471,79,522,683,508,353,908,918,516,124,418,613,382,214,422,774,65,117
67,343,887,712,273,500,661,141,57,172,567,356,65,515,788,631,693,922,897,373 350,643,549,409,366,649,253,885,88,417,766,221,769,331,800,683,879,683,142,812
196,512,803,383,864,802,694,348,417,826,591,8,797,194,191,794,206,862,159,739 180,111,948,783,948,678,171,278,550,210,311,432,78,508,330,764,416,198,88,382
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

View File

@ -9,13 +9,14 @@ def getInput(filename):
return ( return (
{m[1]: m[2] for m in re.finditer(r"(.+): ([^\n]+)", fields)}, {m[1]: m[2] for m in re.finditer(r"(.+): ([^\n]+)", fields)},
[int(n) for n in myTicket.split(",")], [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: class FieldRule:
def __init__(self, raw: str): def __init__(self, raw: str):
self.raw = raw self.raw = raw
match = re.match(r"(\d+)\-(\d+) or (\d+)\-(\d+)", raw) match = re.match(r"(\d+)\-(\d+) or (\d+)\-(\d+)", raw)
assert match
self.range1 = [int(match[1]), int(match[2])] self.range1 = [int(match[1]), int(match[2])]
self.range2 = [int(match[3]), int(match[4])] self.range2 = [int(match[3]), int(match[4])]
@ -34,7 +35,7 @@ for fieldName, fieldRule in fields.items():
invalidNumbers = [] invalidNumbers = []
for ticket in nearbyTickets: for ticket in nearbyTickets:
for num in ticket: for num in ticket:
if all(not rule(num) for rule in fields.values()): if all(not rule(num) for rule in fields.values()): # type: ignore
invalidNumbers.append(num) invalidNumbers.append(num)
print(sum(invalidNumbers)) print(sum(invalidNumbers))

View File

@ -9,13 +9,14 @@ def getInput(filename):
return ( return (
{m[1]: m[2] for m in re.finditer(r"(.+): ([^\n]+)", fields)}, {m[1]: m[2] for m in re.finditer(r"(.+): ([^\n]+)", fields)},
[int(n) for n in myTicket.split(",")], [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: class FieldRule:
def __init__(self, raw: str): def __init__(self, raw: str):
self.raw = raw self.raw = raw
match = re.match(r"(\d+)\-(\d+) or (\d+)\-(\d+)", raw) match = re.match(r"(\d+)\-(\d+) or (\d+)\-(\d+)", raw)
assert match
self.range1 = [int(match[1]), int(match[2])] self.range1 = [int(match[1]), int(match[2])]
self.range2 = [int(match[3]), int(match[4])] self.range2 = [int(match[3]), int(match[4])]
@ -65,7 +66,7 @@ validNearbyTickets = []
for ticket in nearbyTickets: for ticket in nearbyTickets:
isTicketValid = True isTicketValid = True
for num in ticket: for num in ticket:
if all(not rule(num) for rule in fields.values()): if all(not rule(num) for rule in fields.values()): # type: ignore
isTicketValid = False isTicketValid = False
break break
if isTicketValid: if isTicketValid:

View File

@ -1,8 +1,8 @@
..#..##. ....#...
#.....## .#..###.
##.#.#.# .#.#.###
..#...#. .#....#.
.###.... ...#.#.#
######.. #.......
.###..#. ##....#.
..#..##. .##..#.#

File diff suppressed because it is too large Load Diff

View File

@ -1,323 +1,323 @@
...............#.#............. ........#..#.##.#..............
##..#....................#...## ...#...............#.#.........
......#..#.#.....#..#.#.##..... ...#..#...#..##....#...........
.........#...#..............#.# ...#.............#....#.....#..
............#.......##......... ..#......#..#...#.......#......
...#.....#.....#...#.....#..#.. ..............##...............
..............#..##.#..#......# #.......#.........#......#....#
.##.....#.....#......##.#...... .#.....###.....#...#.#.#...#...
.#..........###....#...##....#. #.....................#....#.#.
.....#....#.#.......#......##.. .......#...................#...
.#....#......#.......#........# ...#.#...................#....#
..#.#.......#..##.....##....... ....#....#.......#...#.........
...#.#....#.......#.......#...# ..##.#............#..#.........
##.##...##..#......#.#.....#..# .....##.#..............##..###.
.#.#.......#..#.#......#...#.#. ...........#....#....#.........
#.......##.......#...#......... #.....#...#...#.#.#.#.##.#...#.
.....#......#.#.#.....#....##.. .#...............#....##.......
.#.#........#....#..#..#....... .....#..#......#....#.......##.
...#....#..###.........#.....#. .....#........#.......#........
........#........#........#.... ...#...##...#..##...#.....##...
..##..............#.....#.#..#. .....#.........#.###...##...#..
.#...##.............#.#........ .#.##...#........#.#.#.#....#..
....#..#...........#.......#... ....#......##.#...#.....#....#.
..#....#.....................#. .......###..........#..#..#....
#.#..................##......## ......#...#.##.................
.#.##....#......#........#..... ....#...#...#.........#......#.
.........##.....#....#...##..#. .....#...........#...###....#..
#..........#..#.#.............# .....#...#.#.#....##.#......#.#
.........#...#.#.#.#..##..##... ......#...#.....#..#..#........
#...#.....#..#..#....#...#..... #......#..#...##........###....
..##.....#..................#.. ##.....#....##..#.#.###.#...#..
#..###.....#....#.......#..#... ........#....#.......#.....#..#
...##.##..#............#......# #.#.#.##.#.#...................
........###.........###......#. ..#...##....#......#.....##....
#..##....#.........#.........#. .......#.##..#........##..#....
....#.....................#.... .#.#....##......#.#..........#.
#..#..##..#..####.##..#.....##. #..............#............#..
..#...#.#....#....##.....#..... .#.#.#.#.#.####.#.#...##.......
...#.#.........#.....#.#....... .#..#.....##.#.......#.##...#..
....#................#..#...##. ..#.#........#.............#.#.
....#..#..........#...#.#.##... ..#.#..........#..#........#...
........#..##............#....# ..#..#...#.......##...#.#....##
...#......##..........#.##...#. ...#.....#.#.#.....#....#....#.
.......##...................... .#...#......#.....#..##........
.......##..........#....#.#...# ...#.......##.#.#.....#......#.
......###.##..##..#....#...#..# ...........#.....#.#.......#...
#.#...........##.....#........# #...........#...#..#.#........#
..#...........#..###....#.#.#.. ....#......#..##........#..###.
........#...........#......##.. .#..#........................#.
.........#...##.###...###..#... #.......#......#...#...#..#....
.....#.....#..##.........##.... ....#.#...#..#.#....#....##.#..
...##..............#.....#...## .....#......#..#..........##.#.
.##....#.......###.....#....... .#.....#...........#.........#.
.#...........##.............##. ...###.#...#.......#.#.........
......#..#..##.##......#......# .......#....#..........#..#...#
........###........#......#.#.. ......##..#.......#...##.......
#.#....#.....#........#......#. ..#..........#.......#.........
.##..#.........##...##....#.... ..........#..#..#..#..#........
.....#.........#...##.....#.... .#.................####...#.#.#
.............#........###....#. ..##.....#............#........
......#.......#.#........#.#... ....#.....###...#......#....#.#
..#....#.#...#....#...#.#...##. ...##.#...........#.##......#..
#...#......##..##......#.##.### #..##..#..#....#...#..#........
...##.#....#...#....#.........# ......#....#........#.......#..
...#..####.....##.#..#.#...##.. ......#.....#......###.........
##.#..#....##......#......##... .#.....#.#......#.......#......
###.........#.#..#.#.....#..... ..#.........#..#..#........##.#
...#........#..##...#.#.#..#.#. ..#.#....#.....#....##....#.#..
...###..#.###.#...#............ ...#.............##............
....................###........ ........#..#..#......#...#.....
...........#...........#....... .....#.#...#...##.....#.....#..
#..............#.#.........###. .#..#.#..........##...##.....#.
....................##.....#..# ......##.#..........#...#.....#
#.#.....#.......#...#.......... #.#.##......#....#..........#..
.#...#......#....##...#...#.... ................#.......#.##...
.....#.##..................###. #.......#.....#.......#....#...
.........#.#..#.#......#....... #..#.....#.##..##...........#..
.......#.....##..#.##.#........ .....#....#.#.##..........#..##
..#..........#.###.....#....#.. #.......#.....#.##...........#.
......#.............#.#........ ........#.##........###..#.#...
........##....#........#....... ........#..................#...
...#.............#....#.#...... #.........................#...#
#........#..####.....#.....#.#. ....#.........#...#.#..#.....#.
.##......##...#........#..#.#.. .#............#....#...........
....##....#...#...#..##...#.#.. ..#.#...#..##...#.#.......#....
#.##...###..#....##.#.......... .#.#....#...........#.........#
....#.#...#.#...#..##.###...#.. ...#.#..........#.....#...#....
#.....##..#..#....#.#.....##... ......#....#.#...............##
.#..#..........##.#.....##..... ....##......###...##.##.....##.
.#..#........#.#.#.#........... ............#.#....#.#.....#..#
.#..#.....#...........#...#.... .....#..#.....#.#...###....#...
...#......##..........##..#.... .......##....##..#...##..#...##
...#..#....#.##...#..#.....###. .....#.......##..#...#...#....#
#.#....#.....##................ #.........##....#........###.#.
#..#......#.#.#.......#........ ...#..##...#...#.........#.#.#.
......#....#.#....#..##....#..# ....#.#.....#.....#............
.#.....#.#....###.##.........#. #........#....#..#........#....
.###..#.....#........#.#....... .......#....#...#..............
.#...#......#..#.#......#.....# #...#.........##.....###.#.....
#...............####...#.....#. .#....##..#...#..##.........#..
.......#..........##.#........# ....#.....#......##..#..#....#.
#........##....##.....###..##.. #.#..#.........#........#......
#..#.....#..##.....#....#..#... ..#.......#.........#.....###..
#.....#.......##......#.#.....# ..#..........#...........#....#
#.##..#......##..#............. ..#...............#......#..#..
##...#.....#........##......... ....#..#...#....###.....#..#..#
....#..##....#...#.......#.#... #...#...#..#...........#....#..
....#...#...##..#....#..#...#.. .#....#.#..#....#.#...........#
..............#.#...#....###... .....#.....#..#....#..#....#...
...#....#..##...##..#....##.... #.#..#...........#.#...........
#.##.#..#..#......#.#.#.#...#.. ..................#.#.......#..
.......#..#..##........#......# ...#.........#.....#..##....#..
##.#....#....##.#......##.#.... .........#.#...#.........##....
.#...#..............#........#. ...#..#....#.....#...#..#......
.#.#....#.........#............ .#.##.....#....#....#......##..
.#..#..###.............#....#.. ##..#.........#.#....#...#.....
#......#...#.#..##..#...#....#. #......#.#...#....#.#..#.......
.......................#...#.#. .......#.....#.....###....#.#..
.............#..#...##......... .#....##.#.....#...#.......#...
..#.#..#....#....#........#.... .#.......#..#...#......#..#..##
#......#.##..#...#.#........... ...............#...#...........
.....#....#...........##.#..#.. #..............#....#.#.#....#.
..#.#.....#..............#.#... ...........#..#.......#.##..#..
#.......#.....#................ ..#......#.#....#...#.#.....#..
#..............#...#....#...#.. #..............................
...#...##..#..#............#... #..#....#..........#...#.......
......###.....................# ......#.............#####......
.........#.......##..#....#.... .#...###......#.#.#.##..#......
........#...#.##..#.##......#.. ............#.##.....#.........
....###..#.#...#...#..#.#...### .........#....##....#..........
##...#...##.#...#.#...#.#....#. ###....#......#.......#........
.........#...#.....###......... .#.......##..........#..#....#.
...#........##..#.......##..... #..#.....................#....#
.#.......##.........#.....##..# ........#...........#..........
.#..................#...#...... ..#..........#...#..#.........#
.##..#..#.#.....#.###.......... ..#..#......##................#
...#.....##..#.........#...#... .....##..#...#..#..............
.#......#.#.......#.#.......... .......#...##..#...............
.........#.#...#..........#.#.. .......##..#.####....#....#.#..
#..........#.##..#.##....#..... #.#..#..........#........##....
.#.#....#.....#..##.....#...#.. ....##....#.#..#....#.#...#....
..#........##...##..#..#....#.. ......#.......#...#.....#...#..
#...........##....#..###....#.. ..#..#...#.....#.......###.....
...........##.........####...#. ...#.......#.#.#.......#.##....
..#........###...#.#.........#. ...............#..#.#........#.
.#...............#.##.#.#...#.. .#....###.#......#.............
.#.##..#.....#.#.....##..#..... .#..#...#....#.#..#.....#......
...#...#..#.##.##...#.......##. .......#.##....#.#.##.##...#.#.
..#...#...#......##.##.##...#.. ..#...#....#.#..##.#.....#...##
##....#...#...#...............# ..#...#......#...#......#...#..
...##...........#......#..#.#.. ....#..#...#.#..#......#.......
#.........#......#.#.##.....#.. #..#...............#......#.##.
........#..#.........##........ .#....#...#..........#.#.....#.
..#.#....###.....##..#...#..... .#..#.#.#................#..#..
.........#...#.......#.....##.. .#....#.#...#..##.###..#...###.
##.....................#...##.. #.............#.....#.........#
.#.#..#......#................. ...#.........#...#.......#..#..
.....###..#......#..###..#..... ......#..#.........#..........#
...#.....##.........#......#..# ........##................#..#.
......##.....#...#........#.#.. ......#...#.#.....#......##....
..#.#...#......#...#.##.##..... ...............#...#....#......
...#..........#...#.......#..## ...#.#..#..#.....##.###..##..#.
.###........#........##........ .#....##......#...#..##..#.....
..#.#.#..........#.#...##...... .....#.........##.##....#...#..
.........#........#......###..# .....#.#..................####.
....##..#.........#...........# #.....#...#.............##....#
..####..#............##.......# #.#..........#...#..#..#.......
.....##.#..##.........#...#.#.. #..#.#.........#...............
...#.........#.....#.....#..... ....#...#.........#...##.......
.......#...#..#...##.........#. ...........#.....#..##..#......
...#...#..#...#....#..#........ #.....#.......#.#........#.....
#............##.##...#......... ..##..#.....#...##......#......
.#.#.....#.......####.....#.... ....#....#.....................
..............#......#.#....... ............#......#.........##
..............#...........#...# .....##.............#.....##..#
#...#........###....#.#....#.#. .......#.............#..#.#.##.
##.#..#..#......#......#.#.#... .###...#......#..#........##.#.
.#..#.....#..#.#..#.#.......##. ..#.#...#.#....#.....#..#......
......##.#...#...#......#...#.. ..#.#..#.##........#...#.......
#...........##....#.#.......... ........#.#...............#..#.
....#.......###.#...#.......... ........##.......#...#.......#.
.......................#.....#. ...#........##.#..........#.#.#
........#...#..#...#.#.#.#.#... ..#..###.#.#.......#.#......#..
.#.#...........#......##...#... ....#..........#...#..#........
.........................#..... ...#..#...#...#.#....#...#..#..
.................#.##.#...##... ...#...#........#......##...#.#
...#...##.....#.....##....#.#.. #...........#..........#..#.##.
...#...#...................#... ...#..##..................#.#..
...#..#..#...#...#....#........ ...##.#...#....#.#...#.####....
#....#...#.....#............... .....#...#.#.#..#..............
.......#...........#...#....... .....#..#.#.#..#...............
....#....#.....##.......#...... ..#..#..##...#.#..#.....##....#
.......#..........##........... .......#.#..#.....#....#.......
.#.#........#..##....#......#.. ...#..#....#.........#...#.....
.....#.......#.#.........#...#. ..............#.#...#...##.....
.#..####.#.#...............#..# ...................#...........
.....###..#..#..........#.#..## .#......#.#...................#
..#.......#...#.....##..#..#.#. .##.....#........#.........#..#
#....#......#.................. .##..##...#...................#
........#.##.#....#...........# ...#....#.#..#.#.#..#.....##...
....#.#....##..#.#.....##...... .......#..#....#......####.#...
...#..#.......#....#.....#.#.#. .##..#..##....#.......#........
#...#......#.....#.#..........# .#...#...........##............
....#....#...............#..... .....#.....#........#..........
..###......................###. ....##..#....#.....#...........
.##....#..#.......###.....#..#. .#...#....................#....
..###............#........#.##. ....#.........#.......##.....#.
.#........#......#.....#..#.... .#....#..#.....#.##....#.......
....#..##...#...#.###.......#.# ....#..#.........#.#....#.#....
.......#.##...........#.#..#... .......#.........##....#.......
.....#...##.................... ..#......#....#....#...#.......
....#....#...##......#......... ........#..#.......#.##......#.
..#............##....###.#...#. ..#.....#......#...#..#.......#
.#........#...............#.... #..#.....##...#...#............
#..#.#.##.........#..##....##.. .......##.......#........#...#.
#.#....#..#.##....##...#.#..... ..#......................#...#.
.....#.....##....#.#........#.. ....##.#.............#......#..
#..#...#...#....#....#......... #.#............................
...#........#..#.#.....##...... ...##.#.....#.#............#.##
..#...#...#................##.. ......#...#..#.........##......
#........#.#.##.......#.#...#.. .#.......#.....##.......#.#....
#......#..####.##.....#.#..#.#. ...........#.#.........#..##...
............#..#.#....#......## ...#..........#.##....#........
..#.....##....#...#.#.......... ........#..#..#...#....#....#..
...#...#.........#...#.#....... ........##....#.#....#........#
.###..#.......##.##.....#.#.#.. ..#........##....###....#......
...#....#...............##.#... #................###...#...#...
....##..#..#..#.#......##.....# ................#.#..###......#
#.#..............##...##...#### ..#.....##.#................#..
.....#.##...#.#...............# .....#...............#..#......
.##.....#.........#.......#.#.# ..#.......####.....#..#.#....##
#.#..#.....#.......#.......#..# ..#.....#..#....#..............
...#.#.....#.....#......#...... #.#...........#.#.....#..##....
.......#....#..#.#..........#.. #.#..........#.......#...#.###.
......#......#.##...#.......... ........#....#...#..#.#........
.....#.......###...#...#.#..... .#.....#......#..#..#..###..#..
#..#.#.........#.....#.##....#. .#.........#.##.#.#......##....
..#.#.........#..#..#..#.....#. ..#.........#...##..#........#.
.#..##..#..#....#......#.##..#. .#...................#.........
...##......###.....#.##.##..... ...#.#........#................
.#.....#...#..#...#............ ............#.....#..##........
##..##..#.##....#..#........... ..#.....#.#......#.......#...#.
...#..##..#..#.............#.## ........#....##..##...#.....##.
...............##............#. .#........#.#....#.#....#.#..#.
..#.....##........##.#...#....# #.#.......#....................
.#.#...#.#.#..#.#.....#....#... .#..#...##.........#..#........
.#....#...............#..#..... .........#...............#.....
....#.##..#....#......#...###.. ...#...#.....#......#.......#..
#................###...#.#..... ###......................#.#..#
...#...#......##..#.#....#..... ...#.....####........#..#.....#
.#....#....#.#...##............ #.#...#.#...................##.
....#...##..#..#........#.##... .........#.....................
..##.....#..#..##.............. #..........##..#.....#....#....
..#..##..#.#..##....#....#....# .......#...#.#.##.#..##........
...##.............#............ ..........#..#.#..#.#.......#.#
#....#....#.#........#.....##.# .....................#.#...#...
.....#..#.#.....####...###..... ...........#.#........#.#.#....
................#......#....... .......#......#........#...#.#.
.....#.#.#.#.#....#..#........# .........#....................#
.##.#...#.#.......##....#....#. .##.##....#...#.#.#.#..........
.....#........#................ #....##..#.##....#....#.......#
..#.....#..#...#..#...........# .##.#...#...............#....#.
.#.....#...##.....##..#.#....## .......#...#.###....#..........
......#.......#..#......##.#... .....#....#...#..#.............
#.#..........#.##.#........#... #.........#.##....#.#.#........
...#..#.............#.......... ..#...#.............##..#..#...
#..#..#..........#..##.#....... #..##.......#..........#...#.#.
.#..#...............####..#.... .#..#.....#...........#......#.
.......#.....#......#.....#.#.. ......#......#..............##.
.#...............#...#......... .#...#..#...#..####.....#.....#
.#..#..........#..#.#..##..#..# ....##.......#..........##.....
......##..#.....#..#......###.. .#.....#.......#.....#.#...#...
..........#...#..#.......#..... ..#..#..#.#...#......#.........
.#.#.#..#.....#.##.#...#..#.... ......#.#....#........#.......#
........#.......#.....#.#...... ........#.......#..............
......#.....##.....#....##.#... ..#...#.#....#........#.......#
...............#......#.......# ............#....#...##.#......
..#.#...#.....#.#...##......#.. .........#.............#..#....
#.#.........#.#...#........#### #.............#.#..##.......#..
#..........##..#..#........##.. #....#...........###....#......
.............#..#.......##.#..# ...#.....................#.....
..#........#.#....#........#.#. ....#.#..........#...#.......#.
.#......####..#..#............. ......#..#.......#...#...#....#
............###.......#.#..#... .#.#..#.....##.#........#......
#.##......##...#...#.........#. ...........#...#.#.............
....##.#.#.#......#....#..#...# ...###............#...#..#.....
.#..#.#....#...#.........#..... ..#.#.......#...#.#..#.........
#...#.....##............#...#.. .#......##...........#.....#.##
#.#...#..#.................#... .....##.....#....##...##.#.#...
............#.#..#.....#.#.#..# ..........#.#.#......#........#
...................#....#.##... ..#.#........#....##....#.#....
.....#...#.#....#....#.#......# .#....#...##...........#....#..
.......##.#.#......##.......... ##......#...#.......#..........
.#..#...##.#...#..#......#..... .##...###..#...#......#..##.#.#
......#.#..#..###..##..##...... ...........##.#..##...#.......#
.#.#.#.#.....#...###.....#..#.. ..#..............##............
.#....#.....#.......#.......#.. ........#..#........#...#..#.#.
..........##.........####...... ..#.............#......#...##..
.#.#.............#..#.#...#.... #...##....#...#....#....#.#....
........#........##...#.#....#. .#.#......#..##............#.#.
........#...................... .....###.#....##....#....#.....
..#.#....#...............#...## #.#.#..........#...#...#.#.#...
.......#.#...#..#.....##......# .....#.#...........####........
.#...#....#..........##........ .....#....##...#.##..#......#..
.#.........#.#............##... #....#.......#.##.......#..#...
.....#......##...#.......#..#.. .....#.....#........#..........
#.#..#.............#...#...#... .......#.......#...#.##......#.
......#.......#............#... ...#.........##...#.#.#......##
...........##....#......##..... #........#........#...#..#.....
.#.#..#.....................#.. .#......#.#......#.#...#....#..
##..##.....###..##.#........... #..#....##.....##..............
...##......##....#...##.....#.. ...#.##............#..........#
#...#.##.............#......... .....#.#....#..#.#............#
......#..#.........###.#......# ..#......#...###.##.......###..
#.#.....#.....................# ........#....#.#.#.#...........
....#####.....##........#.#..#. ............#..#........#.....#
...........##..##.###.......... ....#...............#..........
..........##.....#........#...# ......#....#....###..#.......##
.......#..#......#.....##..##.# #...#...##....#.........#...#..
.....##.#........#.........#... ...........#.#.............#...
......##......................# ...#..#.....#..##.#....#......#
.#.......#.#.#............#..#. ..#...#..#...#......#..........
.....##.#.......#.#........#... ....#..#....#.......#........#.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -4,6 +4,7 @@ with open("input.txt", "r") as f:
boardingPasses = f.read().split("\n") boardingPasses = f.read().split("\n")
def decodePass(encoded): def decodePass(encoded):
if len(encoded) == 0: return 0
row = 0 row = 0
row += 64*(encoded[0] == "B") row += 64*(encoded[0] == "B")
row += 32*(encoded[1] == "B") row += 32*(encoded[1] == "B")

View File

@ -4,6 +4,7 @@ with open("input.txt", "r") as f:
boardingPasses = f.read().split("\n") boardingPasses = f.read().split("\n")
def decodePass(encoded): def decodePass(encoded):
if len(encoded) == 0: return 0
row = 0 row = 0
row += 64*(encoded[0] == "B") row += 64*(encoded[0] == "B")
row += 32*(encoded[1] == "B") row += 32*(encoded[1] == "B")

File diff suppressed because it is too large Load Diff

View File

@ -7,6 +7,17 @@ possibleAnswers = "qwertyuiopasdfghjklzxcvbnm"
totalGroupYesCount = 0 totalGroupYesCount = 0
for answerGroup in answerGroups: for answerGroup in answerGroups:
for possibleAnswer in possibleAnswers: if answerGroup[-1] == "":
totalGroupYesCount += all(answer.find(possibleAnswer) > -1 for answer in answerGroup) 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) print(totalGroupYesCount)

15
6/test.txt Normal file
View File

@ -0,0 +1,15 @@
abc
a
b
c
ab
ac
a
a
a
a
b

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@ with open("input.txt", "r") as f:
rawRules = f.read() rawRules = f.read()
rules = {} rules = {}
for rawRule in rawRules.split("\n"): for rawRule in rawRules.splitlines():
bags = re.findall(r"(\d+)? ?(\w+ \w+) bag", rawRule) bags = re.findall(r"(\d+)? ?(\w+ \w+) bag", rawRule)
targetColor = bags[0][1] targetColor = bags[0][1]

View File

@ -5,7 +5,7 @@ with open("input.txt", "r") as f:
rawRules = f.read() rawRules = f.read()
rules = {} rules = {}
for rawRule in rawRules.split("\n"): for rawRule in rawRules.splitlines():
bags = re.findall(r"(\d+)? ?(\w+ \w+) bag", rawRule) bags = re.findall(r"(\d+)? ?(\w+ \w+) bag", rawRule)
targetColor = bags[0][1] targetColor = bags[0][1]

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@ import re
lines = [] lines = []
with open("input.txt", "r") as f: with open("input.txt", "r") as f:
lines = f.read().split("\n") lines = f.read().splitlines()
def simulate(): def simulate():
acc = 0 acc = 0

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@ from itertools import combinations
numbers = [] numbers = []
with open("input.txt") as f: 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)): for i in range(25, len(numbers)):
possible = False possible = False

View File

@ -1,13 +1,15 @@
from itertools import combinations from itertools import combinations
preamble_size = 25
numbers = [] numbers = []
with open("input.txt") as f: 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(): def getInvalidNumber():
for i in range(25, len(numbers)): for i in range(preamble_size, len(numbers)):
possible = False 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]: if sum(numberPair) == numbers[i]:
possible = True possible = True
break break
@ -18,8 +20,9 @@ invalidNumber = getInvalidNumber()
found = False found = False
for setSize in range(2, len(numbers)): for setSize in range(2, len(numbers)):
for setStart in range(0, len(numbers)-setSize, 1): for setStart in range(0, len(numbers)-setSize, 1):
if sum(numbers[setStart:setStart+setSize]) == invalidNumber: contiguos_set = numbers[setStart:setStart+setSize]
print(numbers[setStart] + numbers[setStart+setSize-1]) if sum(contiguos_set) == invalidNumber:
print(min(contiguos_set) + max(contiguos_set))
found = True found = True
break break
if found: break if found: break

20
9/test.txt Normal file
View 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