s/ \b(\w+) \s (?= \1\b ) //gx;давеча на УФО обсуждали такой код. сложно объяснять людям, почему этот код (из учебника кстати) отлично работает в тестах, и намертво вешает боевой сервер. Распарсить этот код просто - он находит и удаляет все повторяющиеся слова. Намного сложнее понять, почему он зависает. Для этого надо рыть гранит науки, а именно "Искусство программирования" Д.Кнута. И тут вы обнаружите, что Кнут НЕ решил эту задачу. Он сделал больше - свёл её к другой, уже решённой. Удивительно, но расчёт времени выполнения кода эквивалентен расчёту напряжений и токов в электрической сети. Формулы и правила точно такие же, и выведены Кирхгофом чуть-ли не в позапрошлом веке:
1) сумма токов входящих в узел цепи равен сумме исходящих.
2) сумма напряжений в контуре равна нулю (с учётом знаков).
В простых цепях правила очевидны (на лампочке включённой в сеть 220в напряжение == 220в. Ваш К.О.), в сложных они приводят к системе линейных уравнений, которые научился решать Гаусс (правда китайцы научились чуть раньше - 2000 лет назад).
Проанализировав данное уравнение методом Кнута-Кирхгофа-Гаусса-Китайцев мы узнаем, что время T=C*N*N*M (где C - константа, зависящая от железа, N ср. длинна строки, M число строк). Мы видим, что в тестах может быть строчек было и много, но они были короткие, а значит все наши тесты - коту под хвост. В реальности время намного сильнее зависит от длинны строки, и если длинна будет IRL в 1000 раз больше, то время будет больше в 1000000 раз, что и воспринимается юзером как "зависание". Как видим, тестирование не помогает нам, а помогает лишь матан.