Skip to content

Commit 6b00e28

Browse files
committed
Add problem 2013 - Detect Squares
1 parent 11a7835 commit 6b00e28

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed

problems/math/detect_squares.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from typing import List
2+
3+
4+
class DetectSquares:
5+
6+
def __init__(self):
7+
self.coordinates = []
8+
self.frequencies = {}
9+
10+
def add(self, point: List[int]) -> None:
11+
self.coordinates.append(point)
12+
key = str(point[0]) + "," + str(point[1])
13+
if key in self.frequencies:
14+
self.frequencies[key] += 1
15+
else:
16+
self.frequencies[key] = 1
17+
18+
def count(self, point: List[int]) -> int:
19+
x, y = point[0], point[1]
20+
result = 0
21+
for coordinate in self.coordinates:
22+
px, py = coordinate[0], coordinate[1]
23+
if abs(px - x) == abs(py - y) and px != x and py != y:
24+
key_1 = str(x) + "," + str(py)
25+
key_2 = str(px) + "," + str(y)
26+
count = 1
27+
if key_1 in self.frequencies:
28+
count *= self.frequencies[key_1]
29+
else:
30+
count = 0
31+
if key_2 in self.frequencies:
32+
count *= self.frequencies[key_2]
33+
else:
34+
count = 0
35+
result += count
36+
return result

tests/math/detect_squares_test.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import unittest
2+
3+
from problems.math.detect_squares import DetectSquares
4+
5+
6+
class TestDetectSquares(unittest.TestCase):
7+
8+
def test_add_and_count(self):
9+
detect_squares = DetectSquares()
10+
11+
# Adding points
12+
detect_squares.add([1, 2])
13+
detect_squares.add([2, 1])
14+
detect_squares.add([1, 0])
15+
detect_squares.add([0, 1])
16+
17+
# No squares should exist initially
18+
self.assertEqual(detect_squares.count([1, 1]), 0)
19+
20+
# Adding points to form a square
21+
detect_squares.add([2, 2])
22+
self.assertEqual(detect_squares.count([1, 1]), 1)
23+
24+
# Adding a point to form a second square
25+
detect_squares.add([0, 0])
26+
self.assertEqual(detect_squares.count([1, 1]), 2)
27+
28+
def test_no_squares(self):
29+
ds = DetectSquares()
30+
31+
# No points added, no squares should exist
32+
self.assertEqual(ds.count([0, 0]), 0)
33+
34+
def test_multiple_same_points(self):
35+
ds = DetectSquares()
36+
37+
# Adding the same point multiple times
38+
ds.add([0, 0])
39+
ds.add([0, 0])
40+
ds.add([1, 1])
41+
ds.add([1, 1])
42+
ds.add([0, 1])
43+
ds.add([1, 0])
44+
45+
# Two squares are formed
46+
self.assertEqual(ds.count([0, 0]), 2)
47+
48+
49+
if __name__ == '__main__':
50+
unittest.main()

0 commit comments

Comments
 (0)