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
1123
1490
1478
1108
1120
1594
1101
1831
1146
1084
1535
1016
1722
1388
1188
1351
1477
1215
1678
1159
1558
1581
1400
1550
1306
1852
1745
1224
1896
1596
1005
1499
1797
976
1777
1129
1601
1058
1510
1704
1818
1795
1364
1276
1362
1801
1985
1421
1311
1855
1977
1613
1951
2001
1327
1872
1517
1040
1692
1595
1769
1956
1763
1470
1898
1366
1443
312
1685
1014
1409
1717
1105
1290
1703
1732
1939
1790
1164
1225
1474
1713
1413
1906
1488
1931
1702
1848
1668
1737
1614
1719
1647
1171
1508
1035
1133
1179
1180
1472
1414
1659
1820
1544
1697
1175
1033
1805
1576
1196
1597
1739
1291
1103
1457
1514
1462
1619
1683
1338
1604
1372
1653
16
1725
1181
1952
1201
1531
1505
1912
1527
1853
1905
1833
1913
1131
1069
1537
1757
1890
1750
1440
1822
1957
2005
1979
1405
2003
1997
1741
1494
1780
1774
1813
447
1429
1990
1767
1969
1787
1944
1863
1778
2004
1991
1754
1551
1435
1914
1093
1273
1726
1094
1439
1689
1607
1646
1588
1698
1539
1493
1352
1163
1482
1044
1748
1756
1977
611
1934
1818
1924
528
1753
1867
1865
1799
1743
1955
1993
1972
1987
1960
1817
1837
1900
1839
1946
1786
1857
1840
1985
1850
1801
1926
1523
1142
1253
1250
1886
1492
1737
1909
1766
1986
1049
1330
1219
1162
1088
1100
1532
1727
1761
1107
1916
1220
1319
1098
1431
1260
1642
1269
1102
1432
1267
1824
1658
1149
1024
1963
1498
1904
1812
1600
1773
1283
1463
1749
1781
1760
1849
1833
1854
1814
1820
2000
1834
1851
1779
1825
1885
1882
1912
962
1988
302
1965
1751
1764
1844
1949
1984
1933
958
1746
1999
1914
1989
1879
1954
1827
1816
1918
633
1797
1811
1936
1961
1937
1829
1788
1772
1505
1905
1304
1404
1868
1978
1872
2006
1256
1883
1966
1931
1796
1793
714
1904
1841
1824
1962
1739
1897
1906
1735
1876
873
1959
1963
1917
1804
1789
1782
1848
1828
1826
1929
1525
1862
1952
1878
1775
1776
1406
1430
1943
1938
1941
1594
1928
1856
1903
1871
1836
1847
1956
1915
1870
1875
1892
276
1896
1945
1821
1947
1898
1802
1853
1895
1790
1819
1980
1832
1673
1964
1800
1971
1842
2002
1921
1940
1845
1527
1428
1932
1893
1908
1889
1974
1981
1791
1975

View File

@ -1,100 +1,98 @@
30
73
84
136
132
117
65
161
49
68
139
46
21
127
109
153
163
160
18
22
131
146
62
113
172
150
171
118
14
98
93
130
170
59
1
110
154
71
127
38
50
36
132
66
121
65
26
119
46
2
55
37
44
148
102
140
95
133
15
40
28
35
43
32
137
45
155
156
97
145
44
153
96
104
58
149
75
72
57
76
56
169
143
11
138
37
9
82
62
17
88
33
5
141
83
15
105
142
36
116
11
45
82
10
17
159
140
12
108
29
72
121
52
91
166
88
97
118
99
124
149
16
9
143
104
57
79
123
58
96
24
162
134
114
23
92
69
147
156
25
133
34
8
85
76
111
81
21
103
122
126
18
8
43
108
120
16
146
110
144
124
67
79
59
89
87
131
80
139
31
115
107
53
68
130
101
22
125
83
92
30
39
102
47
109
152
1
29
86

View File

@ -1,7 +1,7 @@
adapters = []
with open("input.txt") as f:
adapters = list(int(num) for num in f.read().split("\n"))
adapters = list(int(num) for num in f.read().splitlines())
adapters.append(0)
adapters.sort()
@ -15,4 +15,4 @@ for i in range(0, len(adapters)-1):
numOf1Diff += 1
elif diff == 3:
numOf3Diff += 1
print(numOf1Diff * numOf3Diff)
print(numOf1Diff * numOf3Diff)

