Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Binary masks, commented, 6 lines solution in Creative category for Pattern Recognition by CDG.Axel
from itertools import product
def checkio(pattern, image):
pc, pr, ic, ir = map(len, [pattern[0], pattern, image[0], image])
# transform to binary masks List[int], one int per line, 2 bits per column
pattern, image = map(lambda x: [int('0'.join(map(str, row)), 2) for row in x], [pattern, image])
# cycle two indexes at once using product
for i, j in product(range(ir - pr + 1), range(2 * (ic - pc) + 1)[::-2]):
# for pattern matching used masked (1-mask & image)
if pattern == [int('11' * pc, 2) & k >> j for k in image[i:i+pr]]:
image[i:i+pr] = [int('10' * pc, 2) << j | k for k in image[i:i+pr]]
# transform binary masks to matrix
return [[row >> col * 2 & 3 for col in range(ic)[::-1]] for row in image]
Nov. 27, 2021
Comments: