tterrag1098

Untitled

Dec 9th, 2018
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. private final int players = 17;//416;
  2. private final int points = 1104;//71975 * 100;
  3.  
  4. private final LinkedList<Integer> marbles = new LinkedList<>();
  5. private final Map<Integer, Long> scores = new HashMap<>();
  6.  
  7. @Override
  8. protected Result doParts() {
  9. int nextMarble = 0;
  10. int turn = 0;
  11. marbles.add(nextMarble++);
  12. ListIterator<Integer> iter = marbles.listIterator();
  13. iter.next();
  14. while (nextMarble <= points) {
  15. if (nextMarble % 23 == 0) {
  16. for (int i = 0; i < 7; i++) {
  17. if (!iter.hasPrevious()) {
  18. iter = marbles.listIterator(marbles.size());
  19. }
  20. iter.previous();
  21. }
  22. if (!iter.hasPrevious()) {
  23. iter = marbles.listIterator(marbles.size());
  24. }
  25. int removed = iter.previous();
  26. iter.remove();
  27. scores.merge(turn, (long) (nextMarble++ + removed), Long::sum);
  28. } else {
  29. if (!iter.hasNext()) {
  30. iter = marbles.listIterator();
  31. }
  32. iter.next();
  33. iter.add(nextMarble++);
  34. }
  35. turn = (turn + 1) % players;
  36. }
  37.  
  38. return new Result(scores.values().stream().mapToLong(Long::longValue).max().getAsLong(), "");
  39. }
Advertisement
Add Comment
Please, Sign In to add comment