View File

@ -1,7 +1,7 @@
adapters = []
with open("input.txt") as f:
adapters = list(int(num) for num in f.read().split("\n"))
adapters = list(int(num) for num in f.read().splitlines())
adapters.append(0)
adapters.sort()
@ -10,17 +10,17 @@ adapters.append(adapters[-1]+3)
memo = {}
memo[adapters[-1]] = 1
def getNumOfCombinations(adapterList):
if memo.get(adapterList[0]):
return memo[adapterList[0]]
combinations = 1
for i in range(1, len(adapterList)):
diff = adapterList[i] - adapterList[0]
if 0 < diff <= 3:
combinations += getNumOfCombinations(adapterList[i:])
else:
break
combinations = combinations - 1
memo[adapterList[0]] = combinations
return combinations
if memo.get(adapterList[0]):
return memo[adapterList[0]]
combinations = 1
for i in range(1, len(adapterList)):
diff = adapterList[i] - adapterList[0]
if 0 < diff <= 3:
combinations += getNumOfCombinations(adapterList[i:])
else:
break
combinations = combinations - 1
memo[adapterList[0]] = combinations
return combinations
print(getNumOfCombinations(adapters))
print(getNumOfCombinations(adapters))

View File

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

View File

@ -1,7 +1,7 @@
initialState = []
with open("input.txt", "r") as f:
initialState = f.read().split("\n")
initialState = f.read().splitlines()
stateWidth = len(initialState[0])
stateHeight = len(initialState)
@ -59,4 +59,4 @@ while True:
if currentState == lastState:
break
print(getNumOfOccupiedSeats(currentState))
print(getNumOfOccupiedSeats(currentState))

View File

@ -1,7 +1,7 @@
initialState = []
with open("input.txt", "r") as f:
initialState = f.read().split("\n")
initialState = f.read().splitlines()
stateWidth = len(initialState[0])
stateHeight = len(initialState)
@ -69,4 +69,4 @@ while True:
if currentState == lastState:
break
print(getNumOfOccupiedSeats(currentState))
print(getNumOfOccupiedSeats(currentState))

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,2 @@
1000186
17,x,x,x,x,x,x,x,x,x,x,37,x,x,x,x,x,907,x,x,x,x,x,x,x,x,x,x,x,19,x,x,x,x,x,x,x,x,x,x,23,x,x,x,x,x,29,x,653,x,x,x,x,x,x,x,x,x,41,x,x,13
1000677
29,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,x,x,x,661,x,x,x,x,x,x,x,x,x,x,x,x,13,17,x,x,x,x,x,x,x,x,23,x,x,x,x,x,x,x,521,x,x,x,x,x,37,x,x,x,x,x,x,x,x,x,x,x,x,19

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
def getInstructions(filename):
with open(filename, "r") as f:
return list(line.split(" = ") for line in f.read().split("\n"))
return list(line.split(" = ") for line in f.read().splitlines())
def applyMask(value, mask):
return (value | int(mask.replace("X", "0"), 2)) & int(mask.replace("X", "1"), 2)
@ -19,4 +19,4 @@ for instruction in instructions:
memory[address] = applyMask(value, currentMask)
memorySum = sum(memory.values())
print(memorySum)
print(memorySum)

View File

@ -1,7 +1,7 @@
def getInstructions(filename):
with open(filename, "r") as f:
return list(line.split(" = ") for line in f.read().split("\n"))
return list(line.split(" = ") for line in f.read().splitlines())
def decToBin(decimal):
binary = bin(decimal)[2:]
@ -31,4 +31,4 @@ for instruction in instructions:
writeToMemory(memory, maskedAddress, value)
memorySum = sum(memory.values())
print(memorySum)
print(memorySum)

View File

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

View File

@ -18,4 +18,4 @@ while len(numbers) < 2020:
occurences[number].append(len(numbers))
numbers.append(number)
print(numbers[2019])
print(numbers[2019])

View File

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

View File

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

View File

@ -1,30 +1,31 @@
import re
def getInput(filename):
with open(filename, "r") as f:
fields, myTicket, nearbyTickets = f.read().split("\n\n")
myTicket = myTicket.replace("your ticket:\n", "")
nearbyTickets = nearbyTickets.replace("nearby tickets:\n", "")
with open(filename, "r") as f:
fields, myTicket, nearbyTickets = f.read().split("\n\n")
myTicket = myTicket.replace("your ticket:\n", "")
nearbyTickets = nearbyTickets.replace("nearby tickets:\n", "")
return (
{m[1]: m[2] for m in re.finditer(r"(.+): ([^\n]+)", fields)},
[int(n) for n in myTicket.split(",")],
[[int(n) for n in ticket.split(",") ] for ticket in nearbyTickets.split("\n")]
)
return (
{m[1]: m[2] for m in re.finditer(r"(.+): ([^\n]+)", fields)},
[int(n) for n in myTicket.split(",")],
[[int(n) for n in ticket.split(",") ] for ticket in nearbyTickets.splitlines()]
)
class FieldRule:
def __init__(self, raw: str):
self.raw = raw
match = re.match(r"(\d+)\-(\d+) or (\d+)\-(\d+)", raw)
self.range1 = [int(match[1]), int(match[2])]
self.range2 = [int(match[3]), int(match[4])]
def __init__(self, raw: str):
self.raw = raw
match = re.match(r"(\d+)\-(\d+) or (\d+)\-(\d+)", raw)
assert match
self.range1 = [int(match[1]), int(match[2])]
self.range2 = [int(match[3]), int(match[4])]
def __call__(self, num: int):
return (self.range1[0] <= num <= self.range1[1]) or \
(self.range2[0] <= num <= self.range2[1])
def __call__(self, num: int):
return (self.range1[0] <= num <= self.range1[1]) or \
(self.range2[0] <= num <= self.range2[1])
def __repr__(self):
return f'FieldRule("{self.raw}")'
def __repr__(self):
return f'FieldRule("{self.raw}")'
fields, myTicket, nearbyTickets = getInput("input.txt")
@ -33,8 +34,8 @@ for fieldName, fieldRule in fields.items():
invalidNumbers = []
for ticket in nearbyTickets:
for num in ticket:
if all(not rule(num) for rule in fields.values()):
invalidNumbers.append(num)
for num in ticket:
if all(not rule(num) for rule in fields.values()): # type: ignore
invalidNumbers.append(num)
print(sum(invalidNumbers))
print(sum(invalidNumbers))

View File

