«Разработчик должен определить лучший подход, основываясь на своем опыте и суждениях». - Вы скопировали и вставили это из спецификации, которую вам дали? :)
Вы просите «оптимальное» решение, но на вашем месте я бы стремился к «правильному и достаточно быстрому» решению. У вас есть контракт на выполнение, вы можете оставить асимптотику академикам.
В любом случае, ваш план по обновлению группы только тогда, когда игрок перемещает колышек, выглядит как хороший. Нам нужно запомнить все колышки, которые касаются резиновой ленты, и для каждого колышка мы должны помнить, на какой стороне резиновой ленты она находится (чтобы правильно нарисовать полосу).
Теперь предположим, что игрок перемещает колышек A с a на a '.
В качестве общего принципа следует иметь в виду, что даже если ваши временные отрезки короткие, а расстояние от a до a ' невелико, тем не менее, их может быть несколько вещи, которые случаются. Таким образом, вам нужно будет рассмотреть все события, которые могут произойти в этом временном сегменте, выбрать самое раннее такое событие, соответствующим образом обновить структуры данных, а затем перейти к оставшейся части временного сегмента.
Так что же там за события?
- Peg A "поднимает" группу. (Это происходит, если колышка A еще не было на полосе, а линия a – a ' пересекает одну из линий между колышками на полосе.)
- Пег А "опускает" группу. (Это происходит, если на полосе был колышек A с соседями B и C, а линия a – a ' пересекает линию B – C.)
- Пег А получает соседа по группе. (Это происходит, когда колышек A находится на полосе, B - сосед A, а треугольник a – a ' –B содержит еще один колышек C.)
- Peg A теряет соседа по группе. (Это происходит, когда колышек A находится на полосе, соседние колышки на полосе переходят в A-B-C, а колышек B находится в треугольнике a – a ' -C.)
Итак, вы должны определить все такие события; определить время, когда должно произойти каждое событие; сортировать события по порядку по времени; обрабатывать самое раннее событие (только); повторите для оставшейся части временного отрезка.
(Что делать, если два события происходят одновременно? Я оставлю это на ваше усмотрение.)
Отредактировано, чтобы добавить: сложность заключается в том, что колышек может появиться на более чем одном сегменте резиновой ленты (например, полоса может идти A-B-A-C-A). Но я думаю, что приведенный выше набросок алгоритма все еще работает.
Еще одна проблема заключается в том, что даже с небольшим количеством колышков вы можете произвольно изменять конфигурацию полосы. Например, предположим, что полоса растянута между колышками B и C. Теперь возьмите колышек A и переместите его в виде цифры 8 вокруг колышков B и C (по часовой стрелке вокруг B, против часовой стрелки вокруг C, скажем). Каждый раз, когда вокруг петли, колышек А подбирает еще пару кусочков группы. Вы не можете позволить, чтобы сложность конфигурации росла без ограничений, поэтому нужен какой-то способ не допустить выхода вещей из-под контроля. Я предлагаю наложить максимальный предел на длину полосы, чтобы любая попытка растянуть ее слишком сильно приводила к ее трещотке (конечно, до этого у вас будут предупреждающие знаки, например, полоса становится тоньше, меняется цвет, зловещие скрипучие звуки ).