13.07.2015, 14:37
|
Новичок на форуме
|
|
Регистрация: 13.07.2015
Сообщений: 1
|
|
Алгоритм для слияния элементов массива с datetime
Туплю, не могу придумать алгоритм, который бы из такой структуры данных
Код:
|
19.07.2015 6:00
19.07.2015 7:00
19.07.2015 8:00
19.07.2015 14:00
19.07.2015 15:00
19.07.2015 16:00
19.07.2015 20:00
19.07.2015 21:00 |
сделал такую
Код:
|
19.07.2015 6:00 - 8:00
19.07.2015 14:00 - 16:00
19.07.2015 20:00 - 21:00 |
Интересно найти алгоритмически красивое решение
|
|
13.07.2015, 14:41
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сначала в long преобразуйте, там виднее будет как квантовать по часам.
|
|
13.07.2015, 15:07
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
А по какому принципу определяются именно эти интервалы?
6:00 - 8:00
14:00 - 16:00
20:00 - 21:00
|
|
13.07.2015, 15:11
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от laimas
|
А по какому принципу определяются именно эти интервалы?
6:00 - 8:00
14:00 - 16:00
20:00 - 21:00
|
2, 2, 1
|
|
13.07.2015, 15:14
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от romapost
|
Туплю, не могу придумать алгоритм, который бы из такой структуры данных
Код:
|
19.07.2015 6:00
19.07.2015 7:00
19.07.2015 8:00
19.07.2015 14:00
19.07.2015 15:00
19.07.2015 16:00
19.07.2015 20:00
19.07.2015 21:00 |
сделал такую
Код:
|
19.07.2015 6:00 - 8:00
19.07.2015 14:00 - 16:00
19.07.2015 20:00 - 21:00 |
Интересно найти алгоритмически красивое решение
|
Цикл с 0 с шагом 3... Концовку брать "через 1", если оного нет - брать у следующего.
|
|
13.07.2015, 15:18
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
for (var a = [6, 7, 8, 14, 15, 16, 20, 21], c = [], temp, i = 0; i < a.length; i++)
if (!temp && (temp = a[i]), void 0 !== a[i + 1] && 1 < a[i + 1] - a[i] || i == a.length - 1) c.push(temp + " - " + a[i]), temp = !1;
alert(c);
|
|
13.07.2015, 15:24
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Мои 5коп...
var a = [6, 7, 8, 14, 15, 16, 20, 21];
var b=[];
for (var i = 0; i < a.length; i+=3) {
b[b.length]=a[i]+' - '+((a[i+2])? a[i+2]: a[i+1]);
};
alert(b);
|
|
13.07.2015, 15:28
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
ksa,
если добавить 9 уже будет неправильно
|
|
13.07.2015, 15:29
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от рони
|
если добавить 9 уже будет неправильно
|
Это громко сказано... Потому как общего примера нет, как и "правильного" алгоритма.
Вопрос был "как это перевести в то", мой пример делает это.
Может это твой пример будет не правильным.
|
|
13.07.2015, 15:33
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
рони, для "9-ти"...
var a = [6, 7, 8, 14, 15, 16, 20, 21];
var b=[];
for (var i = 0; i < a.length-1; i+=3) {
b[b.length]=a[i]+' - '+((a[i+2])? a[i+2]: a[i+1]);
};
alert(b);
|
|
|
|