Skip to content

Instantly share code, notes, and snippets.

@james4388
Last active September 11, 2019 00:42
Show Gist options
  • Save james4388/b851eabbaf1b68c9df7c600e6b0f6968 to your computer and use it in GitHub Desktop.
Save james4388/b851eabbaf1b68c9df7c600e6b0f6968 to your computer and use it in GitHub Desktop.
Random problem
import string
import random
base_case = [
[(0, 1), (1, 1), (1, 0)], # 0, Top Left
[(0, 0), (1, 0), (1, 1)], # 1, Top Right
[(0, 0), (0, 1), (1, 1)], # 2, Bottom Left
[(0, 1), (0, 0), (1, 0)] # 3, Bottom Right
]
next_corner = [
(0, 2, 1, 0), # prev 0 Top Left
(3, 1, 1, 0), # prev 1 Top Right
(3, 2, 2, 0), # prev 2 Bottom Left
(3, 2, 1, 3), # prev 3 Bottom Right
]
def tile(n: int, corner: int, r: int, c: int):
"""Place L tile, corner 0-3 TopLeft, TopRight, BottomLeft, BottomRight
starting of row and col
"""
if n == 1:
return [tuple((r + dr, c + dc) for dr, dc in base_case[corner])]
else:
solution = []
middle = 2**(n-1)
solution.extend(tile(n-1, next_corner[corner][0], r, c))
solution.extend(tile(n-1, next_corner[corner][1], r, c + middle))
solution.extend(tile(n-1, next_corner[corner][2], r + middle, c))
solution.extend(tile(n-1, next_corner[corner][3], r + middle, c + middle))
solution.append(tuple((r + (middle-1) + dr, c + (middle-1) + dc) for dr, dc in base_case[corner]))
return solution
def visualize(n, corner):
w = 2**n
board = [['.'] * w for _ in range(w)]
for l in tile(n, corner, 0, 0):
char = random.choice(string.ascii_letters)
for r, c in l:
board[r][c] = char
for row in board:
print(' '.join(row))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment