/** * 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 0.01 NICKEL 0.05 DIME 0.1 QUARTER 0.25 HALF DOLLAR 0.5 ONE 1 TWO 2 FIVE 5 TEN 10 TWENTY 20 FIFTY 50 ONE HUNDRED 100
* 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 - inputs; 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(","))); } } }