Map range

func map_range(a, b, x) {
    var (a1, a2, b1, b2) = (a.bounds, b.bounds)
    x-a1 * b2-b1 / a2-a1 + b1
}

var a = 0..10
var b = -1..0

a.each { |x|
    say "#{x} maps to #{map_range(a, b, x)}"
}

Output:

0 maps to -1
1 maps to -0.9
2 maps to -0.8
3 maps to -0.7
4 maps to -0.6
5 maps to -0.5
6 maps to -0.4
7 maps to -0.3
8 maps to -0.2
9 maps to -0.1
10 maps to 0