Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Color Map by mehWincenty
def color_map(region):
n = max([item for sublist in region for item in sublist])+1
matrix = [[0]*n for i in range(n)]
i = 0
j = 0
xs = len(region[0])
ys = len(region)
while i= 0 and region[i][j] != region[i-1][j]:
matrix[region[i][j]][region[i-1][j]] = 1
matrix[region[i-1][j]][region[i][j]] = 1
if j+1 < xs and region[i][j] != region[i][j+1]:
matrix[region[i][j]][region[i][j+1]] = 1
matrix[region[i][j+1]][region[i][j]] = 1
if j-1 >= 0 and region[i][j] != region[i][j-1]:
matrix[region[i][j]][region[i][j-1]] = 1
matrix[region[i][j-1]][region[i][j]] = 1
j += 1
j = 0
i += 1
colors = [0 for i in range(n)]
for i in range(n):
forbidden = []
for j in range(n):
if matrix[i][j] == 1:
forbidden.append(colors[j])
for k in range(1, 5):
if forbidden.count(k) == 0:
colors[i] = k
break
return colors
if __name__ == '__main__':
#These "asserts" using only for self-checking and not necessary for auto-testing
NEIGHS = ((-1, 0), (1, 0), (0, 1), (0, -1))
COLORS = (1, 2, 3, 4)
ERROR_NOT_FOUND = "Didn't find a color for the country {}"
ERROR_WRONG_COLOR = "I don't know about the color {}"
def checker(func, region):
user_result = func(region)
if not isinstance(user_result, (tuple, list)):
print("The result must be a tuple or a list")
return False
country_set = set()
for i, row in enumerate(region):
for j, cell in enumerate(row):
country_set.add(cell)
neighbours = []
if j < len(row) - 1:
neighbours.append(region[i][j + 1])
if i < len(region) - 1:
neighbours.append(region[i + 1][j])
try:
cell_color = user_result[cell]
except IndexError:
print(ERROR_NOT_FOUND.format(cell))
return False
if cell_color not in COLORS:
print(ERROR_WRONG_COLOR.format(cell_color))
return False
for n in neighbours:
try:
n_color = user_result[n]
except IndexError:
print(ERROR_NOT_FOUND.format(n))
return False
if cell != n and cell_color == n_color:
print("Same color neighbours.")
return False
if len(country_set) != len(user_result):
print("Excess colors in the result")
return False
return True
assert checker(color_map, (
(0, 0, 0),
(0, 1, 1),
(0, 0, 2),
)), "Small"
assert checker(color_map, (
(0, 0, 2, 3),
(0, 1, 2, 3),
(0, 1, 1, 3),
(0, 0, 0, 0),
)), "4X4"
assert checker(color_map, (
(1, 1, 1, 2, 1, 1),
(1, 1, 1, 1, 1, 1),
(1, 1, 0, 1, 1, 1),
(1, 0, 0, 0, 1, 1),
(1, 1, 0, 4, 3, 1),
(1, 1, 1, 3, 3, 3),
(1, 1, 1, 1, 3, 5),
)), "6 pack"
Nov. 11, 2016
Comments: