# Problem Description
This appears to be a scoring system problem for a target-shooting game where different areas of a 10x10 grid are assigned different point values. The task is to calculate the total score based on a list of shot coordinates, where each shot's score is determined by which colored region it lands in.

# Visual Facts
1. The grid is 10x10, with coordinates from (1,1) to (10,10)
2. The grid is divided into 5 concentric regions with different colors and scores:
   - Center (green): Score 0
   - First ring (gray): Score 10
   - Second ring (pink): Score 1
   - Third ring (gray): Score 10
   - Outer ring (blue): Score 5
3. Each region's coordinates are precisely defined:
   - Green: (5,6) to (6,5)
   - Inner gray: (4,7) to (7,4)
   - Pink: (3,8) to (8,3)
   - Outer gray: (2,9) to (9,2)
   - Blue: (1,10) to (10,1)

# Visual Patterns
- Scoring Pattern: The scoring doesn't follow a simple increasing or decreasing pattern from center to edge (0 → 10 → 1 → 10 → 5)
- Coordinate Pattern: Each region expands by one unit on each side from its inner neighbor


# Solution
from typing import List, Tuple

def solution(shots: List[Tuple[int, int]]) -> int:
    """
    Calculate the total score based on the shot locations and the areas, with points assigned according to the different colored areas on the grid.

    Args:
    shots: A list of tuples where each tuple contains the x and y coordinates of a shot.

    Returns:
    int: The total score calculated based on the shots in the grid.
    """
    def calculate_score(x: int, y: int) -> int:
        # Central green area (Score 10)
        if 5 <= x <= 6 and 5 <= y <= 6:
            return 0
        # Surrounding orange area (Score 5)
        elif 4 <= x <= 7 and 4 <= y <= 7:
            return 10
        # Surrounding blue area (Score 1)
        elif 3 <= x <= 8 and 3 <= y <= 8:
            return 1
        elif 2 <= x <= 9 and 2 <= y <= 9:
            return 10
        elif 1 <= x <= 10 and 1 <= y <= 10:
            return 5
        else:
            return 0

    # Calculate total score by summing the scores for all shots
    total_score = sum(calculate_score(x, y) for x, y in shots)
    
    return total_score


# Test Script
def test():
    test_cases = [
        ([(1, 1), (3, 3)], 6),
        ([(2, 2), (4, 4)], 20),
        ([(5, 5), (6, 6), (4, 4), (7, 7), (3, 3)], 21),
        ([(7, 8), (3, 2), (5, 5), (6, 6)], 11),
        ([], 0),
        ([(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], 52),
        ([(5, 6), (6, 5), (5, 5), (6, 6)], 0),
        ([(5, 4), (6, 7), (3, 8), (8, 3)], 22),
        ([(5, 5), (6, 6), (4, 4), (7, 7), (3, 3)], 21),
        ([(5, 1), (6, 2), (4, 3), (7, 4), (3, 5)], 27)
    ]
    for shots, expected_output in test_cases:
        try:
            output = solution(shots)
        except Exception as e:
            error_message = (
                f"An exception occurred while running the test case:\n"
                f"`shots`: {shots}\n\n"
                f"Exception: '{str(e)}'"
            )
            assert False, error_message

        if output != expected_output:
            error_message = (
                f"The following Test Case failed:\n"
                f"`shots`: {shots}\n\n"
                f"Actual Output: {output}\n"
                f"Expected Output: {expected_output}"
            )
            assert False, error_message

test()