o_ignatov

Problem 2 – Letter Expression

Oct 15th, 2017
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.text.DecimalFormat;
  5. import java.util.ArrayDeque;
  6. import java.util.Arrays;
  7. import java.util.function.Predicate;
  8. import java.util.regex.Matcher;
  9. import java.util.regex.Pattern;
  10. import java.util.stream.Collectors;
  11.  
  12. public class LetterExpression {
  13. public static void main(String[] args) throws IOException {
  14. BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  15. //The correct regex should be: "([-]?[0-9]*\\.[0-9]+|[0-9]+)"
  16. String regX = "([-]?[0-9]+)";
  17. String input = reader.readLine();
  18. ArrayDeque<String> junkSymbols = new ArrayDeque<>(Arrays.asList(input.split(regX))
  19. .stream().filter(s -> !s.isEmpty())
  20. .collect(Collectors.toList()));
  21.  
  22. ArrayDeque<Double> nums = new ArrayDeque<>();
  23. Predicate<String> isEven = s -> s.length() % 2 == 0;
  24. Pattern pattern = Pattern.compile(regX);
  25. Matcher matcher = pattern.matcher(input);
  26.  
  27. while (matcher.find()){
  28. nums.add(Double.parseDouble(matcher.group()));
  29. }
  30.  
  31. double sum = nums.pop();
  32.  
  33. while (!nums.isEmpty()){
  34. if (isEven.test(junkSymbols.peek())){
  35. sum += nums.pop();
  36. }
  37. else {
  38. sum -= nums.pop();
  39. }
  40. junkSymbols.pop();
  41. }
  42. DecimalFormat f = new DecimalFormat("##.#######");
  43. System.out.println(f.format(sum));
  44. }
  45. }
Advertisement
Add Comment
Please, Sign In to add comment