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

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

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

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

Below is the implementation of the above approach:

 # 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 value from 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 not def 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 I like solving puzzles

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.