-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclosest-number.js
44 lines (33 loc) · 1.23 KB
/
closest-number.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
function getClosest(list){
// Распарсиваю данные
let [ , values, num] = list;
values = values.split(' ')
.map(num => Number(num));
num = Number(num);
/* closest - текущее самое близкое,
lacks - сколько не хватает до num
*/
let closest = values[0];
let lacks = Math.abs(num - closest);
// если lacks === 0, тогда closest на первой позиции
if(!lacks)
return `${closest}`;
/*
Иду по values, считаю разницу между num и текущим значением,
беру ее по модулю.
Если она == 0, тогда return.
Если разница меньше прошлой разницы, сохраняю ее и текущее занчение.
*/
for(let i = 1; i < values.length; i++){
const nowLacks = Math.abs(num - values[i]);
if(!nowLacks)
return `${values[i]}`;
if(nowLacks < lacks){
closest = values[i];
lacks = nowLacks;
}
}
return `${closest}`;
}
getClosest(['5', '1 2 3 4 5', '6']);
getClosest(['5', '5 4 3 2 1', '3']);