Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # checks for each line that the level is an odd number between 1 and 2k-1,
- # places a blocking configuration in the n x n x n grid at the corresponding level,
- # and checks that no blocking configurations placed in this process ever overlap
- def verify(xlist, ylist, zlist, k):
- filled = [[[0 for z in range(k)] for y in range(k)] for x in range(k)]
- def is_filled(a, b, c):
- return filled[(a-1)/2][(b-1)/2][(c-1)/2]
- def fill(a, b, c):
- filled[(a-1)/2][(b-1)/2][(c-1)/2] = 1
- #format check
- if len(xlist) != 2*k - 1 or len(ylist) != 2*k - 1 or len(zlist) != 2*k - 1:
- return 0
- for a in range(1, 2*k):
- #format check
- if len(xlist[a-1]) != 2*k - 1 or len(ylist[a-1]) != 2*k - 1 or len(zlist[a-1]) != 2*k - 1:
- return 0
- for b in range(1, 2*k):
- u, v, w = xlist[a-1][b-1], ylist[a-1][b-1], zlist[a-1][b-1]
- # format check
- for coord in [u, v, w]:
- if coord%2 == 0 or coord < 1 or coord > 2*k - 1:
- return 0
- # case: both odd
- if a%2 == 1 and b%2 == 1:
- if is_filled(u, a, b):
- return 0
- fill(u, a, b)
- if is_filled(a, v, b):
- return 0
- fill(a, v, b)
- if is_filled(a, b, w):
- return 0
- fill(a, b, w)
- # case: a odd
- if a%2 == 1 and b%2 == 0:
- if is_filled(u, a, b-1) or is_filled(u, a, b+1):
- return 0
- fill(u, a, b-1)
- fill(u, a, b+1)
- if is_filled(a, v, b-1) or is_filled(a, v, b+1):
- return 0
- fill(a, v, b-1)
- fill(a, v, b+1)
- if is_filled(a, b-1, w) or is_filled(a, b+1, w):
- return 0
- fill(a, b-1, w)
- fill(a, b+1, w)
- # case: b odd
- if a%2 == 0 and b%2 == 1:
- if is_filled(u, a-1, b) or is_filled(u, a+1, b):
- return 0
- fill(u, a-1, b)
- fill(u, a+1, b)
- if is_filled(a-1, v, b) or is_filled(a+1, v, b):
- return 0
- fill(a-1, v, b)
- fill(a+1, v, b)
- if is_filled(a-1, b, w) or is_filled(a+1, b, w):
- return 0
- fill(a-1, b, w)
- fill(a+1, b, w)
- # case: both even
- if a%2 == 0 and b%2 == 0:
- if is_filled(u, a-1, b-1) or is_filled(u, a-1, b+1) or is_filled(u, a+1, b-1) or is_filled(u, a+1, b+1):
- return 0
- fill(u, a-1, b-1)
- fill(u, a-1, b+1)
- fill(u, a+1, b-1)
- fill(u, a+1, b+1)
- if is_filled(a-1, v, b-1) or is_filled(a-1, v, b+1) or is_filled(a+1, v, b-1) or is_filled(a+1, v, b+1):
- return 0
- fill(a-1, v, b-1)
- fill(a-1, v, b+1)
- fill(a+1, v, b-1)
- fill(a+1, v, b+1)
- if is_filled(a-1, b-1, w) or is_filled(a-1, b+1, w) or is_filled(a+1, b-1, w) or is_filled(a+1, b+1, w):
- return 0
- fill(a-1, b-1, w)
- fill(a-1, b+1, w)
- fill(a+1, b-1, w)
- fill(a+1, b+1, w)
- return 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement