forked from zero-to-mastery/JS_Fun_Practice
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbrianwhelandublin.js
116 lines (89 loc) · 2.04 KB
/
brianwhelandublin.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
const identity = (x) => x;
const addb = (a, b) => a + b;
const subb = (a, b) => a - b;
const mulb = (a, b) => a * b;
const minb = (a, b) => Math.min(a, b);
const maxb = (a, b) => Math.max(a, b);
const add = (...nums) => nums.reduce((acc, curr) => acc + curr);
const sub = (...nums) => nums.reduce((acc, curr) => acc - curr);
const mul = (...nums) => nums.reduce((acc, curr) => acc * curr);
const min = (...nums) => Math.min(...nums);
const max = (...nums) => Math.max(...nums);
const addRecurse = (...nums) => {
if (nums.length === 1) return nums[0];
return nums.pop() + addRecurse(...nums);
};
const minRecurse = (...nums) => {
const length = nums.length;
if (length === 0) return;
const min = (nums, len) => {
if (len === 1) return nums[0];
return Math.min(nums[len - 1], min(nums, len - 1));
};
return min(nums, length);
};
const maxRecurse = (...nums) => {
const length = nums.length;
if (length === 0) return;
const max = (nums, len) => {
if (len === 1) return nums[0];
return Math.max(nums[len - 1], max(nums, len - 1));
};
return max(nums, length);
};
const not =
(func) =>
(...args) =>
!func(...args);
const acc =
(func, initial) =>
(...args) => {
let result = initial;
for (let i of args) {
final = finc(result, i);
}
return result;
};
const fill = (num) => new Array(num).fill(num);
const fillRecursive = (num, arr = []) => {
if (arr.length === num) {
return arr;
} else {
arr.push(num);
return fillRecursive(num, arr);
}
};
const set = (...args) => {
const result = [];
for (let i = 0; i < args.length; i++) {
if (!result.includes(args[i])) result.push(args[i]);
}
return result;
};
const identityf = (x) => () => x;
const addf = (a) => (b) => a + b;
const litf = (func) => (a) => (b) => func(a, b);
const inc = (x) => addb(x, 1);
module.exports = {
identity,
addb,
subb,
mulb,
minb,
maxb,
add,
sub,
mul,
min,
max,
addRecurse,
litf,
minRecurse,
maxRecurse,
not,
acc,
fill,
set,
identityf,
addf,
};