Spaces:
Sleeping
Sleeping
from typing import List | |
from .config import config | |
# Checked | |
# Function to convert position to coordinate | |
def position2Coordinate(position: int, size: int) -> List[int]: | |
return [position // size, position % size] | |
# Function to convert coordinate to position | |
def coordinate2Position(x: int, y: int, size: int) -> int: | |
return x * size + y | |
# Check if points a and b are on the same line and the distance is less than maxDistance | |
def isLine(a: int, b: int, size: int) -> bool: | |
maxDistance = config["inLineDistance"] | |
[x1, y1] = position2Coordinate(a, size) | |
[x2, y2] = position2Coordinate(b, size) | |
return ( | |
(x1 == x2 and abs(y1 - y2) < maxDistance) or | |
(y1 == y2 and abs(x1 - x2) < maxDistance) or | |
(abs(x1 - x2) == abs(y1 - y2) and abs(x1 - x2) < maxDistance) | |
) | |
# Check if all points in the array are on the same line as point p | |
def isAllInLine(p: int, arr: List[int], size: int) -> bool: | |
for i in range(len(arr)): | |
if not isLine(p, arr[i], size): | |
return False | |
return True | |
# Check if any point in the array is on the same line as point p | |
def hasInLine(p: int, arr: List[int], size: int) -> bool: | |
for i in range(len(arr)): | |
if isLine(p, arr[i], size): | |
return True | |
return False |