-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathfraudulent-activity-notifications.py
More file actions
56 lines (43 loc) · 1.73 KB
/
fraudulent-activity-notifications.py
File metadata and controls
56 lines (43 loc) · 1.73 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
#!/bin/python3
import math
import os
import random
import re
import sys
from statistics import median
"""
This solution hits timeout exceptions on test cases.
I think it's because computing the median of the trailing days can be done
faster than using Python's median function. Instead consider using heaps.
"""
def getTrailingExpenditures(dayNumber, dailyExpenditures, trailingDays):
return dailyExpenditures[dayNumber - trailingDays: dayNumber]
def getTrailingMedian(dayNumber, dailyExpenditures, trailingDays):
trailingExpenditures = getTrailingExpenditures(
dayNumber, dailyExpenditures, trailingDays)
return median(trailingExpenditures)
def activityNotificationOnDay(dayNumber, dailyExpenditures, trailingDays):
"""
Returns True if there an activity notification will be triggered on dayNumber
Returns False if no activity notification will be triggered on dayNumber
"""
todaySpend = dailyExpenditures[dayNumber]
trailingMedian = getTrailingMedian(
dayNumber, dailyExpenditures, trailingDays)
return todaySpend >= 2 * trailingMedian
def activityNotifications(dailyExpenditures, trailingDays):
activityNotifications = 0
for dayNumber in range(trailingDays, len(dailyExpenditures)):
if activityNotificationOnDay(
dayNumber,
dailyExpenditures,
trailingDays):
activityNotifications += 1
return activityNotifications
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
n, trailingDays = map(int, input().split())
dailyExpenditures = list(map(int, input().rstrip().split()))
result = activityNotifications(dailyExpenditures, trailingDays)
fptr.write(str(result) + '\n')
fptr.close()