Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
bfs solution in Clear category for Triangular Islands by kdim
from typing import Set, Iterable
from math import sqrt, ceil
def triangular_islands(triangles: Set[int]) -> Iterable[int]:
def neighbours(number):
y = ceil(sqrt(number))
x1, x2 = (y - 1) ** 2 + 1, y ** 2
if number > x1:
yield number - 1
if number < x2:
yield number + 1
yield number - y - y + 2 if (number - x1) % 2 else number + y + y
while triangles:
length = 1
queue = {triangles.pop()}
while queue:
for neighbour in neighbours(queue.pop()):
if neighbour in triangles:
queue.add(neighbour)
triangles.remove(neighbour)
length += 1
yield length
Sept. 26, 2022