/**
* Cash Register
*
* Description
* The goal of this challenge is to design a cash register program. You will be
* given two decimal numbers. The first is the purchase price (PP) of the item.
* The second is the cash (CH) given by the customer. Your register currently has
* the following bills/coins within it:
*
* PENNY | .01 |
* NICKEL | .05 |
* DIME | .10 |
* QUARTER | .25 |
* HALF DOLLAR | .50 |
* ONE | 1.00 |
* TWO | 2.00 |
* FIVE | 5.00 |
* TEN | 10.00 |
* TWENTY | 20.00 |
* FIFTY | 50.00 |
* ONE HUNDRED | 100.00 |
*
* The aim of the program is to calculate the change that has to be returned to
* the customer.
*
* Input
* Your program should read lines of text from standard input. Each line contains
* two numbers which are separated by a semicolon. The first is the Purchase price (PP)
* and the second is the cash(CH) given by the customer.
*
* Output
* For each line of input print a single line to standard output which is the change
* to be returned to the customer. In case the CH < PP, print out ERROR. If CH == PP,
* print out ZERO. For all other cases print the amount that needs to be returned,
* in terms of the currency values provided. The output should be alphabetically
* sorted.
*
* Example
* 15.94;16.00 => NICKEL,PENNY
* 17;16 => ERROR
* 35;35 => ZERO
* 45;50 => FIVE
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Set;
import java.util.SortedMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.nio.charset.StandardCharsets;
public class Main {
private static final SortedMap coins;
static {
coins = new java.util.TreeMap( (d1,d2) -> (d1>d2)? -1 : (d1 changes = new java.util.HashSet<>();
double remains = inputs[1] - inputs[0];
for (Double coin : coins.keySet()) {
double newRemains = remains % coin;
if (newRemains != remains) {
remains = newRemains;
changes.add(coins.get(coin));
}
}
System.out.println(changes.stream().sorted().collect(Collectors.joining(",")));
}
}
}