Ты изначально выбрал правильный диагноз, что mapValues приводит к повторным вызовам, тебе не хватило буквально немного, чтобы вглядеться в пару строк внутри него. mapValues - это ошибка порожденная человеком, не нужно думать что там кругом сверх люди и никогда не ошибаются. Тяжела и не казиста жизнь простого программиста - поэтому такой навык сэкономит тебе в дальнейшем много нервов и времени.
Да, думал больше о том, как вообще описать этот алгоритм, надеялся, что метод просто сделает, что мне надо