OCP "как правило" недостижимо, есть ситуации под которые можно утверждать что мол "100% не будет меняться" (потому что проще выкинуть и сделать новое если контракт надо менять)
Я последний раз больше полугода назад чинил эту функцию - потому что из-за полного перебора работала дольше 15 минут (лимит на лямбдах). Переделал на жадный алгоритм - и с данным бизнес-сценарием добавил юнит-тест - теперь за 46 секунд проходят все юниты (включая этот кейс)