Check if the given 2-D points form T-shape or not

• Difficulty Level : Medium
• Last Updated : 21 Jan, 2021

Given the coordinates of 5 2-dimensional points, check if they form a closed T shape. Print ‘Yes’ if they form T shape and ‘No’ otherwise. Note: Coordinates should be distinct and integers.
There are 4-types of T shaped formations possible according to the given conditions: Examples:

Input: [[7, 5], [8, 5], [6, 5], [7, 7], [7, 6]]
Output: Yes

Input: [[0, 0], [1, 0], [2, 0], [1, -1], [1, -2]]
Output: Yes

Approach:

1. Consider the first point in the given list as the center (x, y) (i.e intersection of the two lines that form a T-shape).
2. Then check if all the points which are needed to form a T-shape of which (x, y) are the center are present in the list of given points or not.
3. Check this for all 4 possible patterns of T-shape.

Below is the implementation of the above approach:

Python3

 # Python3 code to check if given 5# 2-D points form T-shape or not # Import the function to initialize the# dictionary with a specific valuefrom collections import defaultdict # This function checks if the points# form T-shape pointing up  def isUpDirected(point, x, y):     return (point[(x-1, y)] and            point[(x, y)] and            point[(x + 1, y)] and            point[(x, y-1)] and            point[(x, y-2)]) # This function checks if the points# form T-shape pointing down  def isDownDirected(point, x, y):     return (point[(x-1, y)] and            point[(x, y)] and            point[(x + 1, y)] and            point[(x, y + 1)] and            point[(x, y + 2)]) # This function checks if the points# form T-shape pointing left  def isLeftDirected(point, x, y):     return (point[(x, y + 1)] and            point[(x, y)] and            point[(x, y-1)] and            point[(x + 1, y)] and            point[(x + 2, y)]) # This function checks if the points# form T-shape pointing right  def isRightDirected(point, x, y):     return (point[(x, y + 1)] and            point[(x, y)] and            point[(x, y-1)] and            point[(x-1, y)] and            point[(x-2, y)])  # This function checks if given points# form a T-shape or notdef solve(grid):     # Initialize the dictionary with False value    point = defaultdict(lambda: False)    flag = False     for i in range(len(grid)):         # Assign True value to the points which        # are present in the given list        point[(grid[i], grid[i])] = True     for i in range(len(grid)):         # Check if the given points form any of the        # 4 possible T-shaped formations        if isUpDirected(point, grid[i], grid[i]) or           isDownDirected(point, grid[i], grid[i]) or            isLeftDirected(point, grid[i], grid[i]) or            isRightDirected(point, grid[i], grid[i]):             flag = True            break     if flag == True:        return 'Yes'    else:        return 'No'  print(solve([[7, 5], [8, 5], [6, 5], [7, 7], [7, 6]]))print(solve([[0, 0], [1, 0], [2, 0], [1, -1], [1, -2]]))
Output:
Yes
Yes

Time Complexity: O(1)

My Personal Notes arrow_drop_up