Skip to content

Commit 8054846

Browse files
committed
Tidy
1 parent 1fa0413 commit 8054846

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

src/main/scala/AdventOfCode2022/Day20.scala

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,17 @@ object Day20:
66
def parse(input: Seq[Int], key: Long): Seq[Node] =
77
val nodes = input.map(n => Node(n * key, null, null))
88
nodes.zipWithIndex.foreach { (node, i) =>
9-
node.prev = nodes(if i > 0 then i - 1 else input.size - 1)
10-
node.next = nodes(if i + 1 < input.size then i + 1 else 0)
9+
node.prev = nodes((i - 1 + nodes.size) % nodes.size)
10+
node.next = nodes((i + 1) % nodes.size)
1111
}
1212
nodes
1313

1414
def mix(nodes: Seq[Node]): Unit =
1515
for node <- nodes do
16-
val move = (node.value % (nodes.size - 1)).toInt
17-
for _ <- 1 to move.abs do
18-
val (a, b, c, d) =
19-
if (move > 0) (node.prev, node, node.next, node.next.next)
20-
else (node.prev.prev, node.prev, node, node.next)
16+
val remainder = (node.value % (nodes.size - 1)).toInt
17+
val move = if remainder >= 0 then remainder else remainder + nodes.size - 1
18+
for _ <- 1 to move do
19+
val (a, b, c, d) = (node.prev, node, node.next, node.next.next)
2120
a.next = c
2221
b.prev = c
2322
b.next = d
@@ -27,12 +26,13 @@ object Day20:
2726
end for
2827
end for
2928

29+
def skip(start: Node): Node = Iterator.iterate(start)(_.next).drop(1000).next()
30+
3031
def decrypt(input: Seq[Int], key: Long, rounds: Int): Long =
3132
val nodes = parse(input, key)
3233
for _ <- 1 to rounds do mix(nodes)
33-
val zero = nodes.find(_.value == 0).get
34-
def next(start: Node): Node = Iterator.iterate(start)(_.next).drop(1000).next()
35-
Iterator.iterate(zero)(next).drop(1).take(3).map(_.value).sum
34+
val start = nodes.find(_.value == 0).get
35+
Iterator.iterate(start)(skip).drop(1).take(3).map(_.value).sum
3636

3737
def part1(input: Seq[Int]): Long = decrypt(input, 1, 1)
3838

0 commit comments

Comments
 (0)