Skip to content

Commit

Permalink
Merge pull request #42 from mikelane/beginner/#8/sum-earnings
Browse files Browse the repository at this point in the history
Beginner/#8/sum earnings
  • Loading branch information
the-vampiire authored Oct 5, 2018
2 parents 9c0495f + 4902d8a commit 077c023
Showing 1 changed file with 62 additions and 0 deletions.
62 changes: 62 additions & 0 deletions beginner/sum_earnings_mikelane.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import functools


def sum_earnings(s: str) -> int:
"""
Challenge
- Write a function that accepts a comma-separated string input of
earning/spending activity and returns the sum of earnings as a
single int value.
- If at any point the spending (negative) value is greater than the
sum of earned (positive) values before it then the streak ends and
the count should start over
We have a list in string type separated by commas that represented
buy or sell activity. Positive value for selling and negative value
for buying activity. For example, in the following string, this
user sold something for $7 on the 2nd day, and something for $2 on
the 4th day, and then bought something for $12 on the 5th day, and
so on.
>>> sum_earnings('0,7,0,2,-12,3,0,2')
5
This user's highest earnings streak is $5, which started on the 6th
day and ended on the 8th day. The streak does not start before the
6th day because the user spent $12 on the 5th and broke earlier
streak on $9.
>>> sum_earnings('1,3,-2,1,2')
5
Notes
If the user did not do anything (i.e. 0,0,0,0,0) or only bought
things without selling anything (i.e. -4,-3,-7,-1), then it should
output with 0.
>>> sum_earnings('0,0,0,0,0')
0
>>> sum_earnings('-4,-3,-7,-1')
0
Your program should be able to handle a comma-separated string
consisting of any number of values. Your program should also be
able to handle invalid input. If an invalid input is given, it
should output 0.
some examples of invalid input:
>>> sum_earnings('qwerty')
0
>>> sum_earnings(',,3,,4')
0
>>> sum_earnings('1,2,v,b,3')
0
"""
vals = map(int, s.split(','))

try:
return functools.reduce(lambda x, y: max(0, x + y), vals)
except ValueError:
return 0

0 comments on commit 077c023

Please sign in to comment.