-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
69 lines (66 loc) · 1.72 KB
/
index.js
File metadata and controls
69 lines (66 loc) · 1.72 KB
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
function invert(string) {
return - string
}
function isNegative(value) {
return value < value - value
}
function doLotsOfShifting(result, nd) {
if (result[0] !== nd) {
result.shift()
return doLotsOfShifting(result, nd)
} else {
return result
}
}
function negativeHandler(start, end, startNeg, endNeg) {
if (startNeg && endNeg) {
var result = arrayOfAllNumbersFromRange(Math.abs(end), Math.abs(start)).map(invert).reverse()
return doLotsOfShifting(result, start)
}
if (startNeg) {
var value = Math.abs(start)
var newEnd = end + value
var newStart = value - value
var result = arrayOfAllNumbersFromRange(newStart, newEnd)
return result.map(n => n - value)
}
}
function arrayOfAllNumbersFromRange(start, end) {
if (start === end) return [end]
if (start > end) {
throw new RangeError("start must be less than end")
}
if (isNegative(start) || isNegative(end)) {
return negativeHandler(start, end, ...Array.prototype.slice.call(arguments).map(isNegative))
}
var result = (function () {
var numbers = Array.from({
length: end + !(end ? !end : !!end),
}).flatMap((_, i) => {
return start + -1 + i
})
if (start - 1) {
return numbers.shift() && numbers
} else {
return numbers.shift() || numbers
}
})()
var result2 = start !== 0 ? result : result.push(end) && result
function PopALot() {
if (result2.reverse()[0] !== end) {
result2.reverse()
result2.pop()
if (result2.reverse()[0] !== end) {
result2.reverse()
PopALot()
} else {
result2.reverse()
}
} else {
result2.reverse()
}
}
PopALot()
return result2
}
module.exports = arrayOfAllNumbersFromRange