A friend of mine runs a pharmacy.   He has a specialized function in his Dispensary application which receives a decimal value of currency and replaces it to a standard value.   This value is regulated by a government department.



Task

Given a floating point value between   0.00   and   1.00,   rescale according to the following table:

>=  0.00  <  0.06  :=  0.10
>=  0.06  <  0.11  :=  0.18
>=  0.11  <  0.16  :=  0.26
>=  0.16  <  0.21  :=  0.32
>=  0.21  <  0.26  :=  0.38
>=  0.26  <  0.31  :=  0.44
>=  0.31  <  0.36  :=  0.50
>=  0.36  <  0.41  :=  0.54
>=  0.41  <  0.46  :=  0.58
>=  0.46  <  0.51  :=  0.62
>=  0.51  <  0.56  :=  0.66
>=  0.56  <  0.61  :=  0.70
>=  0.61  <  0.66  :=  0.74
>=  0.66  <  0.71  :=  0.78
>=  0.71  <  0.76  :=  0.82
>=  0.76  <  0.81  :=  0.86
>=  0.81  <  0.86  :=  0.90
>=  0.86  <  0.91  :=  0.94
>=  0.91  <  0.96  :=  0.98
>=  0.96  <  1.01  :=  1.00



 
record Bounds(low,high,new)
 
# rescale given value according to a list of bounds
procedure rescale (i, bounds)
  every bound := !bounds do 
    if bound.low <= i < bound.high
      then return bound.new
  return fail # could not find i in bounds
end
 
procedure main ()
  bounds := [
    Bounds(0.00, 0.06, 0.10),
    Bounds(0.06, 0.11, 0.18),
    Bounds(0.11, 0.16, 0.26),
    Bounds(0.16, 0.21, 0.32),
    Bounds(0.21, 0.26, 0.38),
    Bounds(0.26, 0.31, 0.44),
    Bounds(0.31, 0.36, 0.50),
    Bounds(0.36, 0.41, 0.54),
    Bounds(0.41, 0.46, 0.58),
    Bounds(0.46, 0.51, 0.62),
    Bounds(0.51, 0.56, 0.66),
    Bounds(0.56, 0.61, 0.70),
    Bounds(0.61, 0.66, 0.74),
    Bounds(0.66, 0.71, 0.78),
    Bounds(0.71, 0.76, 0.82),
    Bounds(0.76, 0.81, 0.86),
    Bounds(0.81, 0.86, 0.90),
    Bounds(0.86, 0.91, 0.94),
    Bounds(0.91, 0.96, 0.98),
    Bounds(0.96, 1.01, 1.00)
  ]
 
  # test the procedure
  every i := 0.00 to 1.00 by 0.1 do {
    write (i || " rescaled is " || rescale(i, bounds))
  }
end
 