import java.util.stream.Stream;
import java.util.stream.DoubleStream;
import java.util.Arrays;
import java.util.function.Function;
public class Main {
static final double[] percents = {0.10, 0.15, 0.25, 0.28, 0.33, 0.35};
static final double[] thresholds = {8350, 33950, 82250, 171550, 372950};
public static void main
(String[] args
) { double[] partialSums = Stream.iterate(0, n -> n + 1).limit(5).mapToDouble(
(i) -> thresholds[i] * (percents[i] - percents[i + 1])
).toArray();
Function
<Double, Double
> computeTax
= (income
) -> { int level
= (int)Arrays.
stream(thresholds
).
reduce(0,
(x, y
) -> x
+ new Boolean(income
> y
).
compareTo(false));
return Arrays.
stream(partialSums
).
limit(level
).
reduce(0,
(x, y
) -> x
+ y
) + income
* percents
[level
]; };
double tax = computeTax.apply(100000.0);
double controlValue = 8350 * 0.10 + (33950 - 8350) * 0.15 +
(82250 - 33950) * 0.25 + (100000 - 82250) * 0.28;
System.
out.
println("Tax is " + (int)(tax
* 100) / 100.0); System.
out.
println("Control value is " + (int)(controlValue
* 100) / 100.0); }
}
aW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Eb3VibGVTdHJlYW07CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwppbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkZ1bmN0aW9uOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgc3RhdGljIGZpbmFsIGRvdWJsZVtdIHBlcmNlbnRzICAgPSB7MC4xMCwgMC4xNSwgMC4yNSwgMC4yOCwgMC4zMywgMC4zNX07CiAgICBzdGF0aWMgZmluYWwgZG91YmxlW10gdGhyZXNob2xkcyA9IHs4MzUwLCAzMzk1MCwgODIyNTAsIDE3MTU1MCwgMzcyOTUwfTsKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgZG91YmxlW10gcGFydGlhbFN1bXMgPSBTdHJlYW0uaXRlcmF0ZSgwLCBuIC0+IG4gKyAxKS5saW1pdCg1KS5tYXBUb0RvdWJsZSgKICAgICAgICAgICAgKGkpIC0+IHRocmVzaG9sZHNbaV0gKiAocGVyY2VudHNbaV0gLSBwZXJjZW50c1tpICsgMV0pCiAgICAgICAgKS50b0FycmF5KCk7CgogICAgICAgIEZ1bmN0aW9uPERvdWJsZSwgRG91YmxlPiBjb21wdXRlVGF4ID0gKGluY29tZSkgLT4gewogICAgICAgICAgICBpbnQgbGV2ZWwgPSAoaW50KUFycmF5cy5zdHJlYW0odGhyZXNob2xkcykucmVkdWNlKDAsICh4LCB5KSAtPiB4ICsgbmV3IEJvb2xlYW4oaW5jb21lID4geSkuY29tcGFyZVRvKGZhbHNlKSk7CgogICAgICAgICAgICByZXR1cm4gQXJyYXlzLnN0cmVhbShwYXJ0aWFsU3VtcykubGltaXQobGV2ZWwpLnJlZHVjZSgwLCAoeCwgeSkgLT4geCArIHkpICsgaW5jb21lICogcGVyY2VudHNbbGV2ZWxdOwogICAgICAgIH07CgogICAgICAgIGRvdWJsZSB0YXggPSBjb21wdXRlVGF4LmFwcGx5KDEwMDAwMC4wKTsKICAgICAgICBkb3VibGUgY29udHJvbFZhbHVlID0gODM1MCAqIDAuMTAgKyAoMzM5NTAgLSA4MzUwKSAqIDAuMTUgKwogICAgICAgICAgICAoODIyNTAgLSAzMzk1MCkgKiAwLjI1ICsgKDEwMDAwMCAtIDgyMjUwKSAqIDAuMjg7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUYXggaXMgIiArIChpbnQpKHRheCAqIDEwMCkgLyAxMDAuMCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb250cm9sIHZhbHVlIGlzICIgKyAoaW50KShjb250cm9sVmFsdWUgKiAxMDApIC8gMTAwLjApOwogICAgfQp9Cg==