A little nitpicky, but you only need to run &block on each element once, not twice: find list.select(&block) as var, and then return as the second element all elements in list and not in var. If &block is expensive, it might be desirable not to run it twice.
I saw some floats provided, so I chose to reject strings rather than select integers.
You could have used Kernerl.max/2 ( https://hexdocs.pm/elixir/Kernel.html#max/2 ) for a performance boost :D
A little nitpicky, but you only need to run &block on each element once, not twice: find list.select(&block) as var, and then return as the second element all elements in list and not in var. If &block is expensive, it might be desirable not to run it twice.
Clean and readable solution
I'd assume that when we remove all the strings, the only things left are the integers.
Technically wrong, as the specs said: "remove all the strings". The tests are not good enough to catch that though.
How does \1 work? I've tried \0 and received [], tried \2 and received invalid backref number/name: /(.)\2/. Why \1 return duplicates?