in reply to Re^2: alternatives to if and series of elsif
in thread alternatives to if and series of elsif
Because my original version of the algorithm was wrong, that's why! :) I've fixed it. I don't know if it is any clearer. The basic idea is that the tests for points and quota are not independent; they follow the form:
for some integer 0 < X < 10. One can eliminate the redundancy between these two tests. Algebraically, the above is equivalent to$points > 2000*X && $quota < 15+X
...which can be further reduced to$points/2000 > X && X > $quota-15
...except that there are edge cases (basically, X must be an integer strictly between 0 and 10) which make the algorithm a bit more complex.$points/2000 + 15 > $quota
Specifically, the last pair of inequalities can be written as
but since X is an integer, we can writeceil( $points/2000 ) > X && X > $quota - 15
Now we can eliminate the X:ceil( $points/2000 ) - 1 >= X && X > $quota - 15
This manipulation takes care of enforcing the constraint that X must be an integer.( ceil( $points/2000 ) - 1 ) + 15 > $quota
Lastly, to take care of the limits on X, we use min and max. The final test is then:
max( min( 24, ( ceil( $points/2000 ) - 1 ) + 15 ), 15 ) > $quota
the lowliest monk
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: alternatives to if and series of elsif
by kiat (Vicar) on Jul 03, 2005 at 15:56 UTC |