("red", [255, 0, 0]),
("green", [0, 192, 0]),
("blue", [0, 0, 255]),
- ("orange", [255, 192, 0]),
+ ("yellow", [255, 224, 0]),
("cyan", [0, 255, 255]),
- ("violet", [255, 0, 255]),
+ ("violet", [224, 128, 255]),
("lightgreen", [192, 255, 192]),
("brown", [165, 42, 42]),
("lightblue", [192, 192, 255]),
def __init__(self, device=torch.device("cpu")):
self.colors = torch.tensor([c for _, c in self.named_colors])
- self.name2color = dict([(p[0], i) for i, p in enumerate(self.named_colors)])
self.height = 10
self.width = 10
self.device = device
return x
- def frame2img_(self, x, scale=15):
- x = x.reshape(x.size(0), self.height, -1)
- x = self.colors[x].permute(0, 3, 1, 2)
- s = x.shape
- x = x[:, :, :, None, :, None].expand(-1, -1, -1, scale, -1, scale)
- x = x.reshape(s[0], s[1], s[2] * scale, s[3] * scale)
-
- x[:, :, :, torch.arange(0, x.size(3), scale)] = 0
- x[:, :, torch.arange(0, x.size(2), scale), :] = 0
- x = x[:, :, 1:, 1:]
-
- return x
-
def save_image(
self,
result_dir,
def task_islands(self, A, f_A, B, f_B):
for X, f_X in [(A, f_A), (B, f_B)]:
+ nb_on_border = 0
+ for _ in range(10):
+ for k in torch.randperm(self.height * self.width):
+ i, j = k % self.height, k // self.height
+ border = (
+ i == 0 or i == self.height - 1 or j == 0 or j == self.width - 1
+ )
+ no, nq, nq_diag = self.contact(X, i, j, 1)
+
+ if (
+ (nq > 0 and not border)
+ or (nq == 0 and border and nb_on_border < 4)
+ ) and nq_diag == 0:
+ X[i, j] = 1
+ if border:
+ nb_on_border += 1
+
while True:
- i, j = torch.randint(self.height, (1,)), torch.randint(self.width, (1,))
- if (
- i == 0
- or i == self.height - 1
- or j == 0
- or j == self.width - 1
- or X[i, j] == 1
- ):
- break
- while True:
- di, dj = torch.randint(3, (2,)) - 1
- if abs(di) + abs(dj) > 0:
- break
- X[i, j] = 1
- while True:
- i, j = i + di, j + dj
- if i < 0 or i >= self.height or j < 0 or j >= self.width:
- break
- b = (
- i == 0
- or i == self.height - 1
- or j == 0
- or j == self.width - 1
- or X[i, j] == 1
- )
- X[i, j] = 1
- if b:
+ nb_fixes = 0
+ for i in range(1, self.height - 1):
+ for j in range(1, self.width - 1):
+ if (
+ X[i, j] == 1
+ and X[i - 1, j] + X[i + 1, j] + X[i, j - 1] + X[i, j + 1]
+ == 1
+ ):
+ X[i, j] = 0
+ nb_fixes += 1
+
+ if nb_fixes == 0:
break
######################################################################
grids = Grids()
- for t in grids.all_tasks():
- # for t in [grids.task_islands]:
+ # for t in grids.all_tasks():
+ for t in [grids.task_islands]:
print(t.__name__)
prompts, answers = grids.generate_prompts_and_answers(nb, tasks=[t])
grids.save_quizzes("/tmp", t.__name__, prompts[:nb], answers[:nb], nrow=4)