@ -9,50 +9,51 @@ def getInput(filename):
return (
{m[1]: m[2] for m in re.finditer(r"(.+): ([^\n]+)", fields)},
[int(n) for n in myTicket.split(",")],
[[int(n) for n in ticket.split(",") ] for ticket in nearbyTickets.split("\n")]
[[int(n) for n in ticket.split(",") ] for ticket in nearbyTickets.splitlines()]
)
class FieldRule:
def __init__(self, raw: str):
self.raw = raw
match = re.match(r"(\d+)\-(\d+) or (\d+)\-(\d+)", raw)
self.range1 = [int(match[1]), int(match[2])]
self.range2 = [int(match[3]), int(match[4])]
def __init__(self, raw: str):
self.raw = raw
match = re.match(r"(\d+)\-(\d+) or (\d+)\-(\d+)", raw)
assert match
self.range1 = [int(match[1]), int(match[2])]
self.range2 = [int(match[3]), int(match[4])]
def __call__(self, num: int):
return (self.range1[0] <= num <= self.range1[1]) or \
(self.range2[0] <= num <= self.range2[1])
def __call__(self, num: int):
return (self.range1[0] <= num <= self.range1[1]) or \
(self.range2[0] <= num <= self.range2[1])
def __repr__(self):
return f'FieldRule("{self.raw}")'
def __repr__(self):
return f'FieldRule("{self.raw}")'
def isFieldValid(tickets, fieldRule, pos):
for ticket in tickets:
if not fieldRule(ticket[pos]):
return False
return True
for ticket in tickets:
if not fieldRule(ticket[pos]):
return False
return True
# A backtracking algorithm to find the field order
def solveFieldOrder(tickets, fields: dict):
fieldOrder = {}
fieldOrder = {}
numOfFields = len(fields)
unassignedFields = fields.copy()
while len(fieldOrder) < numOfFields:
possibleFields = {}
numOfFields = len(fields)
unassignedFields = fields.copy()
while len(fieldOrder) < numOfFields:
possibleFields = {}
for fieldName, fieldRule in unassignedFields.items():
for i in range(numOfFields):
if i not in fieldOrder.values() and isFieldValid(tickets, fieldRule, i):
possibleFields[fieldName] = possibleFields.get(fieldName, [])
possibleFields[fieldName].append(i)
for fieldName, fieldRule in unassignedFields.items():
for i in range(numOfFields):
if i not in fieldOrder.values() and isFieldValid(tickets, fieldRule, i):
possibleFields[fieldName] = possibleFields.get(fieldName, [])
possibleFields[fieldName].append(i)
for fieldName, orders in possibleFields.items():
if len(orders) == 1:
fieldOrder[fieldName] = orders[0]
del unassignedFields[fieldName];
for fieldName, orders in possibleFields.items():
if len(orders) == 1:
fieldOrder[fieldName] = orders[0]
del unassignedFields[fieldName];
return fieldOrder
return fieldOrder
fields, myTicket, nearbyTickets = getInput("input.txt")
@ -63,20 +64,20 @@ for fieldName, fieldRule in fields.items():
# Filter out the invalid tickets
validNearbyTickets = []
for ticket in nearbyTickets:
isTicketValid = True
for num in ticket:
if all(not rule(num) for rule in fields.values()):
isTicketValid = False
break
if isTicketValid:
validNearbyTickets.append(ticket)
isTicketValid = True
for num in ticket:
if all(not rule(num) for rule in fields.values()): # type: ignore
isTicketValid = False
break
if isTicketValid:
validNearbyTickets.append(ticket)
# Find combination of fields that is valid
fieldOrder = solveFieldOrder(validNearbyTickets, fields)
solution = 1
for fieldName, order in fieldOrder.items():
if fieldName.startswith("departure"):
solution *= myTicket[order]
if fieldName.startswith("departure"):
solution *= myTicket[order]
print(solution)
print(solution)

View File

@ -9,4 +9,4 @@ nearby tickets:
7,3,47
40,4,50
55,2,20
38,6,12
38,6,12

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,19 +4,20 @@ with open("input.txt", "r") as f:
boardingPasses = f.read().split("\n")
def decodePass(encoded):
row = 0
row += 64*(encoded[0] == "B")
row += 32*(encoded[1] == "B")
row += 16*(encoded[2] == "B")
row += 8 *(encoded[3] == "B")
row += 4 *(encoded[4] == "B")
row += 2 *(encoded[5] == "B")
row += 1 *(encoded[6] == "B")
column = 0
column += 4*(encoded[7] == "R")
column += 2*(encoded[8] == "R")
column += 1*(encoded[9] == "R")
return row * 8 + column
if len(encoded) == 0: return 0
row = 0
row += 64*(encoded[0] == "B")
row += 32*(encoded[1] == "B")
row += 16*(encoded[2] == "B")
row += 8 *(encoded[3] == "B")
row += 4 *(encoded[4] == "B")
row += 2 *(encoded[5] == "B")
row += 1 *(encoded[6] == "B")
column = 0
column += 4*(encoded[7] == "R")
column += 2*(encoded[8] == "R")
column += 1*(encoded[9] == "R")
return row * 8 + column
maxBoardingPass = max(decodePass(boardingPass) for boardingPass in boardingPasses)
print(maxBoardingPass)
print(maxBoardingPass)

View File

@ -4,19 +4,20 @@ with open("input.txt", "r") as f:
boardingPasses = f.read().split("\n")
def decodePass(encoded):
row = 0
row += 64*(encoded[0] == "B")
row += 32*(encoded[1] == "B")
row += 16*(encoded[2] == "B")
row += 8 *(encoded[3] == "B")
row += 4 *(encoded[4] == "B")
row += 2 *(encoded[5] == "B")
row += 1 *(encoded[6] == "B")
column = 0
column += 4*(encoded[7] == "R")
column += 2*(encoded[8] == "R")
column += 1*(encoded[9] == "R")
return row * 8 + column
if len(encoded) == 0: return 0
row = 0
row += 64*(encoded[0] == "B")
row += 32*(encoded[1] == "B")
row += 16*(encoded[2] == "B")
row += 8 *(encoded[3] == "B")
row += 4 *(encoded[4] == "B")
row += 2 *(encoded[5] == "B")
row += 1 *(encoded[6] == "B")
column = 0
column += 4*(encoded[7] == "R")
column += 2*(encoded[8] == "R")
column += 1*(encoded[9] == "R")
return row * 8 + column
allIDs = list(decodePass(boardingPass) for boardingPass in boardingPasses)

