From 1d37bcee50477a8446b0612f433eef8dd5e771d2 Mon Sep 17 00:00:00 2001 From: CodersAcademy006 <104912634+CodersAcademy006@users.noreply.github.com> Date: Sat, 10 Aug 2024 13:09:56 +0530 Subject: [PATCH 1/2] Add Solution.py --- .../Solution.py | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.py diff --git a/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.py b/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.py new file mode 100644 index 0000000000000..f624935a1c313 --- /dev/null +++ b/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.py @@ -0,0 +1,38 @@ +import math +from collections import defaultdict + +class Solution: + def numPoints(self, darts: list[list[int]], r: int) -> int: + def countDarts(x, y): + count = 0 + for dart in darts: + if math.dist((x, y), (dart[0], dart[1])) <= r + 1e-7: # Add small epsilon for precision issues + count += 1 + return count + + def possibleCenters(x1, y1, x2, y2): + dx, dy = x2 - x1, y2 - y1 + d = math.sqrt(dx * dx + dy * dy) + if d > 2 * r: + return [] + mid_x, mid_y = (x1 + x2) / 2, (y1 + y2) / 2 + dist_to_center = math.sqrt(r * r - (d / 2) * (d / 2)) + offset_x = dist_to_center * dy / d + offset_y = dist_to_center * -dx / d + return [(mid_x + offset_x, mid_y + offset_y), (mid_x - offset_x, mid_y - offset_y)] + + n = len(darts) + max_darts = 1 + + for i in range(n): + for j in range(i + 1, n): + centers = possibleCenters(darts[i][0], darts[i][1], darts[j][0], darts[j][1]) + for center in centers: + max_darts = max(max_darts, countDarts(center[0], center[1])) + + return max_darts + +# Example usage: +solution = Solution() +print(solution.numPoints([[-2,0],[2,0],[0,2],[0,-2]], 2)) # Output: 4 +print(solution.numPoints([[-3,0],[3,0],[2,6],[5,4],[0,9],[7,8]], 5)) # Output: 5 From a3a169487fde45b61c892879f0ea5d50ad32156b Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Tue, 13 Aug 2024 10:10:08 +0800 Subject: [PATCH 2/2] Update Solution.py --- .../Solution.py | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.py b/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.py index f624935a1c313..1c70260041b27 100644 --- a/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.py +++ b/solution/1400-1499/1453.Maximum Number of Darts Inside of a Circular Dartboard/Solution.py @@ -1,38 +1,35 @@ -import math -from collections import defaultdict - class Solution: def numPoints(self, darts: list[list[int]], r: int) -> int: def countDarts(x, y): count = 0 - for dart in darts: - if math.dist((x, y), (dart[0], dart[1])) <= r + 1e-7: # Add small epsilon for precision issues + for x1, y1 in darts: + if dist((x, y), (x1, y1)) <= r + 1e-7: count += 1 return count - + def possibleCenters(x1, y1, x2, y2): dx, dy = x2 - x1, y2 - y1 - d = math.sqrt(dx * dx + dy * dy) + d = sqrt(dx * dx + dy * dy) if d > 2 * r: return [] mid_x, mid_y = (x1 + x2) / 2, (y1 + y2) / 2 - dist_to_center = math.sqrt(r * r - (d / 2) * (d / 2)) + dist_to_center = sqrt(r * r - (d / 2) * (d / 2)) offset_x = dist_to_center * dy / d offset_y = dist_to_center * -dx / d - return [(mid_x + offset_x, mid_y + offset_y), (mid_x - offset_x, mid_y - offset_y)] + return [ + (mid_x + offset_x, mid_y + offset_y), + (mid_x - offset_x, mid_y - offset_y), + ] n = len(darts) max_darts = 1 - + for i in range(n): for j in range(i + 1, n): - centers = possibleCenters(darts[i][0], darts[i][1], darts[j][0], darts[j][1]) + centers = possibleCenters( + darts[i][0], darts[i][1], darts[j][0], darts[j][1] + ) for center in centers: max_darts = max(max_darts, countDarts(center[0], center[1])) return max_darts - -# Example usage: -solution = Solution() -print(solution.numPoints([[-2,0],[2,0],[0,2],[0,-2]], 2)) # Output: 4 -print(solution.numPoints([[-3,0],[3,0],[2,6],[5,4],[0,9],[7,8]], 5)) # Output: 5