@denis01, все пашет. --- Добавлено --- @runcore, я просто тупо на результат глянул, и не смотрел код норм, потом увидел рандом.
Там в foreach функция next не двигает указатель для массива, точнее у foreach теперь свой указатель, раньше такого не было
Код (PHP): <?php function streaks($in) { $items = array_map('intval', explode(',', $in)); for ($i = 0, $out = []; list($k, $v) = each($items); $i++) { if ($k == 0 || $v - 1 !== $last) { $out[$i] = $first = $last = $v; } else { $out[--$i] = $first.'-'.($last = $v); } } return implode(',', $out); } echo streaks('1,3,4,5,6,7,8,10,12,16,17,20,21,22,23,24'); edited: заменил цикл на for. выкинул одно условие, edited2: поправил ошибку добавив $first
@mahmuzar, автор оригинального сообщения не уточнял что из себя представляет список. я считаю: пусть это будет на усмотрение исполнителя. лично я выбрал строку на входе и выходе. про выбор "16-17" или "16..17" — в оригинале через "-", но реально пофигу. а вот лишняя запятая в конце это BAD.
внимательнее. спор возник о том считать ли 16 и 17 диапазоном или отдельными числами? а не в о том Тире или Двоеточие. в самом задании подразумевается что должно стать диапазоном. Хотя по факту, трактовать можно и как просто отдельные элементы. --- Добавлено --- ИТОГ: интересного и нетривиального решения пока не увидел. Короткого однострочника там, или используя какието неочевидные или редкие элементы алгоритмов или самих ЯП. а хотелось бы. для саморазвития.
@runcore, надо было стараться ну и никто не ограничен по срокам, вдруг кто-то ещё забредёт. сам формат темы мне кажется перспективным.