File diff suppressed because it is too large Load Diff

View File

@ -7,6 +7,17 @@ possibleAnswers = "qwertyuiopasdfghjklzxcvbnm"
totalGroupYesCount = 0
for answerGroup in answerGroups:
for possibleAnswer in possibleAnswers:
totalGroupYesCount += all(answer.find(possibleAnswer) > -1 for answer in answerGroup)
print(totalGroupYesCount)
if answerGroup[-1] == "":
answerGroup.pop()
answersCounter = {}
for answers in answerGroup:
for letter in answers:
if letter not in answersCounter:
answersCounter[letter] = 0
answersCounter[letter] += 1
for count in answersCounter.values():
if count == len(answerGroup):
totalGroupYesCount += 1
print(totalGroupYesCount)

15
6/test.txt Normal file
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,10 +5,10 @@ with open("input.txt", "r") as f:
rawRules = f.read()
rules = {}
for rawRule in rawRules.split("\n"):
for rawRule in rawRules.splitlines():
bags = re.findall(r"(\d+)? ?(\w+ \w+) bag", rawRule)
targetColor = bags[0][1]
rules[targetColor] = {}
if (bags[1][1] != "no other"):
for bag in bags[1:]:
@ -29,4 +29,4 @@ def doesContainShinyGold(color):
for color in rules.keys():
doesContainShinyGold(color)
print(sum(shinyGoldMemo.values()))
print(sum(shinyGoldMemo.values()))

View File

@ -5,10 +5,10 @@ with open("input.txt", "r") as f:
rawRules = f.read()
rules = {}
for rawRule in rawRules.split("\n"):
for rawRule in rawRules.splitlines():
bags = re.findall(r"(\d+)? ?(\w+ \w+) bag", rawRule)
targetColor = bags[0][1]
rules[targetColor] = {}
if (bags[1][1] != "no other"):
for bag in bags[1:]:
@ -22,4 +22,4 @@ def getTotalBagCount(color):
countMemo[color] += (getTotalBagCount(bag[0]) + 1) * bag[1]
return countMemo[color]
print(getTotalBagCount("shiny gold"))
print(getTotalBagCount("shiny gold"))

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@ import re
lines = []
with open("input.txt", "r") as f:
lines = f.read().split("\n")
lines = f.read().splitlines()
def simulate():
acc = 0
@ -40,4 +40,4 @@ for i in range(0, len(lines)):
if status == "exited":
print(acc)
break
break

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@ from itertools import combinations
numbers = []
with open("input.txt") as f:
numbers = list(int(num) for num in f.read().split("\n"))
numbers = list(int(num) for num in f.read().splitlines())
for i in range(25, len(numbers)):
possible = False

View File

@ -1,13 +1,15 @@
from itertools import combinations
preamble_size = 25
numbers = []
with open("input.txt") as f:
numbers = list(int(num) for num in f.read().split("\n"))
numbers = list(int(num) for num in f.read().splitlines())
def getInvalidNumber():
for i in range(25, len(numbers)):
for i in range(preamble_size, len(numbers)):
possible = False
for numberPair in combinations(numbers[i-25:i], 2):
for numberPair in combinations(numbers[i-preamble_size:i], 2):
if sum(numberPair) == numbers[i]:
possible = True
break
@ -17,9 +19,10 @@ def getInvalidNumber():
invalidNumber = getInvalidNumber()
found = False
for setSize in range(2, len(numbers)):
for setStart in range(0, len(numbers)-setSize, 1):
if sum(numbers[setStart:setStart+setSize]) == invalidNumber:
print(numbers[setStart] + numbers[setStart+setSize-1])
found = True
break
if found: break
for setStart in range(0, len(numbers)-setSize, 1):
contiguos_set = numbers[setStart:setStart+setSize]
if sum(contiguos_set) == invalidNumber:
print(min(contiguos_set) + max(contiguos_set))
found = True
break
if found: break

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