Сап, программач. Вопрос.Есть некий массив (назовём его "arr") с таймштампами (https://ru.wikipedia.org/wiki/Timestamp ) событий. Условно говоря, что-то такое:[ [1,100], [100,200], [200,350], [350,400], [500,550], [500,550], [550,650] ]Допустим, моё текущее юниксовое время т.е. мой текущий таймштамп (назовём его "now") - 150. Если определить, в каком событии сейчас находится now при переборе массива циклом довольно просто ( if (arr[0] < now and now > arr[1]) {...} ), то как определить следующее событие? Просто указать, что " if (now < arr[0]) {...} " не получится, ибо охватятся сразу все события, время начала которых больше, чем now.В распоряжении - пикрелейтед. Наверняка есть какое-нибудь очень простое решение, но я просто не могу к нему прийти. Спасай, анон!
>>151750904 (OP)Алсо, чтобы было понятнее:[начало события,конец события]
>>151750904 (OP)Ну так индекс вот этого текущего[начало события,конец события]+ 1
>>151750904 (OP)echo "В pr, быдло";
Ты совсем конченый?Если у тебя твой "стампы" не пересекаются и массив отсортирован, то следующее событие будет внезапно иметь индекс i+1, если arr[0]>now && arr[1]<now.Если не отсортирован, то отсортируй, блять.Если таймстампы перескаются, то сначала поставь задачу нормально и разберись чего ты хочешь.Вообще, программирование - явно не твоё. Ну если первую неделю занимаешься (первые 20-50 часов), то ещё более-менее, если больше, то просто бросай.
>>151751180>твоиИ да, очевидно, скобки съела разметка>если arr [ i ][0]>now && arr [ i ][1]<now, то твоё ебучее следующее - это arr[i+1]
>>151751180вот этот всё верно сказал
>>151751180Видишь же, что пересекаются. Массив отсортирован по началу события.> Вообще, программирование - явно не твоёЯ знаю>>151751279Так блядь, определить следующее событие из текущего и я могу. Как определить именно следующее без всяких привязок к другим элементам массива?
То есть если мой now = 450, то как определить, что следующее событие это [500,550]? При этом определить только его, не захватив остальные [550,650] и следующие за ним, если они будут.Только обнаружил, что событие [500,550] в массиве повторяется два раза. На самом деле она там должен быть одно.
>>151751534>>151751824> пересекаютсяЕсли ты утверждаешь, что в один момент времени может происходить сколь угодно много различных событий, тогда определись сначала, какой смысл ты вкладываешь в это понятие:> следующее
>>151751534>Видишь же, что пересекаются>поставь задачу нормально и разберись чего ты хочешьЧто такое, ёб твою мать, следующее событие, если таймстампы пересекаются? Я могу тебе предложить на минуточку штуки четыре разных определений того, что это, а если посидеть и подумать, то я тебе с десяток накидаю.Вот реши, что хочешь решить - решение придёт само. Понял, блять? Это дзен программирования, сука.
>>151751967>Это дзен программированияПоддвачну>>151751938 -кун
>>151751824Какой же ты мудак.Ёб твою мать.int mat_shluha = -1;for(int i = 0; i < n; i++){ if(arr[0] < now && arr[1] > now){ mat_shluha = i; break; }}arr[mat_shluha]//Твоё ебаное то, что ты ищешь, мудак ты ёбаныйОбъясни, зачем ты вообще в программирование лезешь?
>>151751938> сначала, какой смысл ты вкладываешь в это понятиеОчевидно, первое же событие, начало которого следует после now. Разве это настолько непонятно?
Быстрофиксint mat_shluha = -1;for(int i = 0; i < n; i++){if(arr[0] < now && arr[1] > now){mat_shluha = i + 1;break;}}if(i!=-1 && i < n){arr[mat_shluha]}>>151752202Если события перескаются, то да, ебал твою семью, не понятно. Если не пересекаются, то всё тривиально.
>>151752202Вот тебе пример, дебилоид:[[100,200], [150,170], [200,300]]момент времени = 160. Какое будет следующим?
>>151751824Как только выполнилось условие вхождения твоего now в один из интервалов, позицию интервала сохраняешь в отдельную переменную(внешнюю относительно тела цыкла), делаешь break из цикла.
>>151750904 (OP)У тебя какая-то структура данных хуевая, с такой сложно работать. Нужен хэш с объектами вида { id: 23, start: 120, end: 398 }, которые бы представляли твои интервалы и массив со списком id.Алсо, пользоваться циклами в 2017 — эпическое говноедство.
>>151752242"[200,300]", потому что 200 > 160, соответственно это является следующим событием.>>151751824Цикл не должен прерываться. Про запоминание момента с переменную и сам думал, но для такой вроде бы простой задачи посчитал ненужным.
>>151752610>хэш с объектами вида { id: 23, start: 120, end: 398 }id в этом словаре должны быть ключами, разумеется
>>151752610А какая разница, если данные всё-равно обрабатываются скриптом? Могу и так сделать, но зачем?> пользоваться циклами в 2017 — эпическое говноедство.Почему?
>>151752656> запоминание момента в переменнуюмедленонфикс
>>151752772Дали тебе функционально программирование. На, пользуйся. Не хочу функциональное, хочу говно жрать!
>>151752772>Могу и так сделать, но зачем?С такими структурами проще работать, как правило.>Почему?map, filter, reduce. Для всего остального — Ramda.
>>151752656for(int i = 0; i < n; i++){if(arr[ i ][0] < now && arr[ i ][1] > now){arr[i+1] //- следующий. Хватит мозни ебать, мне кажется, это просто толстый тролль.}}
>>151752878> map, filter, reduceГляну, спасибо.>>151752896Так блядь, а если текущего события, в котором может находиться now нет? Повторю, определить таким образом следующие событие и совсем дебил типа меня может.
Изи вей:1. Сортируешь массив от меньшего к большему2. Бежишь по массиву, пока у текущего элемента начало будет меньше или равно now3. Как только находишь элемент, у которого начало больше now, останавливаешься4. ???????5. ПРОФИТ!!1Нормал вей:Там выше фильтермапредьюсить предлагали, вот оно
>>151753179Ну так, если не найдено, бери первый, у которого начало после нау.
int main void :{print "op hui"return 0}
>>151753447Ладно, попробую переписать на что-то более лучшее, чем цикл. Там глядишь и разберусь./тред
>>151753816Ты хоть циклом сделай, полуебокСколько ты уже погроммированием занимаешься?
```const index = arr.map((e, i) => {return {index: i, start: e[0], end: e[1]}}).filter(i => i.start > now).sort((ls, rs) => ls.start > rs.start)[0].id;```Переводим в более удобный вид.Фильтруем и оставляем только те, которые начинаются после твоего now.Сортируем от меньшего к большему по началу.Берём самый первый.
>>151753900Если не нужен индекс в исходном массиве, то ещё лучше.const time_range = arr.filter(e => e[0] > now).sort((ls, rs) => ls[0] > rs[0])
>>151753868Да у меня есть решение, на самом деле. Но оно страшное и я его даже выкладывать не хочу.>>151753900>>151754053Сложно, но всё равно спасибо. Попробую, посмотрю что получится.
>>151754053> sortСЛООЖНАААА
На хаскеле кто-нибудь напишет?
>>151750904 (OP)А ещё какие то пидоры меня уверяли что в программировании математика НИНУЖНА!!!
>>151754277При чём тут математика?
>>151754354А что это по твоему нахуй?
>>151754420Логика?
>>151754420Логика. Надеюсь, ты не полезешь в то, что всё программирование — высокоуровневая математика
>>151754471Это высшая математика ващет.
>>151754471математика в школе её как раз и развивает, абстрактное мышление, а потом поехали - функторы, монады, каррирование.мимоучительвшколе
>>151754573> функторы, монады, каррирование>мимоучительвшколеХуясе ты модный. Мне в школе рассказывали только как папки создавать в консольке шиндошса, наверное, поэтому я такой даун вырос. Хаскель детишкам преподаешь?
>>151755277Мне осталось отработать месяц до конца года, а потом распределение подходит концу, и нахуй школу. Пойду аутсорсить в контору. В школе платят 125$, но только 3 рабочих дня.> Хаскель Современные дети только Версусбатлы и смотрят. Те, что постарше, в массе своей просто туповаты. Тех, кто хочет знаний в моём случае программировать несколько человек на всю старшую школу.ну еще у меня школа даунов возможно
>>151750904 (OP)> как определить следующее событие> Просто указать, что " if (now < arr[0]) {...} " не получится, ибо охватятся сразу все события, время начала которых больше, чем now.Ну так и есть: все события, время начала которых больше, чем now - следующие события.