aboutsummaryrefslogtreecommitdiff
path: root/challenge-336/packy-anderson/python/ch-2.py
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-336/packy-anderson/python/ch-2.py')
-rwxr-xr-xchallenge-336/packy-anderson/python/ch-2.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/challenge-336/packy-anderson/python/ch-2.py b/challenge-336/packy-anderson/python/ch-2.py
new file mode 100755
index 0000000000..4d43d4745b
--- /dev/null
+++ b/challenge-336/packy-anderson/python/ch-2.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+
+def final_score(scores):
+ stack = []
+ rounds = ""
+ count = 0
+ for action in scores:
+ if stack: previous = stack[-1]
+ match action:
+ case '+':
+ stack.append( stack[-1] + stack[-2] )
+ case 'C':
+ stack.pop()
+ case 'D':
+ stack.append( stack[-1] * 2 )
+ case _:
+ stack.append( int(action) )
+ count += 1
+ rounds += "Round {:2d}: ".format(count)
+ rounds += " + ".join([
+ f'({n})' if n < 0 else f'{n}' for n in stack
+ ])
+ if action == "+":
+ rounds += " (sum of previous two scores)"
+ if action == "D":
+ rounds += f" (double the previous score {previous})"
+ if action == "C":
+ rounds += f" (invalidate the previous score {previous})"
+ rounds += "\n"
+ total = sum(stack)
+ rounds += f"\nTotal Scores: {total}"
+ return (total, rounds)
+
+def solution(scores):
+ score_list = ', '.join([ f'"{s}"' for s in scores ])
+ print(f'Input: @scores = ({score_list})')
+ output, rounds = final_score(scores)
+ print(f'Output: {output}\n\n{rounds}')
+
+print('Example 1:')
+solution(["5","2","C","D","+"])
+
+print('\nExample 2:')
+solution(["5","-2","4","C","D","9","+","+"])
+
+print('\nExample 3:')
+solution(["7","D","D","C","+","3"])
+
+print('\nExample 4:')
+solution(["-5","-10","+","D","C","+"])
+
+print('\nExample 5:')
+solution(["3","6","+","D","C","8","+","D","-2","C","+"])