-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplus_minus.py
More file actions
87 lines (67 loc) · 2.34 KB
/
Copy pathplus_minus.py
File metadata and controls
87 lines (67 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/bin/python3
"""
Solution to this problem:
https://www.hackerrank.com/challenges/plus-minus/problem
"""
import math
import os
import random
import re
import sys
import unittest
def count_positives_and_negatives(arr):
positive_count, negative_count = 0, 0
for number in arr:
if number > 0:
positive_count += 1
elif number < 0:
negative_count += 1
return positive_count, negative_count
def calculate_plus_minus_rates(positive_count, negative_count, arr_count):
positive_rate = positive_count / arr_count
negative_rate = negative_count / arr_count
zero_rate = (arr_count - positive_count - negative_count) / arr_count
return positive_rate, negative_rate, zero_rate
def plusMinus(arr):
positive_count, negative_count = count_positives_and_negatives(arr)
arr_count = len(arr)
positive_rate, negative_rate, zero_rate = calculate_plus_minus_rates(
positive_count,
negative_count,
arr_count,
)
print(f"{positive_rate:.6f}")
print(f"{negative_rate:.6f}")
print(f"{zero_rate:.6f}")
class TestCountPositivesAndNegatives(unittest.TestCase):
def test_positives_only(self):
arr = [1, 1, 1]
result = count_positives_and_negatives(arr)
expected = (3, 0)
self.assertEqual(result, expected)
def test_negatives_only(self):
arr = [-1, -1, -1]
result = count_positives_and_negatives(arr)
expected = (0, 3)
self.assertEqual(result, expected)
def test_zeroes_only(self):
arr = [0, 0, 0]
result = count_positives_and_negatives(arr)
expected = (0, 0)
self.assertEqual(result, expected)
def test_mixed_values(self):
arr = [1, -1, 0]
result = count_positives_and_negatives(arr)
expected = (1, 1)
self.assertEqual(result, expected)
class TestCalculatePlusMinusRates(unittest.TestCase):
def test_positive_only(self):
positive_count, negative_count, arr_count = 3 ,0, 3
result = calculate_plus_minus_rates(positive_count, negative_count, arr_count)
expected = (1, 0, 0)
self.assertEqual(result, expected)
#unittest.main(verbosity=2)
if __name__ == '__main__':
n = int(input().strip())
arr = list(map(int, input().rstrip().split()))
plusMinus(arr)