Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
25-liner: piece of cake solution in 3rd party category for Fused Cubes by przemyslaw.daniel
from typing import Tuple, List, Iterable
from scipy.ndimage import label
from itertools import product
import numpy as np
def fused_cubes(cubes: List[Tuple[int]]) -> Iterable[int]:
''' find volume of cubes '''
# find min and max values
lower, upper = min(sum(cubes, ())), max(sum(cubes, ()))
# create 3d array of voxels
voxels = np.zeros([2*upper - lower]*3)
# mark every lit voxel in 3d space
for x0, y0, z0, edge in cubes:
for x, y, z in product(range(edge), repeat=3):
voxels[(x0 + x - lower, y0 + y - lower, z0 + z - lower)] = 1
# label all and convert it to flat list
labeled, number = label(voxels)
labeled = np.ndarray.flatten(labeled).tolist()
return [labeled.count(group+1) for group in range(number)]
March 4, 2020
Comments: