def f(a)
b = a.select(&:odd?).sort
c = a.select(&:even?).sort.reverse.map {|n| n / 2}
a.map {|n| n.odd? ? b.shift : c.shift}
end
p f [0, 9, 8, 4, 6, 5, 1, 2, 7, 3]
ZGVmIGYoYSkKICBiID0gYS5zZWxlY3QoJjpvZGQ/KS5zb3J0CiAgYyA9IGEuc2VsZWN0KCY6ZXZlbj8pLnNvcnQucmV2ZXJzZS5tYXAge3xufCBuIC8gMn0KICBhLm1hcCB7fG58IG4ub2RkPyA/IGIuc2hpZnQgOiBjLnNoaWZ0fQplbmQKcCBmIFswLCA5LCA4LCA0LCA2LCA1LCAxLCAyLCA3LCAzXQo=