Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Алгоритм для слияния элементов массива с datetime (https://javascript.ru/forum/misc/56978-algoritm-dlya-sliyaniya-ehlementov-massiva-s-datetime.html)

romapost 13.07.2015 14:37

Алгоритм для слияния элементов массива с 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

Интересно найти алгоритмически красивое решение

kostyanet 13.07.2015 14:41

Сначала в long преобразуйте, там виднее будет как квантовать по часам.

laimas 13.07.2015 15:07

А по какому принципу определяются именно эти интервалы?

6:00 - 8:00
14:00 - 16:00
20:00 - 21:00

ksa 13.07.2015 15:11

Цитата:

Сообщение от laimas
А по какому принципу определяются именно эти интервалы?

6:00 - 8:00
14:00 - 16:00
20:00 - 21:00

2, 2, 1 :D

ksa 13.07.2015 15:14

Цитата:

Сообщение от romapost (Сообщение 379071)
Туплю, не могу придумать алгоритм, который бы из такой структуры данных

Код:

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", если оного нет - брать у следующего. :D

рони 13.07.2015 15:18

:write:
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);

ksa 13.07.2015 15:24

Мои 5коп... :D

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

ksa,
если добавить 9 уже будет неправильно

ksa 13.07.2015 15:29

Цитата:

Сообщение от рони
если добавить 9 уже будет неправильно

Это громко сказано... Потому как общего примера нет, как и "правильного" алгоритма. :D

Вопрос был "как это перевести в то", мой пример делает это. :)
Может это твой пример будет не правильным. :D

ksa 13.07.2015 15:33

рони, для "9-ти"... :D

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);


Часовой пояс GMT +3, время: 04:26.