-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patha.js
70 lines (54 loc) · 3.15 KB
/
a.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
/*
Пользуясь навигатором, многие видели «градусник» при построении автомобильного маршрута.
Он представляет собой разноцветную прямую, на которой изображена загруженность дорог на маршруте.
В этой задаче предлагается написать функцию, которая адаптирует данные «градусника» для разных размеров экрана.
На вход функции дан массив цветов длины length и размер экрана width (length ≥ width),
на котором будет изображен градусник. Используемые цвета GREEN, YELLOW и RED отвечают низкой,
средней и высокой загруженности соответственно. Цвета сравнимы по степени загруженности дорог: GREEN < YELLOW < RED.
Исходный массив, начиная с первого элемента, разбивается на подряд идущие непересекающиеся
подмассивы длины length / width (число всегда будет целым). В каждом подмассиве необходимо
упорядочить цвета по возрастанию степени загруженности дорог, выбрать медианный цвет и заменить
на него всю совокупность. В случае массива четной длины выбирается «нижняя медиана»
(элемент с номером n/2 в упорядоченном ряду из n элементов). В итоге должен получиться массив цветов длины width.
ввод
const segments = ['GREEN', 'GREEN', 'RED', 'GREEN', 'YELLOW', 'RED', 'GREEN', 'YELLOW', 'RED', 'YELLOW'];
const width = 5;
вывод
['GREEN', 'GREEN', 'YELLOW', 'GREEN', 'YELLOW']
*/
//let s = ['GREEN', 'GREEN', 'RED', 'GREEN', 'YELLOW', 'RED', 'GREEN', 'YELLOW', 'RED', 'YELLOW'];
//let w = 5;
module.exports = function solution(segments, width) {
let block = segments.length / width;
let colors = {
GREEN: 1,
YELLOW: 2,
RED: 3
}
let res = [];
for (var i = 0; i < segments.length; i += block) {
// debugger;
let arr = segments.slice(i, i + block);
arr = arr.sort((a, b) => (colors[a] - colors[b]));
res.push(arr[arr.length / 2 - 1]);
}
return res;
}
//solution(s, w);
// правильное решение от яндекса
module.exports = function solution(segments, width) {
const blockSize = segments.length / width;
const result = [];
for (let i = 0; i < width; i++) {
result.push(getMedian(segments.slice(i * blockSize, (i + 1) * blockSize)));
}
return result;
};
function getMedian(array) {
const map = {
GREEN: 1,
YELLOW: 2,
RED: 3
};
return array.sort((a, b) => map[a] - map[b])[Math.floor((array.length - 1) / 2)];
}