-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcalculating-with-functions.js
71 lines (58 loc) · 1.86 KB
/
calculating-with-functions.js
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
/**
* https://www.codewars.com/kata/525f3eda17c7cd9f9e000b39
*
*
Description:
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(dividedBy(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)
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
*
*/
let tests = require('./lib/framework.js');
let Test = tests.Test, describe = tests.describe, it = tests.it, before = tests.before, after = tests.after;
const number = function number(n) {
return function (f) {
return typeof f === 'function' ? f(n) : n;
}
};
const zero = number(0);
const one = number(1);
const two = number(2);
const three = number(3);
const four = number(4);
const five = number(5);
const six = number(6);
const seven = number(7);
const eight = number(8);
const nine = number(9);
const plus = function(m) {
return function (n) {
return n + m;
}
};
const minus = function(m) {
return function (n) {
return n - m;
}
};
const times = function(m) {
return function (n) {
return n * m;
}
};
const dividedBy = function(m) {
return function (n) {
return n / m;
}
};
Test.assertEquals(seven(times(five())), 35);
Test.assertEquals(four(plus(nine())), 13);
Test.assertEquals(eight(minus(three())), 5);
Test.assertEquals(six(dividedBy(two())), 3);