-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsolution.py
92 lines (56 loc) · 1.63 KB
/
solution.py
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
88
89
90
91
92
# This time we want to write calculations using functions and get the results.
# Let's have a look at some examples:
# seven(times(five())) # must return 35
# four(plus(nine())) # must return 13
# eight(minus(three())) # must return 5
# six(divided_by(two())) # must return 3
# Requirements:
# There must be a function for each number from 0 ("zero") to 9 ("nine")
# There must be a function for each of the following mathematical operations:
# plus, minus, times, dividedBy (divided_by in Ruby and Python)
# Each calculation consist of exactly one operation and two numbers
# The most outer function represents the left operand, the most inner function represents the right operand
# Divison should be integer division. For example, this should return 2, not 2.666666...:
def expression(n, f):
if not f:
return n
return f(n)
def zero(f=None):
return expression(0, f)
def one(f=None):
return expression(1, f)
def two(f=None):
return expression(2, f)
def three(f=None):
return expression(3, f)
def four(f=None):
return expression(4, f)
def five(f=None):
return expression(5, f)
def six(f=None):
return expression(6, f)
def seven(f=None):
return expression(7, f)
def eight(f=None):
return expression(8, f)
def nine(f=None):
return expression(9, f)
def plus(x):
def f(y):
return y + x
return f
def minus(x):
def f(y):
return y - x
return f
def times(x):
def f(y):
return y * x
return f
def divided_by(x):
def f(y):
try:
return int(y / x)
except ZeroDivisionError:
return False
return f