2023 day 21.
This commit is contained in:
		@@ -1,13 +1,92 @@
 | 
				
			|||||||
 | 
					import logging
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
from collections import defaultdict
 | 
					 | 
				
			||||||
from dataclasses import dataclass
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
lines = sys.stdin.read().splitlines()
 | 
					VERBOSE = os.getenv("AOC_VERBOSE") == "True"
 | 
				
			||||||
 | 
					logging.basicConfig(level=logging.INFO if VERBOSE else logging.WARNING)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def reachable(
 | 
				
			||||||
 | 
					    map: list[str], tiles: set[tuple[int, int]], steps: int
 | 
				
			||||||
 | 
					) -> set[tuple[int, int]]:
 | 
				
			||||||
 | 
					    n_rows, n_cols = len(map), len(map[0])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for _ in range(steps):
 | 
				
			||||||
 | 
					        tiles = {
 | 
				
			||||||
 | 
					            (i + di, j + dj)
 | 
				
			||||||
 | 
					            for i, j in tiles
 | 
				
			||||||
 | 
					            for di, dj in ((-1, 0), (+1, 0), (0, -1), (0, +1))
 | 
				
			||||||
 | 
					            if map[(i + di) % n_rows][(j + dj) % n_cols] != "#"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    return tiles
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					map = sys.stdin.read().splitlines()
 | 
				
			||||||
 | 
					start = next(
 | 
				
			||||||
 | 
					    (i, j) for i in range(len(map)) for j in range(len(map[i])) if map[i][j] == "S"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# part 1
 | 
					# part 1
 | 
				
			||||||
answer_1 = ...
 | 
					answer_1 = len(reachable(map, {start}, 6 if len(map) < 20 else 64))
 | 
				
			||||||
print(f"answer 1 is {answer_1}")
 | 
					print(f"answer 1 is {answer_1}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# part 2
 | 
					# part 2
 | 
				
			||||||
answer_2 = ...
 | 
					
 | 
				
			||||||
 | 
					# the initial map is a square and contains an empty rhombus whose diameter is the size
 | 
				
			||||||
 | 
					# of the map, and has only empty cells around the middle row and column
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# after ~n/2 steps, the first map is filled with a rhombus, after that we get a bigger
 | 
				
			||||||
 | 
					# rhombus every n steps
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# we are going to find the number of cells reached for the initial rhombus, n steps
 | 
				
			||||||
 | 
					# after and n * 2 steps after, and then interpolate the value to get a 2nd order
 | 
				
			||||||
 | 
					# polynomial
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					cycle = len(map)
 | 
				
			||||||
 | 
					rhombus = (len(map) - 3) // 2 + 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					values: list[int] = []
 | 
				
			||||||
 | 
					values.append(len(tiles := reachable(map, {start}, rhombus)))
 | 
				
			||||||
 | 
					values.append(len(tiles := reachable(map, tiles, cycle)))
 | 
				
			||||||
 | 
					values.append(len(tiles := reachable(map, tiles, cycle)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if logging.root.getEffectiveLevel() == logging.INFO:
 | 
				
			||||||
 | 
					    n_rows, n_cols = len(map), len(map[0])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    rows = [
 | 
				
			||||||
 | 
					        [
 | 
				
			||||||
 | 
					            map[i % n_rows][j % n_cols] if (i, j) not in tiles else "O"
 | 
				
			||||||
 | 
					            for j in range(-2 * cycle, 3 * cycle + 1)
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					        for i in range(-2 * cycle, 3 * cycle + 1)
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for i in range(len(rows)):
 | 
				
			||||||
 | 
					        for j in range(len(rows[i])):
 | 
				
			||||||
 | 
					            if (i // cycle) % 2 == (j // cycle) % 2:
 | 
				
			||||||
 | 
					                rows[i][j] = f"\033[91m{rows[i][j]}\033[0m"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    print("\n".join("".join(row) for row in rows))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					logging.info(f"values to fit: {values}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# the value we are interested in (26501365) can be written as R + K * C where R is the
 | 
				
			||||||
 | 
					# step at which we find the first rhombus, and K the repeat step, so instead of fitting
 | 
				
			||||||
 | 
					# for X values (R, R + K, R + 2 K), we are going to fit for (0, 1, 2), giving us much
 | 
				
			||||||
 | 
					# simpler equation for the a, b and c coefficient
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# we get:
 | 
				
			||||||
 | 
					#   - (a * 0² + b * 0 + c) = y1  =>  c = y1
 | 
				
			||||||
 | 
					#   - (a * 1² + b * 1 + c) = y2  =>  a + b = y2 - y1
 | 
				
			||||||
 | 
					#                                =>  b = y2 - y1 - a
 | 
				
			||||||
 | 
					#   - (a * 2² + b * 2 + c) = y3  =>  4a + 2b = y3 - y1
 | 
				
			||||||
 | 
					#                                =>  4a + 2(y2 - y1 - a) = y3 - y1
 | 
				
			||||||
 | 
					#                                =>  a = (y1 + y3) / 2 - y2
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					y1, y2, y3 = values
 | 
				
			||||||
 | 
					a, b, c = (y1 + y3) // 2 - y2, 2 * y2 - (3 * y1 + y3) // 2, y1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					n = (26501365 - rhombus) // cycle
 | 
				
			||||||
 | 
					answer_2 = a * n * n + b * n + c
 | 
				
			||||||
print(f"answer 2 is {answer_2}")
 | 
					print(f"answer 2 is {answer_2}")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,131 @@
 | 
				
			|||||||
 | 
					...................................................................................................................................
 | 
				
			||||||
 | 
					..#.......#.#.##...........#...#..................#......................#.......#.......#............#...............#.....#...#..
 | 
				
			||||||
 | 
					................#....#.#.....#.#..#.#..#.........#.....................#......................#......#....#..........#.............
 | 
				
			||||||
 | 
					..#.##.....................#......##..#...##.#............................#.....#..............#..................#..#......#......
 | 
				
			||||||
 | 
					.....#.#.....#...#........#............#.#.#..#.#...#.........................................##......#..........#.#..##...........
 | 
				
			||||||
 | 
					.....#....##.........#.......##............##....#.............................#.........#.....#....#.#....#...........#.##........
 | 
				
			||||||
 | 
					...........#..#...#...........#.....##................#.........#..#...................#.#..#.....#................................
 | 
				
			||||||
 | 
					..#.....#....#....#....#......#.#.............................................###.#.......#....#..........#.#....#.....#...........
 | 
				
			||||||
 | 
					....#........................#............#.......#...............#..#.......#..........#.........#....#......#..##.........#......
 | 
				
			||||||
 | 
					..........#...#..........#..#............##.........#...........#...............................#.........#........#........#......
 | 
				
			||||||
 | 
					....#............#.#...........#.............#..#..............................##.#....#...#.#.#.#.#........#......#..#............
 | 
				
			||||||
 | 
					....#..#...#.#....#.#.##..#...................##..#........#.##....................#............#......#........#...#..............
 | 
				
			||||||
 | 
					......#.....#...##...#...#......##.....#.....#.#...............#....................#.#......#.............#..........#.........#..
 | 
				
			||||||
 | 
					......#....#..#...........##...#.#.#.#.#......##...........#.......#.....##.............#.#..##...##....................#.......#..
 | 
				
			||||||
 | 
					......................................#.#......#.......#....#...#.#..#...#............#..#........####......#....##................
 | 
				
			||||||
 | 
					..#........#........#.............#....................#.......#....#.....#................#...................#..........#........
 | 
				
			||||||
 | 
					..................#.....#.#.#....#......#.....................#............#...............#..#......#...#..##......#............#.
 | 
				
			||||||
 | 
					...#........#....#......#............................#.......#....#........#.#............................#..#....#......##........
 | 
				
			||||||
 | 
					..#..........#...#..................#......................#......#........#.............#....#..##.#......##......##.#............
 | 
				
			||||||
 | 
					...........#..........#......#..#...#.#...........#.......#.....#.....#..#...............#..............#...#.....#.##.......#.....
 | 
				
			||||||
 | 
					.#......#..#....#..................................................#..#......#.........................#.......#.....#.....#.....#.
 | 
				
			||||||
 | 
					.....##..................#............................#...#........#..#....#.#..............#.....................##.......#..##...
 | 
				
			||||||
 | 
					.........#...#......#.....###..........#...............#.......#..................................#.........##....#.......#........
 | 
				
			||||||
 | 
					....#........#.................#..............#.#......#...##...#....#...#.....#...................#....#...#.....#....#.#.........
 | 
				
			||||||
 | 
					.....#....##....#.............#...#..........................#..................#.................#..........#..............##...#.
 | 
				
			||||||
 | 
					....#.#..#....#.................#............................#......#.#................................#..##......##.....#.........
 | 
				
			||||||
 | 
					......#.................#........#.........#......##....#...#.#........#...#.....#.....................##........#..#..#...........
 | 
				
			||||||
 | 
					..........#.#.......#......#.....#..................##.......#........#.....##....#.............#.................#.#..#...........
 | 
				
			||||||
 | 
					.#.#....##.#.#.......#...................##....#...#..........#.........#.#..##.#.......#........#....#....#.#..........##....#....
 | 
				
			||||||
 | 
					...............#......#...#..............###......#.............#....#...##........#.................#....#.................##.#...
 | 
				
			||||||
 | 
					.......#....#.......#.....##.#................#...........#....................#.....##...##.........#....................##....#..
 | 
				
			||||||
 | 
					.................#.....#........................#........#.....#........#...#......#................#............................#.
 | 
				
			||||||
 | 
					..........#.................#........#..#.....................#...........##.#..............#..................#.................#.
 | 
				
			||||||
 | 
					.#.#.#................................#...#.#...#.........#...#.....#...........#..........#.#........#.#.#..........#.....#.......
 | 
				
			||||||
 | 
					.#..#...#..#...............#.................#...##...#........#........#....####......#....#.............#..#...#.............#.#.
 | 
				
			||||||
 | 
					............##........#...............#.#......................#...#..#...##..##..........#...#.........#..........##.......#......
 | 
				
			||||||
 | 
					.........#.#.#...#......#.....................##...............#..#.###........#............#..#......................#......##....
 | 
				
			||||||
 | 
					.#........##.......#.............#.#..........#..#........#..#.#.................................#..................#......#.#.....
 | 
				
			||||||
 | 
					..##...#....#..........................#...#.#.#.........#..#............#.......#....#..............................#....#........
 | 
				
			||||||
 | 
					......#.....##....#...................#...................#........#...#....#...........#..#.....#.................#.#..#.......##.
 | 
				
			||||||
 | 
					....##...#......................#.##..#....#...#.....#..................#..#...........#.....#................#...##...........##..
 | 
				
			||||||
 | 
					...............##...............#.................#.......##..........................#...#.#.........#........#........#......#...
 | 
				
			||||||
 | 
					.##....#....#...#...........#.....##....#..............#...#.........#...#.....##.....#........##.#.#...................#.......#..
 | 
				
			||||||
 | 
					.#............................#.....#...#....#.#.....#.....#.###.............#...............................................#..#..
 | 
				
			||||||
 | 
					..........#..................#...#......#...............#.#.......#............#..........#....#.................#....#.......#....
 | 
				
			||||||
 | 
					.#..#....#...#....................#......#........#.......#...#.#........#.#..........#.............#..##...........#..#...........
 | 
				
			||||||
 | 
					....#......#..................#.......#.......###..#.#.#...........#.#............#................#.....#...........##..#.##..#...
 | 
				
			||||||
 | 
					.......#.#.#...................#.##...........#.........#...#............#.....##....#..........#.....#.#.............#.#...#......
 | 
				
			||||||
 | 
					............#........##....#...........#.............................#.#.#....#..#......#.................#..........#......#.#....
 | 
				
			||||||
 | 
					.....##.#.........................#.#...##.#..#....#..........#..........#............#.......#..##.....##.##..............#.......
 | 
				
			||||||
 | 
					..#..#......................................#.......#.#..#.#.........#.....#...............#.....................................#.
 | 
				
			||||||
 | 
					......#........................#.......#.#............................#..#..#.......#......#.....#............#.#................#.
 | 
				
			||||||
 | 
					...###.#.........#..##......#............#.............###......#....#....##...................##...#..#.#....#.............#.#.#..
 | 
				
			||||||
 | 
					..##....#...........#.............#..#..#.#..........#..............#...#........#..##..#.........................#.......#........
 | 
				
			||||||
 | 
					.#.....#.............##.....#.....###.#.#..#.......#......#..#........#..............#.#....#.....................#...........#....
 | 
				
			||||||
 | 
					....#.........................#....##......#..#......#.#.....#.#.....#.................#.................#.........#...............
 | 
				
			||||||
 | 
					.#............#.........#........#.#.#.....#.....#...#.....#......#......#...............#.#.........#.............................
 | 
				
			||||||
 | 
					................##...#...#......#....#....#.........##.............#.......#.....#.......................#..###..#...##............
 | 
				
			||||||
 | 
					...........#.#..............#..#.......#....#.#.....#..............................#..##....................#.#......#.............
 | 
				
			||||||
 | 
					..................#....................#............................##.#..#.#..........#..................#............#...........
 | 
				
			||||||
 | 
					.............#.....#.......##...#..#........#.................##......#......#.#..............#..........#........#.#.#............
 | 
				
			||||||
 | 
					...........................#....##...#.###...........#.#..........#.............#.....#.#....#.....#....#..........#...............
 | 
				
			||||||
 | 
					.............#........##........#.#.#..##....#......#.............#.#....#.#.#...#...#....#.#..#.......#...........##..#...........
 | 
				
			||||||
 | 
					......#..#.....#........##.....#......#......#.#....#.#..#...#.........#.........#..............#..........###.....................
 | 
				
			||||||
 | 
					.............#..........#..#...####..........#......#..#....#.........#..##............##.....#..#.....##.#......#.#....#..#.#.....
 | 
				
			||||||
 | 
					.................................................................S.................................................................
 | 
				
			||||||
 | 
					.....................#.....#.#........##......#......##..#..#.......#.##..#...........................#..#.........................
 | 
				
			||||||
 | 
					......................#.#..........##....................#.................#......#..#.....................##.....#.......#........
 | 
				
			||||||
 | 
					................#..........#...#.....................#....#..........#.##.....##........#......#........##....#..........##........
 | 
				
			||||||
 | 
					.........##...#.#..#.....#.#...#.#................#.........#.......#..##..#.....#...#...##....#...#............#....##............
 | 
				
			||||||
 | 
					...........................#..#..#...#..#...##..................................................##.........##.#...#................
 | 
				
			||||||
 | 
					............#..#.........#........#.......#......#...#......##.##.................#.#........##.#....#....#.#...#....#.............
 | 
				
			||||||
 | 
					...........#..#.....#..#..#......#.#..#............#............#.........#..#.....#..#........#..............##.......#.......##..
 | 
				
			||||||
 | 
					...................#....##...........#.#......#.......##..#..#.#.....#...#...#.##..............#.##....#....#.#.....#.........#....
 | 
				
			||||||
 | 
					..................#..#....#......#.#...........#...#.......#........#...#......#...........#.....................#.#.............#.
 | 
				
			||||||
 | 
					................#...........#.............#.#.....#.........................##.#....#..#..........#.#...#....#................##.#.
 | 
				
			||||||
 | 
					......##........#.#......#..........#..........#..........................#...#..........###.#..............................##.....
 | 
				
			||||||
 | 
					.....#..............#........#.....#.#..#....#........##........#..#......#......#......#..#......#......##...................#....
 | 
				
			||||||
 | 
					.#................#.....#...........#.#.........#.#.....#.##.............#...........#.#.#....##.#..........#...............#.#..#.
 | 
				
			||||||
 | 
					..#..#.............#...............#....#..........#..#.....#...#...............##.....#...#............#.#...................#....
 | 
				
			||||||
 | 
					......#............#.....#.................#..............##.#......##............#....#..#.#..#.#.#.............................#.
 | 
				
			||||||
 | 
					...#..................##..........#..........#...#.................#.......#.....#...#...................#..................#.#....
 | 
				
			||||||
 | 
					.#....##....................#...#...#.........#.#....#...#.#.......#..##..#.#....#........##.#....##......#..........#...#....#..#.
 | 
				
			||||||
 | 
					....#.........#............#..#.....#.#.....#.#..#.....#................#..........#.....##...........................##...........
 | 
				
			||||||
 | 
					.#............................#...............#...#.#.........#.....#...#..........#...#.......##..#..................##.##....#...
 | 
				
			||||||
 | 
					.......#..................#.#.............#.......#....#............................#...................#.#........................
 | 
				
			||||||
 | 
					.........#........................####......#......##...##............#.....#...#...##.......#.....#.............#.##.#............
 | 
				
			||||||
 | 
					..#..#.##......#..........#..............#............#...................##...................#..#.....#.......#.....#...#...##...
 | 
				
			||||||
 | 
					....#..#...........................#.........#...#.........#.#.....#.............#.......#............#.................###.#....#.
 | 
				
			||||||
 | 
					...#.......#.#.......................##....#.......................#............#......#.....#..#....#..........#.......#..........
 | 
				
			||||||
 | 
					.......#.........##.#................#.........#.#..#.........#.....#.#...............#.#....#....#............#.....#.............
 | 
				
			||||||
 | 
					..................#.#.......................#................##......#...............#......................#..#.#.#..........##...
 | 
				
			||||||
 | 
					......##.......#.......#............#.....#........#.....##....#.....#.............#.#....#.....#.............#......#.............
 | 
				
			||||||
 | 
					...#.........#.....#...............#.........#.....#..........#...#.........#....#.#.......###..#.#..............#.................
 | 
				
			||||||
 | 
					.........#....##.#...#............#.....................#...........##......#..#..##......#.................#..#.##................
 | 
				
			||||||
 | 
					.........#.........#...##..............#.#...#..###........#.#......#...#..#............#.......#.............#.....#.......#....#.
 | 
				
			||||||
 | 
					.....................#...#..........#.#............#...#.#.##..##..........#..#........#.......#........#.......#..#.....#.#.....#.
 | 
				
			||||||
 | 
					....#..........#....................#...............................#.##.##.......###.........#........#....#.................####.
 | 
				
			||||||
 | 
					..........#...#.............##..................#..#....#............#...................#..#.............#.......#...#.......#....
 | 
				
			||||||
 | 
					.#....#..##......#.#.##.....#.............................##.#............#.#..............#.........#.................#......#....
 | 
				
			||||||
 | 
					..#.........#.....#........#................#...#...................#..............#..#............#...#...#...................#...
 | 
				
			||||||
 | 
					....#..#..#..#...........#................#......#...#......#.....#........#...#...##.#..............#........#.#......#..#..#.#...
 | 
				
			||||||
 | 
					......##..#..#..............##...........#.#...#............#...#.#.....#.#.....#.......##...............#.#.......................
 | 
				
			||||||
 | 
					.......#.........#.........#..............#...#......................#....#....#........#.......#.........#......#.................
 | 
				
			||||||
 | 
					...#..#.........#...#...#........#...............#............#....###.#.#.........#...............#................#.......#....#.
 | 
				
			||||||
 | 
					.......#.....#........#..........#...............................................#..#.#...................#.........#..#...........
 | 
				
			||||||
 | 
					................#..#....#..#......................##...............##...#.##...#..................#.....#.......#..................
 | 
				
			||||||
 | 
					.#......#...#...............#.........................#...#.............#.....#............................#.................#..#..
 | 
				
			||||||
 | 
					.................##....##........................#.......#.#...........#......................##.......#.............#...#..#......
 | 
				
			||||||
 | 
					.#..........#....#................##....#.............#.......#...#...#......#...#.................#....#....................#...#.
 | 
				
			||||||
 | 
					..................##..#.#.##..#.#...........................#.................##..........#.....................#..........#....#..
 | 
				
			||||||
 | 
					....................#...#............#..#................#...#.#...........#..#............#......##....#.....##..............#....
 | 
				
			||||||
 | 
					.#..#......#........#.........#......#..#................#.#...#..#.#......#.............#.#.....#....###...#.#....##..............
 | 
				
			||||||
 | 
					....#......#.#..#................#.#...#................#...#.......#.#.#..............#......................#..#.....#........#..
 | 
				
			||||||
 | 
					........#.............#...##.#.#...#......#................#........#...#...............#.#.......#........##.#...#.......#......#.
 | 
				
			||||||
 | 
					.........................##..#......#.#.....#.........##....#............#..........#.............#......#....#............#...#...
 | 
				
			||||||
 | 
					...#.....#..#.....#.........#..#..#.##.................................#.............#......##............#....#..#......#.......#.
 | 
				
			||||||
 | 
					..#...#....#.#.#...#...#..#...#............##.............................#..................##..............#...................#.
 | 
				
			||||||
 | 
					..#..#.....##.............#...........#...#...#.#..........#.......#....#...........#........#........##.......#.......#...........
 | 
				
			||||||
 | 
					........#.#...#...........#..###...........#.....#................#.................##.........#.....#....#....#.....#.#.......#.#.
 | 
				
			||||||
 | 
					...#......#..............#....#...##...#..###.....#.........#.......#....................#...#.........##..........#..#..........#.
 | 
				
			||||||
 | 
					.....#.#....................#........#....###.#..............####....................................#.#...#..#...........#....#...
 | 
				
			||||||
 | 
					...#.#...##...#.........#...#............#.....#...#............#...#.........#..#...........................#..#............#.....
 | 
				
			||||||
 | 
					.#...#.#..###..................#...#..........#......#........#.#................#.......................##.###.....#.#............
 | 
				
			||||||
 | 
					.....................#.#..#.....#.#..#............................................#..#.......#...#.#.........##.....#..............
 | 
				
			||||||
 | 
					...#............##.......#...#.##..#........##...#....#....................#.#......#.#....................##.#...#..#....#..#.....
 | 
				
			||||||
 | 
					........#....#..........................#...#...........................................#...#..............#..........##.......#...
 | 
				
			||||||
 | 
					..............#..#............##......#..#.#......#....#.........................#.....#..#..#...#..........##.....#..........#....
 | 
				
			||||||
 | 
					..........#....##........#....#..#....#.................#.................#.#...............#.......#....#...#...............#..#..
 | 
				
			||||||
 | 
					...............#..#......#..........#...#......#......##.#..............#.#..........#...#......#..#....#................#..#...#..
 | 
				
			||||||
 | 
					...................................................................................................................................
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					...........
 | 
				
			||||||
 | 
					.....###.#.
 | 
				
			||||||
 | 
					.###.##..#.
 | 
				
			||||||
 | 
					..#.#...#..
 | 
				
			||||||
 | 
					....#.#....
 | 
				
			||||||
 | 
					.##..S####.
 | 
				
			||||||
 | 
					.##..#...#.
 | 
				
			||||||
 | 
					.......##..
 | 
				
			||||||
 | 
					.##.#.####.
 | 
				
			||||||
 | 
					.##..##.##.
 | 
				
			||||||
 | 
					...........
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user