Were you also annoyed that Kotlin has .groupBy but not .frequencies?
Have you thought about looking into Sequence? You could make your pairs function lazily? Using List means you're materializing the entirety of your double for-loop right away.
The lack of frequencies didn't bother me - it's easy to add. And yes, I've been thinking for the rest of the day that I should use lazy sequences. In this case the execution time remains O(N²) but as you say the memory footprint becomes more like constant. Definitely a good practice when you can't find a better algorithm.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.