diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..a6218fe --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/python/day11.py b/python/day11.py new file mode 100644 index 0000000..240ee57 --- /dev/null +++ b/python/day11.py @@ -0,0 +1,15 @@ +path = 'res/01/input' + +space = [] + +with open(path, 'r') as file: + for line in file: + space.append([1 if c is '#' else 0 for c in line]) + if '#' not in line: + space.append([0 for _ in line]) + +ind = set() +for i in range(len(space[0])): + if '#' not in [space[i][j] for j in range(len(space))]: + ind.add(i) + diff --git a/res/11/example b/res/11/example new file mode 100644 index 0000000..986aad4 --- /dev/null +++ b/res/11/example @@ -0,0 +1,10 @@ +...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#..... diff --git a/res/11/input b/res/11/input new file mode 100644 index 0000000..2f7ce04 --- /dev/null +++ b/res/11/input @@ -0,0 +1,140 @@ +................................................#.........#............................................#.................................... +..#.............#......#.............................................#...........................................................#.......... +..............................................................#..............................#.............................................. +.................................................................................................................#.......................... +...........#...........................#...............................................#..................................#.............#... +............................#..................#.....#..........................#........................................................... +..................................#................................#........................................................................ +...........................................................................#................................................................ +.....#...................................#......................................................#.......................#...........#.....#. +.....................#........#....................#....................................................#................................... +......................................................................#..................................................................... +...........................................................#.................................#.............................................. +........#..................#....................#....................................................#...................................... +#.............#....................................................#..............#.............................#........................... +...................#.............#...................................................................................#...............#...... +.............................................................................#.............................................................# +.........................................................................................................#.................................. +....#...........................................................................................#...........................#.....#......... +.....................#.......................#.........#.................................................................................... +#............#.........................................................................#....................#............................... +................................#..................#...........#......#............................#...................#.......#............ +.......................................................................................................................................#.... +...................................................................................#........................................................ +.........................#.............#...................................................................................#................ +............................................................................................................................................ +..........#..............................................................#......#.........#..........#...................................... +............................................................................................................................................ +.................................................................................................#............................#............. +................#...............................#............#.....................#........................................................ +.#........................#..........................#......................................................#.......................#....... +.......#....................................#................................#.............................................................. +.................................#.....................................#..................................................................#. +........................................................#.............................#...............................#........#............ +.....................#...................#.....#...............#............................................................................ +.............#...................................................................................................#.......................... +................................................................................................#.....#...............................#..... +.................#................#................#........................................................................................ +.#..........................#.............................#.......#.......#................................................................# +.............................................#.............................................................#................................ +...........#.................................................................................#...............................#.............. +.....................#.................................#.......#..................................................................#.....#... +.......#..............................#..............................................................#...................................... +#...............................#.....................................#...............#........................#.......#.................... +...........................................................................#.....#.........................................................# +...........................................................................................#................................................ +........................................................#................................................#.......................#.......... +.........#............#............................................#.................................................#.....#................ +............................................................................................................................................ +......................................#......#........................................................#.........#........................... +.............#.....#......#..........................#...................................................................................... +......#................................................................................................................................#.... +.............................................................................................................#.............................. +..#.......#.............................#.....................#..................#........#................................................. +............................................................................................................................................ +......................................................................................#...............................#..................... +..................#...........................#...........................#.........................#.........................#............. +............................................................................................................................................ +......................................#..................................................#.........................................#........ +.......................#.....#................................................................#.............#............#.................. +.....#.............................................#.............#.......................................................................... +.............#...........................................................#.......#..................................#...........#........... +.................................#.......................................................................................................... +.............................................#...........#.................................................................................. +.......#......................................................#............................#.........#........#............................. +.....................#................................................#...........................................................#......... +...............#...................#...............#.......................................................................#................ +#..........................#......................................................................#......................................... +.............................................................................#.............................................................. +...............................#......#.................#..............................................#..........#......................... +...........................................................................................................................................# +.................#......#.......................#....................................#.....#..............................#................. +.........#.............................................................#..................................#................................. +....................................................#............#............#.........................................................#... +..#.........................................................#........................................................#..........#........... +............................................................................................................................................ +............................................................................................................................................ +.......#...........................#..............................................................#......................................... +....................#...................................#................................................................#.................. +..............................#............................................................................................................. +..#......................#.............................................#........#..........#................................................ +..........#.............................#......................#................................................................#........... +.....................................................................................................#...................................... +......................#.............................................................................................#......................# +#................#..................................#........................................#.................#............................ +...................................#......#.......................#...........#..........................................#.............#.... +............................................................................................................................................ +..........#..............................................#.................................................................................. +............................................................................................................................................ +....................#......#..........#.......................#......#....................#..........#.......#..................#........... +...#.........................................................................#.............................................................. +..................................................................................#..............#.......................................... +........#.......................#..........#................................................................................................ +..............#...........................................................................................#................................. +................................................................#.......................................................................#... +.......................#................#.....................................................................#............................. +....#............#............#.................................................................#.....#..................................... +...................................................................................................................#........................ +...........................................#..............................................................................#................. +.......#.........................................#.......#.......#.....#...............................................................#.... +................................................................................#...........#.....................................#......... +...........#.....................................................................................#.......................................... +..............................................................#............................................................................. +...............#.........#..........#........................................................................#.............................. +...........................................#......................................................................#......#.................. +....#...............#....................................................................................................................... +......................................................................................#..............................................#...... +...............................................#...............#..............#.................#........................................... +.#.........................................................................................#.........................#...................... +................#......#................#................................#..........................#...........#........................... +......#......................#.....................#.......#................................................................................ +.............................................#...........................................................#...............#.....#........#... +...........#.........................................................................#...................................................... +............................................................................#............................................................... +.........................................................................................#............................#..................... +...................#...................#.....................#....................................#.............#........................... +.................................#.......................................................................................................... +.......#......#...........#..................................................................................................#.....#........ +.......................................................................#..............#........#.............#.............................. +......................#..................#......#..............#..............#.....................................#..................#.... +..........................................................................................#.............#................................... +.........#..........................................#..............#.......................................................#................ +.............................#.............................................................................................................. +.............................................#...................................#.......................................................... +................#..................#........................................#......................................#........................ +....#.................#.................#.............................................#.................................#..................# +............................................................#.........#..................................#.................................. +......................................................#...................................#................................................. +.................................#..................................................................#....................................... +.................................................#...................................................................................#...... +............................................................................................................................................ +..................#.............................................#.............#.........................#................#.................. +.........#.................................................#...........#.............#........#..............#............................#. +...................................#.........................................................................................#.............. +............................................................................................................................................ +#.....................#...................................................#.......#...............................#......................... +..............................#.................#........#..........................................................................#....... +..............#........................................................................#.................................................... +...........................................#.............................................................#..............................#... +.................................#...................................................................................#...........#.......... +...........#.......#.......#...........................#.....#................#......................#........#............................. diff --git a/res/12/example b/res/12/example new file mode 100644 index 0000000..e925935 --- /dev/null +++ b/res/12/example @@ -0,0 +1,6 @@ +???.### 1,1,3 +.??..??...?##. 1,1,3 +?#?#?#?#?#?#?#? 1,3,1,6 +????.#...#... 4,1,1 +????.######..#####. 1,6,5 +?###???????? 3,2,1 diff --git a/res/12/input b/res/12/input new file mode 100644 index 0000000..826f19c --- /dev/null +++ b/res/12/input @@ -0,0 +1,1000 @@ +?.???#????? 1,3,1 +..???#??????#?????? 3,6 +???#??.????. 4,1,1,2 +??#?????????#?##?? 4,4,2,4 +??..???.????#??? 2,1,6 +?#???#.????.??. 2,1,1,2,2 +#??.???### 1,1,5 +?????#?###?#???.???# 3,9,1,1,1 +###????.??#####.??? 6,5 +.?##???.#? 3,2 +?.?#??#??..# 3,1,1 +?.?????.?????? 1,3,1,3 +.#.?#?.???. 1,3,2 +??#?#????#..???????? 5,1,4,2 +??.?#??##?? 1,1,2 +?????.????##?#? 1,1,7 +?#?#??..#?. 5,2 +???.#???.????#???? 1,1,1,1,6,1 +?.??##?#????? 6,3 +??..??#?#????????.# 1,1,1,1,4,1 +??????##???????? 2,4,6 +?##..?##?##??.?#.? 2,8,1,1 +???#??.?###.?????. 3,3,2 +..#?...?#?? 2,4 +#?.?#.?.???#?#? 2,1,1,1,4 +???##?.??#?.?? 6,1,2,1 +.#????.??? 1,2 +?.?..##??#?#?#??.. 1,1,2,4,1,1 +?#??#?#??#?#?.??#?? 11,4 +??#?##??##???? 1,8 +???#??.#?? 2,1,2 +??#???#??.#.?#??#??? 3,2,1,8 +????#???.???# 1,1,2,2 +??#?.????? 4,2 +???????..?##???.? 4,6 +???.??????.??? 1,1,6,2 +???.#???????.#??? 1,1,2,1,3 +?.#????????? 1,1,1,1 +?#???????????.??#.?. 5,1,1,1,1,1 +????##?##?#???#?#??. 1,10,2,1,1 +???#?.?.?? 5,1,1 +.????#??#.#??# 1,4,4 +?????..??##.?..?? 1,4 +#?#???#?##??.??????? 1,10,1,1 +??.????#????#????? 1,1,12 +#?.#.???###???#??? 1,1,1,6,1,2 +?.???.?????????#.?? 1,4 +?##?###?????##.#??#? 7,3,1,2 +???#?????? 3,1 +.?#????#?#?.#???#?? 7,1,2,2 +.?#??.??.####.#? 1,2,4,1 +?.?.?????##.?.?.#.? 1,1,4,1,1,1 +.????.??#??????## 1,3,5 +?.###???????? 1,3,2 +????????????. 7,2 +???.?###.##???#?.?? 3,4,6,2 +??#?#?###??????.?? 7,3 +#.??#????? 1,1,3 +.??#?#?.??.?#? 3,2,1,3 +?.?#????.?. 2,1 +???.?#??#????? 2,6,1 +#??????##????? 1,1,8 +???.##..??#?#?#.??? 1,2,1,1,3,1 +???.?????#??????? 2,6,2,3 +????#???#??#??.??#?? 2,9,3 +??????????.?#? 3,1,3,3 +??#?#????#? 1,1,4 +#??##???#???? 10,1 +#?.??????#???.# 2,7,1,1 +??#?.???#??????. 1,8 +.?##?????#?? 3,3 +?....??????.#.?. 1,5,1,1 +.???#.????? 2,1,2 +??#??????#?#????##? 1,16 +##?.#?????#???.#??? 3,2,3,2,2,1 +???##???##????.???? 10,3 +??.???.???#?.?? 2,2,3 +.??#????..???# 5,1,4 +?#?.?#?#??#?#???? 1,12 +.?#??.??#?? 2,3 +?#?#???#????? 4,4,2 +.???#..????#? 1,5 +?##?#??????..???? 8,1,1 +#?##??.?#.#???##???? 6,1,1,6 +#??.????#?? 1,1,6 +#???#????.??????#??? 1,3,1,1,7,1 +?.?#?#?.?#????. 4,1,2 +##??.#?????.# 2,1,2,1 +?.????????##??# 6,4,1 +?..#....?# 1,1,1 +?##??.??#??#? 4,2,3 +??#??????????? 3,4,3 +.#???.???????? 3,5,1 +???.?.????????.? 1,5 +????##????? 3,2,2 +???##?##???#??????# 10,2,1,2 +?#?.???????#? 3,1,1,1 +???#????#??# 1,2,4 +?.??#..??? 1,3,2 +?.??#???.??? 3,1 +??????#??## 1,6 +.?#?.#???? 2,1,1 +?????????##.? 1,7 +?..?.?.?#??? 1,4 +.?#??#????????#.#? 3,1,2,1,1,1 +?.???.?#??.. 1,2 +?#?#????.##?##???# 4,2,5,1,1 +?#.#??#?#?#?? 1,8 +##?.????##? 3,6 +?????????? 1,2,1 +??.#??.#??. 1,1,1 +?#??#.??#???.?#. 5,3,1,1 +??##?#?????. 5,2 +?.??#?????? 3,2 +#????????? 1,7 +??.#?..???#? 1,5 +##???##?#?? 2,4,2 +?#?.??#??.?.? 2,3,1 +???##???.??# 1,5,1,1 +?#??.?.?#.????# 1,1,1,3,1 +?.?.#.?????????#.# 1,1,1,6,1,1 +??#?????#???##??#?## 5,12 +?#???#?????. 7,2 +???.?#???? 1,2 +???.??????.?#??#?? 2,1,1,2,1,1 +???#?.#?##? 2,1,5 +?#??.??.?? 3,2,1 +??#.???#.???. 1,2,1,2 +??.??????????##..??? 4,7,2 +???#??.##?????.. 1,1,7 +???#????#..#?.??? 6,1,2,1 +????????#? 1,4,1 +###?????.####.?? 5,4 +?#?##??#.??. 7,1 +?#????????????#?? 2,6,1,1,1 +.?#?????#??? 2,5 +??#????#####?#.# 4,6,1,1 +?????#???#??? 2,6,1 +.?..????.#?? 1,1,1,3 +..?????#?#?###?. 1,10 +?.##??#??.??.???#? 2,2,1,4 +???????.#????#?#?.# 1,1,1,8,1 +???#?.??.??? 5,1,1,1 +??.?#???#?????.? 1,2,5,1,1 +.??.???#?##? 1,1,1,2 +.?#.?#?????# 1,1,3,1 +#?##?????###???????. 1,2,1,7,1,1 +.##???#.??#??.? 3,2,1,3,1 +??###.??.?????? 5,1,1,2,1 +?.??####??????.#???? 7,2,5 +?????#?.?? 3,2,1 +???????.??#?? 1,2 +.?.???#?#??.? 1,1,5,1 +????.??.##???. 2,2 +??.#????##???? 1,1,1,6 +?.???##????.??. 1,1,5,2 +????.??????##?#??? 2,11 +??????#?####???# 12,1 +?#???.???# 3,1,3 +?????????#?#? 1,2,6 +???.??#.?. 2,3 +..#..?#?.??.# 1,3,1,1 +?#?#???#.#?#.?? 3,3,1,1,1 +?#?##?????? 6,3 +.?#???#.?.?##?#????? 2,1,1,9 +??.??#???## 1,3,4 +.#?.?????..?#??? 2,4,5 +?#????#.??? 3,1,1 +??.#???#?###????## 1,1,13 +???.###???#???.#. 2,7,1,1 +.????.?.?????? 3,1,3 +#???????????..#.. 4,1,1,1,1 +?.?.##??.??.????. 1,1,3,2,4 +???????.????? 4,1,1,1 +??#??#.????.?? 6,3,1 +???#?????##????##?? 1,3,1,10 +?#???#????.?##?. 1,1,2,2 +??????#?.???#.? 1,3,1,2 +##???????? 5,3 +?#?###?.?.???????# 6,1,1,1,1 +???????.#?? 1,1,2 +.????.??#?.?#.??.. 2,2,1 +??????..?.?.??.. 4,1,1 +#???#??#??????##? 2,1,10 +??????..#.???. 1,1,1,3 +??????????#????# 6,3,1,1 +??.?????.? 2,2,1 +?.?????#???.??# 3,5,2 +#?#.???#??..?#? 1,1,1,3,3 +??.??..??#.???##???? 1,2,1,1,6,2 +?.??##?##?.?.??#??? 8,4 +#????##????????#?# 1,1,2,4,4 +#?#.???#?.?????? 3,2,1,6 +#??????????..#??? 2,5,3 +????.??.??.#.#?#?? 3,1,2,1,1,3 +???#?##??? 6,2 +????????.#?? 1,1,1,2 +##?.#????#?#?. 2,1,2,1 +??#??????#??#?. 1,1,1,2,5 +????..???? 1,1,3 +.?..?#.?????.?? 1,1 +.?##??.#..?????#? 2,1,6 +??.?#..???? 1,1,2 +#??#??#???????????? 4,1,2,2,2 +..???.??????#?? 1,3,4 +?.#??.??????#? 1,6 +#??????#???##???? 1,2,4,4,1 +??.??????? 1,1,3 +.???#???##????#? 1,6,4 +??#???.????#. 3,1,4 +#?.??????? 1,1,1 +??##???????????????# 1,4,1,1,6,1 +#?????##????????? 1,1,5,2 +##?????#?##?#?.? 2,10 +##???#.?#.?##?. 3,1,1,3 +??#?.????? 3,1 +.?#.???.?#?#???#??? 2,1,1,6,4 +#???#?#??????. 1,3,1,2 +.??????.?.??. 1,3,1,1 +.??##????.? 5,1 +..??.???##??????..? 1,5,1 +.#..???????? 1,3,1 +??.???.???###.??.? 2,6 +?##????#?#..?#? 3,3,1,3 +??#.??#.???#? 2,3,5 +?#???#?????##????#.? 5,1,5,1 +??.???###?????????? 8,3 +?##?#?#?...#????#??? 7,1,5 +???#???#??#.????? 1,6,2,4 +?.?#???##.? 4,2 +.?.????####. 1,5 +?.#??.?#?. 3,1 +..?#??.??.?#?#???? 3,6 +?.??????#? 1,7 +?.????.??.?####???? 1,2,1,1,6,1 +?#..#????????? 1,1,3,1 +?#????##.???#???? 3,3,4 +.???.?#?..# 1,2,1 +.##?#?###??.??? 9,3 +#?.????#??###??##? 1,5,5,2 +?????????#. 6,1 +#?????.#?. 5,2 +??????????? 2,3 +.??#.???....#.? 3,1,1,1,1 +??.??#??????.???? 1,4,1,3 +.?#.#?#???##???#. 1,1,1,1,6 +?#..?.?.??? 2,1 +?????.?#?. 1,1,2 +??#?#??????#???? 8,2 +???..???##?????.? 2,6,1,1 +?.????..??#?.? 1,3 +???.??.?#?#.? 1,1,3,1 +?#???###?##?? 1,7 +??.####?????#.... 6,1 +???#?.#?.?? 2,1,1 +?.???#??#?#.????? 1,4,1,1,3 +?.??.????????. 1,4,1 +.?#????#???.? 4,2,1 +#?#.??.?.?###?????.? 1,1,1,1,3,3 +?#??.??##??#?##?#? 4,8,2 +.?????.#?? 1,1 +??..#?.??????#? 2,1,7 +??##????##?.?? 1,9 +?#????#?#?.?.?? 4,1,2,1,1 +?#???#??.????#? 1,4,1,2 +??.????#?. 2,2,2 +??????#.???##??? 4,1,1,3,1 +?##??##?.???.##?. 2,3,1,2 +.????????#?. 5,1 +.??.????????#? 1,2,5 +??.??##?#?.????????? 1,1,2,1,8 +#?###?????# 5,1,2 +#?.???#..? 1,3 +.??????.#?.#.? 4,1,1 +?.??.???#??#? 2,1,2,1 +????..???##?????? 1,5 +??#??????.????#.. 7,5 +?###???#?.?.???## 7,4 +??.?.?????.?? 1,3 +???#??????????? 1,1,2,1,1 +.??#.????? 2,4 +.???????.?#? 3,1,1 +#.?.#??#???? 1,2,1,2 +???#??##??????#??.?? 11,1,2,1 +#???????.?#?..?#? 3,1,1,3,1 +?#?#.?.????.??? 1,1,1,1,1 +???.#????????? 1,9 +???##??????.?#???# 9,1,1,1,1 +?..?????????.?...? 1,2 +????.#?#?#? 2,1,5 +???#????.?#???.??? 1,2,1,3,1,2 +???.##??????.?#? 1,5,1,1 +..????????#? 3,3 +?.?#??#.??????.#? 1,4,1,1,2 +?.???.??.? 1,1,1 +??????##?#?#?.????# 8,4,2,1 +??#?#?????#. 7,2 +.??#???.?.#??????##? 2,1,9 +.?##??#????.? 2,5 +.?.?##?.#.?.##.?#? 1,2,1,1,2,2 +?????#???#?. 1,6 +.#???????#????#?##?# 2,11,2,1 +???#???????.#??.?? 1,5,2,2,1 +????????.????##???#? 2,2,8 +??????###?#?????#??# 8,1,6,1 +???#?.??###.?? 1,1,4,1 +??.???#???##??.#?#?# 1,10,1,1,1 +??#?#?????#?????? 3,3,1,1,4 +..?????#?.#. 3,1,1 +??????????.??#????# 3,4,2,3 +?..?#?.??.#???#?#?. 1,3,1,3,1,2 +.???#???#?? 2,3 +?.?#?..?#?? 1,1,2 +???????#?? 1,1,3 +???.??...? 3,1 +??##.??.?????#.????? 2,6 +??#???#?#???.? 1,8 +?##??????? 6,2 +????????????#?#?? 5,4,1 +#.????#?.?. 1,1,2 +???#??.?#. 1,3,2 +#?.???#?????.# 1,1,7,1 +?###..??.??? 4,1,2 +#??????..#?? 3,1,1 +???#???#?#?#???.?? 1,13 +???????#??????## 5,1,6 +.??.???.???###. 2,1,5 +#.#???#??#?#?????# 1,1,8,1,2 +?..????##?.#? 1,1,4,1 +????###?????#??? 1,10,1 +????##?????? 2,2,4 +.?????????##?? 1,9 +.?.?##.?#?#? 3,3 +..??##?##?#?#??? 4,7 +????##????#??????? 4,4 +#??#??#??? 4,4 +??.??????#??##?. 1,1,6 +?.??#?????.#??#? 1,3,1,1,1 +.??#????#????## 8,1,2 +.?##..???..? 2,1 +??.??????? 1,2,1 +?.?#?????#?#?.#..?.? 1,11,1,1,1 +??????.?.??? 4,2 +..????????? 3,4 +???#?#?#?.?#.?? 9,2,1 +??##?##??#? 6,1 +?.?.?#???#. 1,1,5 +???#????#???##???.. 9,4 +?##???#??? 3,1 +.?#?.?.#??? 1,3 +????????????#?. 6,1,2 +.##?#??#?#?# 9,1 +?#?#.?..?. 3,1 +#????#.?.??? 2,1,2 +??..#????..??##? 2,5,3 +??##?#??.??#???##?.? 6,1,5 +??????..?? 2,1 +#??#?.????#?.#?.? 1,1,5,1,1 +???##???.#?#?? 5,3 +??#?#??.????? 4,1,1 +.#??#?#??#.?.?##?? 6,1,1,4 +.?..????.??#? 2,3 +#???#??###.#? 5,3,1 +?#?#??###?????#? 10,2 +??.?#??#.?..????.??? 1,5,1 +#??#.#??#?????.?#?? 2,1,4,3,2,1 +???##??...????????#? 1,5,1,2,5 +?#?????????????.???# 4,4,1,3 +.#?????##?????# 8,1,3 +.??##??????##?? 4,3,2 +?????#.?#?.?????.# 1,1,1,2,2,1 +???????.?#? 1,1,2 +??#.???#????# 3,1,1,3 +#?????#??? 1,3,3 +??.??#?##.#??? 6,3 +?????.?????. 1,2,2,1 +?????.????#?????? 1,1,4,1 +??##?????.?????##?? 1,5,1,2,5 +.?????#?#?#.?.#.# 8,1,1,1,1 +???#?#?????##???.?? 16,1 +????.#????.????#?? 1,3 +???#??.#??? 4,2 +??.#.?#?#?????# 1,1,5,1,2 +#?#???#.???????#???? 1,5,1,3,3 +.?#????#???????? 1,1,1,1,4 +???.???#??????## 1,1,9 +#??.?##?.???#? 1,3,5 +???.??.??..??? 3,1,1,2 +#????.#.#? 3,1,1 +?#?##?#??#?..?????## 9,2,1,2 +????.#??#???.????? 1,1,2,4,1,2 +#??..??.????? 3,1,1,1 +#???#??#????? 3,1,6 +??###??#??#?##???#. 3,2,8 +??#???.?#????? 3,5 +????##??.????#?#? 1,3,5,1 +#?.?....?#. 2,1,1 +?.##??##???#????#? 11,4 +?#?..#?.???#?#?##. 3,1,7 +?????.?.#.?.?. 5,1,1,1 +??#???.#??? 4,2 +?#..???#?#?##??#?. 1,10 +#?..??????? 2,5 +???##??????. 1,2,1,1 +#??.???????????#??? 1,1,1,7,2,1 +??.???##??#???? 1,1,3,3,1 +?####?#?#?????.???? 12,1,1 +???##?##?.#?.??#?# 1,6,2,5 +???#.?.### 2,3 +?#.#??.#?#??? 1,3,3 +???#.?##?.?.#????? 1,1,4,1,1,3 +?.#???#.?.#?.????? 1,5,1,1,4 +???#???#?????.???.? 3,2,2,1,1,1 +??#??.??####?.#?.?. 1,1,6,1,1 +?.????#????#?.??#?# 1,1,5,2,5 +?????.?????#?. 2,1,2 +?.?.?#?????.????.?.? 2,1 +?##???????#?????? 2,2,6 +????#?#???#??#? 11,2 +.?#?#...#?##????? 4,1,4 +?#?.?????###???.??? 3,10,1 +#?##????.#.????##?? 8,1,6 +???????????? 1,4,4 +.?..?.#?#??####??# 1,1,12 +??#??#????##??#.???? 3,10,2 +?????????#????#?.?? 1,4,4,1,1 +?#????????????. 1,1,6,1 +#?????##??? 8,1 +?..?.?#??#??#??. 1,1,9 +.?????#..?? 2,2,1 +?#???????????.? 7,2 +?.??.?#????#? 1,1,7 +?????##????. 2,4 +???????..#?.? 3,2 +?????#.????.?.? 6,2,1,1 +#.?.#??.??? 1,3 +???????????##?????. 1,1,8,1 +?????.#.??#?? 1,1,1,4 +????.#?????? 3,1,1,3 +????#????##???? 1,9,1 +?.???#?..#??????#? 4,4,2 +?#????.??#??#???.? 2,1,4,4,1 +.#??????#?#?##?? 2,11 +.?.???????#??? 1,1,2,2 +#?.??..??.?.#??? 2,2,2,2 +?..#?.??#???#.?##?? 1,5,4 +?#????#??#?????#???. 4,1,1,4,1 +??.??#???.?.???#.. 1,2,1,1,4 +.???????#?? 1,5 +???#?#?????? 2,4,1 +?.??#??#.??? 1,1,1,1 +?.?#...??#??#?. 2,1,5 +.??#??.???? 3,1 +#.??.???#?? 1,4 +?????.?#?#???? 1,5 +?#.?#???#.. 1,5 +#????????????.????? 1,1,1,4,2,2 +?#?.??##????????? 2,5,2,1 +???.?????.????? 3,1,5 +.?.?????#???.???? 1,9,2 +??????#??#??.#?? 1,8,2 +?#???#????. 1,2,2 +?#???#??.?#??#???? 6,2,3 +#??????#???.?.?? 3,4,1,1,1 +????.??.?.?????###?# 3,1,1,8 +#.?.?#?????.?????.. 1,2,1,2,1,3 +.?.?##???????? 7,1 +?#?????#???#?? 5,5 +#.???##??? 1,5 +??????.##? 1,1,3 +.?.????..? 1,1,1 +???#?????#?????.?.?? 1,7,1,1,1 +??????????#.??#?? 1,3,1,1,4 +.#????###? 1,7 +??.??#...?#.?? 2,2 +???????#?#?? 1,5 +??#?#?..?#???? 6,1,2 +?#?#????#????????? 2,3,2,2,1 +????.#??#? 1,2,4 +????#..??.?.?##.. 3,2,1,2 +.?#?.#?.?#????###?? 3,2,9 +.????#?#?#????????? 1,4,1,7 +?#?..#??#??. 1,6 +.?????.#????#?..#?? 1,1,1,1,3,3 +???.??.?#? 2,2,2 +???#?##??#?#.?..? 2,7,1,1,1 +##??#??#??????#? 9,1,1,1 +?#?#???#.???????. 4,1,4,1 +???##??#?#.?? 1,7 +??????#?????????? 2,1,1,2,2 +?#?##???#?? 1,2,4 +?.???##??????????? 1,14 +??.?#?????#? 1,3,2 +????#???#??.?.?????. 1,7,1,1,1 +??#??.##?##??????# 3,8,1,1 +???#??#?.???? 2,3,4 +?.??#?????? 1,4 +??#??#???#??##?? 3,3,1,2 +???????#??#?..#?#??? 12,1,2 +#?#???#????#??? 3,1,1,5 +.??..?##?#.??##....? 4,2 +##???#??.#????? 2,2,6 +?#?????.???..??????? 5,2,3,1 +???????#???#??.??.?. 2,11,1,1 +?.??#???#????.. 2,3,1,1 +..??..???#.???????? 2,1,5 +???????....? 3,1 +???#????#??#????#? 1,1,11 +??.????..?#? 1,1,2,1 +#?.?#?.???? 1,1,2 +?#????.??.#? 1,1,1,2 +???#?#???#?? 4,1,1 +???##?.?#..?.# 5,2,1,1 +???##.?#???##??#??? 5,10,1 +???#??##.??##.??? 5,2,1 +.?##?????..?##???.? 8,2 +#??#.?.??#.? 2,1,2,1 +.?#?#?.##.#? 4,2,1 +??##?.???#?#??#??#? 3,9 +.?.??###??#.#?.? 1,4,1,2,1 +??#?.?????#? 1,1,1,1 +.?#??#?##..?#??#.# 8,5,1 +?????#?#???.#.?.?? 1,2,6,1,1,1 +.???????#. 3,1 +#?#.?????????#?? 3,3,2,2 +.????..#?# 1,3 +?#????.#.?###??.??? 5,1,5,1,1 +????#..#?#??#.??..? 2,1,3,2,1,1 +????##??.#?# 3,3 +#???#?????????##?## 1,1,2,3,3,2 +#????????? 1,2,2 +..?#?????????. 8,2 +.##..???#???#?.# 2,1,1,4,1 +.???.??????.?#?.??? 3,3,3,1 +?.#??????#? 1,1,4 +?#??.????#?##?? 1,3,4 +.??????.??? 5,1 +??.??.#.??#? 1,1,3 +?#?????????..??????? 9,1 +.??#?#???????????# 5,1,1,2,2 +##???.??#??# 5,5 +???.?????# 2,2 +?#???????????#?? 5,4 +?#???#.???#.?###??#. 2,2,1,2,3,2 +#?.??????? 1,1,3 +#???#????.#?.#? 8,2,1 +?#.#.??????#??.???? 1,1,1,4,2,1 +.#?#??.?????????? 3,1,1,1,2 +??????#?????#???? 1,3,7 +????.??.?##.. 2,1,1,2 +..?#???.??.??.??#??? 4,5 +?###????##??#??#. 5,10 +?#?#????????.??? 10,1 +???#??#?.?#.??? 6,2,1 +???????##??#?????.# 1,1,6,1,1 +??????#.?? 1,1,1 +?##??##.?#???. 6,3 +.?#??#.??#?#??.? 1,1,4,1,1 +???????????????#.? 12,3 +.??#?###?.#????#?. 6,4,1 +#?????????? 4,1 +?????.????.??. 1,3,2 +??.????###?#.???. 2,7,1 +?.???????.???#??#? 1,6,1,1,3 +???..????##??#?.?? 1,10 +?????.????????? 2,7 +???.????????##???.? 2,11,1 +#?#...???????#??#??? 3,3,7 +?#.?#???#? 1,2,3 +??#?.?????#.??? 3,1,1 +???#??????? 1,3 +?????????#?#?.??.?. 11,1 +?#?????????.????.??? 11,4,2 +??????????????#.? 2,1,2,1,2 +?#.##?????#?#?# 1,4,2,1,1 +?.??.???????#???#.? 2,1,6,1 +??#????#?#.????. 3,3,1,1 +?.??.?.??#?.?.? 2,1 +??????#??? 1,2,4 +#..###???#. 1,7 +????..#.???.? 4,1,3,1 +??.???##?. 1,4 +???#.???#???.?????? 2,1,1,2,5 +?????#?##? 1,6 +##?##?#?##????????. 10,2,1 +.?..????#???? 1,1,5,1 +?#???#?.?????.#. 2,1,1,3,1 +#?????..?.#?? 5,1,1,1 +????????????? 1,3,2 +.?.???##??????? 1,10,1 +.?#?..???.###? 2,1,3 +?..??##?..? 1,4 +#?.???##?????.??.? 1,1,6,1,1 +###??#???.????# 3,1,1,1,1 +???.#???.#? 1,2,1 +???.?#?#??????. 5,1 +?????????#?#???? 3,5,1 +??????#????##?. 1,7 +??#????#????#??????? 2,15 +?????##??#?????#? 6,7 +??###?.??? 3,1 +??.##????#? 1,2,2 +??#??.?????? 2,2 +??#??????.???#####.? 3,1,7 +??#?.?..?.? 2,1 +?.??.#?#?#????.?? 1,2,6,1,2 +#?#.?..#.?????. 3,1,1,2,1 +??#???.???? 5,1 +##?????.?.??????.? 7,2,2,1 +.???#?#???? 1,8 +.?##?####.?.????? 8,4 +.?...##??#????????. 1,11 +??#..?#??? 1,1,1 +.?.??.???#?????#??#. 1,1,1,11 +?#???#???.#????? 2,5,1,1,1 +.?#?.?.?##??.? 3,3,1 +.??#?.???#??? 1,4 +?#????#???#?... 2,2,2 +.?.?#?????#???.. 1,3,1,1,1 +#???.?#??# 1,1,5 +?????????## 1,1,5 +????#??.####?? 1,4,4,1 +.??????#?#???????? 1,1,11 +?.?#.?#?.??????. 1,1,1,5 +???#?.?.????????#?? 2,1,1,1,2,5 +##????#????. 8,1 +#..###??#?#?# 1,10 +?##.??.#.???##.? 2,1,1,4 +#?##?#???? 7,1 +???#????#???## 5,1,4 +?.?#?.???#? 2,1,1 +..???????? 2,2 +???.??#???????? 1,3,6 +????.?#??#????##?#?. 1,1,2,1,2,4 +???????.?..??##???#? 1,2,1,4,1,1 +.?#????.???##????#?? 3,2,9 +?#??#.??#????????? 3,1,2,1,3 +???#??#..?? 4,1 +?.??#?..?. 3,1 +???????#?#?#?##?#? 3,4,1,5 +#?.??..????##?###? 2,1,1,8 +?..?####?#??#?.?? 1,10,1 +#?...???..? 2,2 +??????#?????? 1,1,7 +????????????#? 1,2,6 +.?.#??????#?#??? 1,2,2,7 +???##??#?#.????#???? 10,2,1,3 +.??#??#.???#? 6,5 +####????.#?#?.?.#?#? 4,1,3,1,2 +?.????.#?.?##?#? 1,3,1,5 +.??????????#.?#??. 2,2,2 +???##????#?..?. 5,2,1 +.????#.?#?#???? 1,3,7 +??.??????? 1,2,1 +#?##?????????##?? 4,1,1,1,4 +??#?#?.???? 1,3,1 +?..#???#?#??. 1,3,5 +?#????????#???? 2,11 +#?.#?.#?#?##..???#?? 1,2,6,5 +??#??????.??.??#. 1,1,5,1,3 +?.????????#? 1,1,1,1 +??##?.???#?. 4,4 +?#??????.?.?#?. 1,2,2,2 +??.#?#?????...#? 1,1,1,2,2 +...?????.?##??.? 2,3 +..??##????. 1,4,1 +????.?..???#??#?? 1,1,1,7 +.?.??????#. 2,4 +..???..#.? 1,1 +?.?????????#.?? 2,2 +??.#.?#?.?#?#?????? 1,1,2,6,1,1 +???#?????#??? 1,7 +?##?##.???#?????.?? 6,3,4,1 +??###..????#??#..?#? 4,4,2,2 +#..????#?#?#?####.? 1,1,1,1,8,1 +???#?#?###?#?.?##?.? 9,3 +.###?#?#???.??.??? 9,1 +??###???#??#? 7,4 +.#?.??#????? 2,1,1,3 +?#???#?#?.??##???#?. 8,1,3,3 +???????#?. 1,1,1 +##.?##?????????? 2,10 +#.#?.#????#? 1,1,1,1 +.#.?????????#? 1,2,2,1 +.#????.##? 1,2,2 +??????#???##? 1,3,3 +?#?#?.?#??.??? 4,3,1 +?.#??#?#?#???#?#??? 1,16 +?.#???#?#???.##????? 2,2,4,4,1 +????.??#???#??.???#? 1,2,1,1,1,4 +?##???????#???#??.? 3,1,2,4,1 +?#???.????#????.# 4,3,1,1 +???#????.???.?#??? 1,3,1,1,1,3 +???#??..#?.#??? 4,1,1,1 +.?#????.?.?## 1,1,3 +?.??##???#?.?#??.? 6,1 +?.###???#????#??? 1,4,4,2,1 +?.??##?.?#???##?. 1,2,1,5 +##??????#??#.???##?? 3,6,6 +#?.????##?#??#? 1,2,8 +???###.???#?#?#? 3,6 +#?.?.??#???#???# 2,1,5,1,2 +#?????#?????#??#? 1,1,11 +??????..?#? 2,1 +????.??????.??????? 1,1,1,2,4 +???????#???#?. 2,8 +??.????#?? 1,6 +?#.?????#.?#????.#?. 2,1,3,5,1 +?#?#??.?????#???? 4,7 +.??????.???????# 1,4 +#?#.???.?#? 3,1,2 +????#?..#? 1,2,2 +#????.#?#?.?????? 1,1,4,1,1 +?#????#?#??. 2,4 +?.#???????? 3,1,1 +??????#..???#??? 1,1,5 +????#??#???????? 6,2,1,1 +.#???#?#.##? 5,1,2 +????.??????.?.#??# 2,5,4 +??????#???#?.??#. 7,1,2,1,1 +????#???.#? 6,1 +?.??#?#????#??????? 5,5 +????#.##??.?? 2,1,2,1 +##??###?#???# 10,1 +?#????.???????##.# 3,1,1,1,5,1 +###??#?.??????? 7,3 +??#?##?..???? 4,1 +?????###???#?..? 9,2,1 +???#????#?. 6,2 +???##???#?.?###??. 3,2,6 +????#???#?##???? 2,8 +.??.????... 1,1 +??#..?????#.##?#??# 2,3,1,2,4 +.??????##?.? 2,2 +????#?.??.? 1,1,2 +???#??.???##? 4,1,1,2 +??.?##.#?.?#?? 2,3,1,4 +?????.?#??# 1,2,1 +???.??##??#? 2,2,1 +?.?#??##?##?#..?.?#? 5,4,2 +.#?#..?..?????.#? 3,1,4,1 +?#???#??????#?????#? 3,3,1,9 +#?#?#???????#?.#.?# 1,3,4,2,1,1 +???.????#??.? 2,5 +???##????#?.#. 3,3,1 +?????#?????. 1,2,2 +.???#???##?#?#?.?#.# 1,10,1,1 +?##?????###??.?..?. 4,6,1,1 +.??#?.???.? 1,2,1 +???##??????##??#?#? 4,2,2,4 +#????#?#?? 1,1,4 +????#?????? 4,4 +????#??..????#?..? 1,1,1,3,1,1 +?.??????.?#?# 1,1,1,4 +?#?????????##. 4,5 +?.###????#???? 6,1,1 +???????#?#???#?? 1,2,8,1 +???????#?#? 1,3 +?###?#??????#??????# 10,2,2,1 +?.????.??? 1,1,2 +.#?##????.?? 4,1 +??.??####??#.??# 9,2 +?.?.???.???#?# 1,1,4,1 +#?#?#?.#.?#??? 5,1,1,2 +??#?#?##???.#?#??#?? 1,9,1,1,1,1 +.???#??#??#??? 4,4,1 +???#?????.?.??????? 1,7,1,2,1,1 +?????###.#??#??.?.# 3,4,1,2,1,1 +?#??????#?????##??## 10,7 +??????????#???????? 7,4,2 +??#????#???? 7,1 +?.?#??.??? 1,2,2 +????..????????????? 2,3,4,2 +.??.???.??#? 1,1,1 +#????.??#?.???. 5,3,1,1 +???#?#??.?#???#?.#? 3,1,1,6,1 +.?????#????###?????? 12,2 +#?????#??????? 2,4,3 +?###??#???.#. 3,2,1 +??.????.??.?????##? 1,2,1,1,8 +?????.???? 1,2 +.?..?????. 1,1,1 +?.?####?#?#???????.? 1,9,1,1,2 +.????????????#??. 2,8 +?##???.???##??#? 5,7 +??????###.?#?? 1,1,4,4 +.?..?#???????? 2,2 +#??#?##??#?????#.??? 11,2,1,2 +.??#.????##.???? 2,1,2,1,1 +#???#???.??#.???? 3,1,1,3,4 +.??.???#?#?? 1,1,3 +.?#??????#?? 9,1 +??.?#?#???????##..? 1,13,1 +.??#??#?#?????##???? 1,14,1 +?#??#?#.????????? 6,2,2,1 +#?#??.???????#. 5,7 +????.#??#?? 1,5 +?#..#??????.?#? 2,6,2 +.?#...????##? 2,2,2 +.##.?#?.?.?#?.?# 2,2,1,3,1 +?????.??##?. 3,1,2 +?#???????#????????#? 2,1,2,1,5,1 +?##?.??????#? 3,1,1,2 +???.??#??.#?? 5,1 +.???#?#????###?#..? 4,7 +#????.???#?#?.?# 1,3,4,1,1 +?????#?#?.???.??.. 2,1,1,1,1,2 +.#???.?.??? 4,1 +.???#?#..? 1,3 +.?#?###???#??? 2,4,3 +?##???#??#? 2,6 +????.???##?.?? 1,1,4,1 +????#.???.??? 3,1,1 +?.??#???#??.?#. 5,1 +????.??????#???#??.. 3,7 +#.???#.????#.??? 1,2,1,3,1 +#?#?#????#???#?..?.? 14,1 +?#..??#???#? 1,2,2 +..#???.???#? 3,1,1 +?.???..???.??? 3,2,1 +#?#???????#??.??? 1,1,7,2 +??????.??.#???.??? 1,3,1,1,1,1 +?????#?#?#.????..#?? 8,2,3 +.????#.???##.? 5,3 +?#???.??.?# 3,1,2 +?.??#???.?.? 1,1,1,1 +??????...# 3,1,1 +.#??#??.?#???.??? 4,1,2,1,1 +???##?????????# 5,3,1 +?#????????#?? 5,1,1,1 +??..?#?..??.? 1,2,1,1 +.##??##?#???#?#?#? 2,5,3,1,2 +.??..#??.#?.??#???. 2,1,1,2,2,1 +??????##?????## 2,5,4 +??.??#??#????? 1,9 +???#??#??.?? 1,2,2,1 +#????.??????? 4,1,2,1 +???##.??#?#?#.#??# 5,7,1,1 +?????.?.??.?# 4,1,1,2 +#??#??##.#.? 1,6,1 +.?.??.?#?? 1,3 +?#?.??#.???.??#???#? 3,3,2,1,2,1 +??#?..??#??#???????? 2,9,1 +????#????. 1,4,1 +??#????.?????##?#?#? 2,2,1,5,1 +.???.???#? 3,1,2 +???????.??.? 2,1,1 +##?###???? 7,1 +?????????#?# 7,1,1 +.??#??##?#????#???? 2,12 +???????#?#? 1,5 +??.?#????? 1,1,1 +.?...#??#?#?? 1,2,1,1 +?????###?????#?#.? 12,1 +?#???##??## 1,8 +???#??.?.??.? 2,2 +.???.?.##??###?#???. 1,1,7,1,1 +?#??????#????.? 4,7 +????#?#????#??????? 9,1,6 +??#??..#?#? 1,3,4 +?.????##???#? 5,2 +???#????.??????# 1,1,1,1,5 +?#?#???###??#?..? 6,6 +..??????.. 1,1 +?.?#?.??#.?? 1,2,2,1 +????..?????# 1,1,2,1 +?.#??#??#.???#??# 7,1,1 +??.#??.??.???##?.??? 2,1,2,6,1,1 +??#?#..?.#??#?.?##?? 5,1,2,2,4 +.????..???? 2,2 +#???##.??.? 6,2 +.#???#??.#?#?#?## 7,8 +?.?..##??#? 1,5 +#????????.#??? 8,2 +.??.#??#???#?.?..?. 4,2 +?#???????#??#?.??# 1,1,7,1 +#???#??.??.???. 3,2,1,1 +.???#?????.. 2,1,1,1 +???????#??#?? 4,2,3 +??????.?.???..??.#? 1,1,1,3,2,1 +??.???#??..?? 1,5,1 +????#?????.????.? 7,2,1 +?.?#?#?.???#? 4,2 +.???#??#?? 1,1,3 +#????#???.?.??# 2,1,1,1,2 +#?#??.????? 5,1,1 +...#?????? 2,3 +..??..???? 1,3 +????##??????? 4,1 +?.#??.?#?.??# 3,1,1,1 +?#????#?.????? 7,1,1 +?.??#??.?.??. 3,1,1 +?#?#???.????. 4,4 +?.?...????.. 1,4 +????#?#???#?.?.# 9,1 +??.?????#?.?? 1,1,3,1 +?.#?.?.??. 1,1,1 +?.?#??#????#???.#?? 1,2,7,3 +?.??##?.?.#?.? 5,2 +??#.??#??#?.??? 2,6,1 +?.????#?#?#???? 1,4,6 +??#???..#???###????? 1,1,11 +?.???#.???.? 1,2,1,1 +?.???????.?.?###???? 1,1,1,1,3,3 +???##?#?.???.?????? 7,2,3 +????##????? 1,4 +.#?#??????#? 1,2,1,3 +??#?#?.????????. 2,1,8 +?.??#?.?#.??? 1,2,1,2 +???#??#?#.?????? 8,5 +??????#????#???? 1,13 +?.????.??.?#????#?? 1,2,1,1,5 +???.#?#?.. 1,4 +#??????#??? 3,6 +?.?###?#??..?#? 7,3 +??????#?.?.?????? 2,1,1,5 +?#???#.???###???? 3,1,1,5,2 +?????????#?#? 1,3,1,4 +?????.?????.?#??#? 3,2,4 +.#??????.#..??# 1,1,1,1,3 +.???#?###??????? 8,3 +??#????##?..?? 9,1 +.?#?#.??#?.? 2,1,3 +###???.???? 4,1,3 +?#.??#??## 2,2,3 +??..??.?#?#?##?. 1,8 +.??????????.? 3,5 +??.?#?#???... 1,6 +?????????.??????? 4,1,1,1,1 +???##?????.???? 7,4 +?##???#.?.??..?? 3,1,1,1,1 +??#??#?.???.#???# 1,1,1,1,5 +???#?##??.???. 7,2 +?????#???? 1,2,1 +#????????.??# 8,2 +??##??????#?#??? 5,5 +?.????????.???? 1,1,5,2,1 +?.??..????? 1,2 +??#??.?#?#?#????. 5,8 +????#?.???????#???#? 2,3,8,3 +..#???##.?????? 1,1,2,3 +#????#?##?#??????? 1,1,7,1,3 +#?.????????? 2,1,3 +????????.?#? 1,1,2,2 +.#?#??.?#???.##??? 5,5,2,1 +??????????#?? 9,1 +.?##?#????##? 6,3 +?.??##??#????##? 1,11 +???###????? 7,1 +#????##??##?.. 1,8 +?.??#??????????.? 5,3 +#???.???#?? 4,3 +.##??????#?.??. 4,1,1,2 +?#??????????. 1,2,3,1 +.???#?..#?.?????? 5,2 +.?#??????.?#??.?#? 1,1,1,2,1,2 +?#?##????#? 4,4 +???????#.?????#??#. 1,1,3,1,2,1 +??#?????????..???##. 4,1,2,5 +.???#.???.? 3,1,1 +?.?.?#?###??#??.# 1,1,6,3,1 +?#???#?#??..???####? 2,7,8 +.?.??????. 1,6 +#?#.?#??.??.????#? 1,1,2,1,6 +?.???????? 2,3 +..??????#??????? 8,1 +???#?????..???#?#?#. 7,8 +.#??????#?#??? 1,10 +???.??#.???. 3,1 +.??.??#?.?...? 2,3,1,1 +?.????????.###?.#? 1,1,1,1,4,2 +??#?????#? 1,1,5 +?..###?#???..???? 8,3 +???????????##.?. 1,2,7,1 +#?###.????? 5,2,1 +..?????..?????.? 3,1 +.?#??.?#.??????. 3,2,5 +?.?#.#??.? 2,3,1 +..?#????????????.? 3,2 +#????#??#???????? 9,4 +????????.#????#.?? 7,6,1 +??????#?.??##?? 2,3,3 +.????#.??? 1,1,1 +?????????????#???.?? 4,8,1 +.??#??????#? 3,4 +?.#???#.???? 1,5,3 +.?.?#??#???#???? 1,1,2,6 +.??.#??.?.?#??????? 2,1 +??..#.?..? 1,1,1 +.#???#?.#.???.???.? 5,1,2,3 +????#.????#???#..??? 2,1,3,5,1,1 +.???????????#??????. 7,4,2 +#??#??#.?.?.???? 7,1,1,1 +.?.????#?????#?????? 5,9 +????#????#???.?#??? 13,2,1 +???????#?##?..# 1,4,5,1 +??#???.???#?...## 3,1,3,2 +?????.??.???.? 2,1,1,1 +#??#??????? 7,1 +??.#???#?????? 1,2,8 diff --git a/src/days/d11.rs b/src/days/d11.rs new file mode 100644 index 0000000..af40ab3 --- /dev/null +++ b/src/days/d11.rs @@ -0,0 +1,68 @@ +use std::fs; + +pub fn solve() { + let path = "res/11/input"; + + let contents = fs::read_to_string(path).expect("I/O error, wrong path?"); + //let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?")); + + let mut galaxies: Vec<(usize, usize)> = Vec::new(); + for (i, line) in contents.lines().enumerate() { + for (j, c) in line.chars().enumerate() { + if c == '#' { + galaxies.push((i, j)) + } + } + } + + let mut result = 0; + for i in 0..galaxies.len() { + for j in i + 1..galaxies.len() { + let (x1, y1) = galaxies[i]; + let (x2, y2) = galaxies[j]; + result += x1.abs_diff(x2) + y1.abs_diff(y2); + } + } + + for (i, row) in contents.lines().enumerate() { + if !row.contains('#') { + let top = galaxies.iter().filter(|(x, _)| *x < i).count(); + let bot = galaxies.len() - top; + result += top * bot; + } + } + + let space: Vec> = contents + .lines() + .map(|l| l.chars().collect::>()) + .collect(); + for j in 0..space[0].len() { + let col: Vec = (0..space.len()).map(|i| space[i][j]).collect(); + if !col.contains(&'#') { + let left = galaxies.iter().filter(|(_, y)| *y < j).count(); + let right = galaxies.len() - left; + result += right * left; + } + } + + println!("Result 1: {result}"); + + for (i, row) in contents.lines().enumerate() { + if !row.contains('#') { + let top = galaxies.iter().filter(|(x, _)| *x < i).count(); + let bot = galaxies.len() - top; + result += top * bot * 999998; + } + } + + for j in 0..space[0].len() { + let col: Vec = (0..space.len()).map(|i| space[i][j]).collect(); + if !col.contains(&'#') { + let left = galaxies.iter().filter(|(_, y)| *y < j).count(); + let right = galaxies.len() - left; + result += right * left * 999998; + } + } + + println!("Result 2: {result}"); +} diff --git a/src/days/d12.rs b/src/days/d12.rs new file mode 100644 index 0000000..e7570fd --- /dev/null +++ b/src/days/d12.rs @@ -0,0 +1,122 @@ +use std::{collections::HashMap, fs}; + +use rayon::prelude::*; + +pub fn solve() { + let path = "res/12/input"; + + let contents = fs::read_to_string(path).expect("I/O error, wrong path?"); + //let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?")); + + let result: usize = contents + .par_lines() + .map(|line| { + let (springs_str, nums_str) = line.split_once(" ").unwrap(); + let nums: Vec = nums_str + .split(",") + .map(|n| n.parse::().unwrap()) + .collect(); + + let mut springs: Vec = springs_str.chars().collect(); + springs.push('.'); + + let mut cache = HashMap::new(); + + count_spring_arrangements(&mut cache, springs_str.as_bytes(), None, &nums) + }) + .sum(); + + println!("Result 1: {result}"); + + let result: usize = contents + .lines() + .map(|line| { + let (springs_str, nums_str) = line.split_once(" ").unwrap(); + let nums_tmp: Vec = nums_str + .split(",") + .map(|n| n.parse::().unwrap()) + .collect(); + + let nums: Vec = nums_tmp + .iter() + .cycle() + .take(nums_tmp.len() * 5) + .map(|i| *i) + .collect(); + let springs: String = std::iter::repeat(String::from(springs_str)) + .take(5) + .collect::>() + .join("?"); + + let mut cache = HashMap::new(); + + count_spring_arrangements(&mut cache, springs.as_bytes(), None, &nums) + }) + .sum(); + + println!("Result 2: {result}"); +} + +fn count_spring_arrangements( + cache: &mut HashMap<(usize, usize, usize), usize>, + springs: &[u8], + in_broken_group: Option, + remaining_broken: &[usize], +) -> usize { + if springs.is_empty() { + return match (in_broken_group, remaining_broken.len()) { + (None, 0) => 1, + (Some(x), 1) if x == remaining_broken[0] => 1, + _ => 0, + }; + } + + if in_broken_group.is_some() && remaining_broken.is_empty() { + return 0; + } + + let key = ( + springs.len(), + in_broken_group.unwrap_or(0), + remaining_broken.len(), + ); + if let Some(&result) = cache.get(&key) { + return result; + } + + let ways = match (springs[0], in_broken_group) { + (b'.', Some(x)) if x != remaining_broken[0] => 0, + (b'.', Some(_)) => { + count_spring_arrangements(cache, &springs[1..], None, &remaining_broken[1..]) + } + (b'.', None) => count_spring_arrangements(cache, &springs[1..], None, remaining_broken), + (b'#', Some(_)) => count_spring_arrangements( + cache, + &springs[1..], + in_broken_group.map(|x| x + 1), + remaining_broken, + ), + (b'#', None) => count_spring_arrangements(cache, &springs[1..], Some(1), remaining_broken), + (b'?', Some(x)) => { + let mut ans = count_spring_arrangements( + cache, + &springs[1..], + in_broken_group.map(|x| x + 1), + remaining_broken, + ); + if x == remaining_broken[0] { + ans += + count_spring_arrangements(cache, &springs[1..], None, &remaining_broken[1..]); + } + ans + } + (b'?', None) => { + count_spring_arrangements(cache, &springs[1..], Some(1), remaining_broken) + + count_spring_arrangements(cache, &springs[1..], None, remaining_broken) + } + _ => unreachable!(), + }; + + cache.insert(key, ways); + ways +} diff --git a/src/main.rs b/src/main.rs index 4b13c93..39693d8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,7 @@ pub mod days; fn main() { - days::d10::solve() + days::d12::solve() //_all_days() }