Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private final int players = 17;//416;
- private final int points = 1104;//71975 * 100;
- private final LinkedList<Integer> marbles = new LinkedList<>();
- private final Map<Integer, Long> scores = new HashMap<>();
- @Override
- protected Result doParts() {
- int nextMarble = 0;
- int turn = 0;
- marbles.add(nextMarble++);
- ListIterator<Integer> iter = marbles.listIterator();
- iter.next();
- while (nextMarble <= points) {
- if (nextMarble % 23 == 0) {
- for (int i = 0; i < 7; i++) {
- if (!iter.hasPrevious()) {
- iter = marbles.listIterator(marbles.size());
- }
- iter.previous();
- }
- if (!iter.hasPrevious()) {
- iter = marbles.listIterator(marbles.size());
- }
- int removed = iter.previous();
- iter.remove();
- scores.merge(turn, (long) (nextMarble++ + removed), Long::sum);
- } else {
- if (!iter.hasNext()) {
- iter = marbles.listIterator();
- }
- iter.next();
- iter.add(nextMarble++);
- }
- turn = (turn + 1) % players;
- }
- return new Result(scores.values().stream().mapToLong(Long::longValue).max().getAsLong(), "");
- }
Advertisement
Add Comment
Please, Sign In to add comment