def __init__(self, m: Matter, ind: int, hash_count: int):
     self.a_init = m.a
     self.n_color = m.n_color()
     self.n_cell = m.n_cell()
     self.size = m.shape[0] * m.shape[1]
     self.is_filled_rectangle = m.is_filled_rectangle()
     if m.is_filled_rectangle():
         if m.is_square():
             self.is_rectangle = 2
         else:
             self.is_rectangle = 1
     else:
         if m.a is not None:
             self.is_rectangle = 0
         else:
             self.is_rectangle = None
     # assume trimmed
     x_arr = m.values
     # row
     res_row = 0
     for i in range(x_arr.shape[0] // 2):
         res_row += (x_arr[i, :] != x_arr[x_arr.shape[0] - 1 - i, :]).sum()
     # col
     res_col = 0
     for j in range(x_arr.shape[1] // 2):
         res_col += (x_arr[:, j] != x_arr[:, x_arr.shape[1] - 1 - j]).sum()
     res = 0
     if res_row == 0:
         res += 1
     if res_col == 0:
         res += 2
     self.is_symmetry = res
     self.ind = ind
     self.hash = hash_count
     self.n_noise = (m.values != m.max_color()).sum()
     self.a = None
     self.y = None
예제 #2
0
def rot_270(m: Matter) -> Matter:
    assert m.is_square()
    new_matter: Matter = m.copy()
    new_matter.set_values(array.rot_270(m.values))
    return new_matter
예제 #3
0
def transpose(m: Matter) -> Matter:
    assert m.is_square()
    new_matter: Matter = m.copy()
    new_matter.set_values(array.transpose(m.values))
    return new_matter