fork download
  1. import java.io.StringReader;
  2. import java.util.ArrayDeque;
  3. import java.util.Deque;
  4. import java.util.Optional;
  5. import java.util.Scanner;
  6. import java.util.Spliterator;
  7. import java.util.Spliterators;
  8. import java.util.stream.Collectors;
  9. import java.util.stream.Stream;
  10. import java.util.stream.StreamSupport;
  11.  
  12. class Stacker {
  13.  
  14. private final Deque<Integer> stack = new ArrayDeque<>();
  15.  
  16. public Optional<Integer> processOperation(String op) {
  17. char opc = op.charAt(0);
  18. switch(opc) {
  19. case '1':
  20. int previous = stack.isEmpty() ? Integer.MIN_VALUE : stack.peek();
  21. int max = Math.max(previous, Integer.parseInt(op.substring(1).trim()));
  22. stack.push(max);
  23. return Optional.empty();
  24. case '2':
  25. if (stack.isEmpty()) {
  26. throw new IllegalStateException("Cannot pop empty stack");
  27. }
  28. stack.pop();
  29. return Optional.empty();
  30. case '3':
  31. if (stack.isEmpty()) {
  32. throw new IllegalStateException("Cannot max empty stack");
  33. }
  34. return Optional.of(stack.peek());
  35. default:
  36. throw new IllegalStateException("Unknown operation:" + op);
  37. }
  38. }
  39.  
  40.  
  41.  
  42. public static void main(String[] args) {
  43. String testdata = "10\n" +
  44. "1 97\n" +
  45. "2\n" +
  46. "1 20\n" +
  47. "2\n" +
  48. "1 26\n" +
  49. "1 20\n" +
  50. "2\n" +
  51. "3\n" +
  52. "1 91\n" +
  53. "3";
  54.  
  55. try (Scanner scanner = new Scanner(new StringReader(testdata))) {
  56. scanner.useDelimiter("\\s*\\n");
  57. int count = Integer.parseInt(scanner.next());
  58. // convert STDIN lines to a stream
  59. Stream<String> commands = StreamSupport.stream(Spliterators.spliterator(scanner, count, Spliterator.ORDERED), false);
  60. // process the operations:
  61. Stacker stacker = new Stacker();
  62. String report = commands.map(stacker::processOperation)
  63. .filter(Optional::isPresent)
  64. .map(opt -> String.valueOf(opt.get()))
  65. .collect(Collectors.joining("\n"));
  66. System.out.println(report);
  67. }
  68. }
  69.  
  70. }
  71.  
Success #stdin #stdout 0.14s 4386816KB
stdin
Standard input is empty
stdout
26
91