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



:- module price.
:- interface.
:- import_module int.
:- type price == int.
:- func standard(price) = price.
 
:- implementation.
:- import_module require, list.
 
standard(P) = SP :-
        require(P >= 0, "P must be positive"),
        Cents = P `mod` 100,
        P + adjust(Cents) = SP.
 
:- func adjust(int) = int.
adjust(Cents) = adjust(Cents, rules).
 
:- func adjust(int, list(price_rule)) = int.
adjust(_, []) = unexpected("price", "adjust/2", "exhausted rules").
adjust(N, [rule(Low, High, To)|T]) = R :-
        ( N >= Low, N < High -> To - N = R ; adjust(N, T) = R ).
 
:- type price_rule ---> rule(int, int, int).
:- func rules = list(price_rule).
rules = [rule(00, 06, 10),
        rule(06, 11, 18),
        rule(11, 16, 26),
        rule(16, 21, 32),
        rule(21, 26, 38),
        rule(26, 31, 44),
        rule(31, 36, 50),
        rule(36, 41, 54),
        rule(41, 46, 58),
        rule(46, 51, 62),
        rule(51, 56, 66),
        rule(56, 61, 70),
        rule(61, 66, 74),
        rule(66, 71, 78),
        rule(71, 76, 82),
        rule(76, 81, 86),
        rule(81, 86, 90),
        rule(86, 91, 94),
        rule(91, 96, 98),
        rule(96, 101, 100)].