Advertisement
user125932000

tiling verification

Aug 8th, 2020 (edited)
919
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.44 KB | None | 0 0
  1. # checks for each line that the level is an odd number between 1 and 2k-1,
  2. # places a blocking configuration in the n x n x n grid at the corresponding level,
  3. # and checks that no blocking configurations placed in this process ever overlap
  4.  
  5. def verify(xlist, ylist, zlist, k):
  6.     filled = [[[0 for z in range(k)] for y in range(k)] for x in range(k)]
  7.     def is_filled(a, b, c):
  8.         return filled[(a-1)/2][(b-1)/2][(c-1)/2]
  9.     def fill(a, b, c):
  10.         filled[(a-1)/2][(b-1)/2][(c-1)/2] = 1
  11.  
  12.     #format check
  13.     if len(xlist) != 2*k - 1 or len(ylist) != 2*k - 1 or len(zlist) != 2*k - 1:
  14.         return 0
  15.  
  16.     for a in range(1, 2*k):
  17.         #format check
  18.         if len(xlist[a-1]) != 2*k - 1 or len(ylist[a-1]) != 2*k - 1 or len(zlist[a-1]) != 2*k - 1:
  19.             return 0
  20.  
  21.         for b in range(1, 2*k):
  22.             u, v, w = xlist[a-1][b-1], ylist[a-1][b-1], zlist[a-1][b-1]
  23.  
  24.             # format check
  25.             for coord in [u, v, w]:
  26.                 if coord%2 == 0 or coord < 1 or coord > 2*k - 1:
  27.                     return 0
  28.  
  29.             # case: both odd
  30.             if a%2 == 1 and b%2 == 1:
  31.                 if is_filled(u, a, b):
  32.                     return 0
  33.                 fill(u, a, b)
  34.                 if is_filled(a, v, b):
  35.                     return 0
  36.                 fill(a, v, b)
  37.                 if is_filled(a, b, w):
  38.                     return 0
  39.                 fill(a, b, w)
  40.  
  41.             # case: a odd
  42.             if a%2 == 1 and b%2 == 0:
  43.                 if is_filled(u, a, b-1) or is_filled(u, a, b+1):
  44.                     return 0
  45.                 fill(u, a, b-1)
  46.                 fill(u, a, b+1)
  47.                 if is_filled(a, v, b-1) or is_filled(a, v, b+1):
  48.                     return 0
  49.                 fill(a, v, b-1)
  50.                 fill(a, v, b+1)
  51.                 if is_filled(a, b-1, w) or is_filled(a, b+1, w):
  52.                     return 0
  53.                 fill(a, b-1, w)
  54.                 fill(a, b+1, w)
  55.  
  56.             # case: b odd
  57.             if a%2 == 0 and b%2 == 1:
  58.                 if is_filled(u, a-1, b) or is_filled(u, a+1, b):
  59.                     return 0
  60.                 fill(u, a-1, b)
  61.                 fill(u, a+1, b)
  62.                 if is_filled(a-1, v, b) or is_filled(a+1, v, b):
  63.                     return 0
  64.                 fill(a-1, v, b)
  65.                 fill(a+1, v, b)
  66.                 if is_filled(a-1, b, w) or is_filled(a+1, b, w):
  67.                     return 0
  68.                 fill(a-1, b, w)
  69.                 fill(a+1, b, w)
  70.  
  71.             # case: both even
  72.             if a%2 == 0 and b%2 == 0:
  73.                 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):
  74.                     return 0
  75.                 fill(u, a-1, b-1)
  76.                 fill(u, a-1, b+1)
  77.                 fill(u, a+1, b-1)
  78.                 fill(u, a+1, b+1)
  79.                 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):
  80.                     return 0
  81.                 fill(a-1, v, b-1)
  82.                 fill(a-1, v, b+1)
  83.                 fill(a+1, v, b-1)
  84.                 fill(a+1, v, b+1)
  85.                 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):
  86.                     return 0
  87.                 fill(a-1, b-1, w)
  88.                 fill(a-1, b+1, w)
  89.                 fill(a+1, b-1, w)
  90.                 fill(a+1, b+1, w)
  91.  
  92.     return 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement