diff --git a/src/llm_benchmark/control/double.py b/src/llm_benchmark/control/double.py index 4be41d7..789c280 100644 --- a/src/llm_benchmark/control/double.py +++ b/src/llm_benchmark/control/double.py @@ -1,4 +1,4 @@ -from typing import List +from typing import List, Tuple class DoubleForLoop: @@ -12,12 +12,7 @@ def sum_square(n: int) -> int: Returns: int: Sum of squares of numbers from 0 to n """ - sum_ = 0 - for i in range(n): - for j in range(n): - if i == j: - sum_ += i * j - return sum_ + return n * (n - 1) * (2 * n - 1) // 6 @staticmethod def sum_triangle(n: int) -> int: @@ -29,11 +24,7 @@ def sum_triangle(n: int) -> int: Returns: int: Sum of triangle of numbers from 0 to n """ - sum_ = 0 - for i in range(n): - for j in range(i + 1): - sum_ += j - return sum_ + return n * (n + 1) * (n - 1) // 6 @staticmethod def count_pairs(arr: List[int]) -> int: @@ -47,16 +38,14 @@ def count_pairs(arr: List[int]) -> int: Returns: int: Number of pairs in the array """ - count = 0 - for i in range(len(arr)): - ndup = 0 - for j in range(len(arr)): - if arr[i] == arr[j]: - ndup += 1 - if ndup == 2: - count += 1 - - return count // 2 + counts = {} + for x in arr: + counts[x] = counts.get(x, 0) + 1 + + pairs = 0 + for count in counts.values(): + pairs += count // 2 + return pairs @staticmethod def count_duplicates(arr0: List[int], arr1: List[int]) -> int: @@ -69,12 +58,9 @@ def count_duplicates(arr0: List[int], arr1: List[int]) -> int: Returns: int: Number of duplicates between the two arrays """ - count = 0 - for i in range(len(arr0)): - for j in range(len(arr1)): - if i == j and arr0[i] == arr1[j]: - count += 1 - return count + set0 = set(arr0) + set1 = set(arr1) + return len(set0.intersection(set1)) @staticmethod def sum_matrix(m: List[List[int]]) -> int: @@ -87,7 +73,7 @@ def sum_matrix(m: List[List[int]]) -> int: int: Sum of matrix of integers """ sum_ = 0 - for i in range(len(m)): - for j in range(len(m[i])): - sum_ += m[i][j] + for row in m: + for val in row: + sum_ += val return sum_