From 6e90e2675d79c2d017f5645ef82c015f5b5cf287 Mon Sep 17 00:00:00 2001 From: RhiobeT Date: Tue, 20 Dec 2022 15:28:47 +0100 Subject: [PATCH] Improve day 20 --- day20/common/mixing.go | 36 ++++++------------------------------ 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/day20/common/mixing.go b/day20/common/mixing.go index 957ec4f..27c0e0d 100644 --- a/day20/common/mixing.go +++ b/day20/common/mixing.go @@ -13,42 +13,24 @@ type Arrangement struct { func (arrangement *Arrangement) Mix(number int) { newSequence := make([]int, len(arrangement.numbers)) - oldIndices := make([]int, 0, len(arrangement.numbers)) var newIndex int + currentIndices := make([]int, len(arrangement.numbers)) for i := range arrangement.numbers { - oldIndices = append(oldIndices, i) + currentIndices[i] = i newSequence[i] = arrangement.numbers[i] } for i := 0; i < number; i++ { - currentIndices := make([]int, len(oldIndices)) - for j := range oldIndices { - currentIndices[j] = oldIndices[j] - } - - for j := 0; j < len(oldIndices); j++ { + for j := 0; j < len(currentIndices); j++ { offset := currentIndices[j] currentNumber := arrangement.numbers[j] newIndex = offset + currentNumber newIndex = (newIndex % (len(newSequence) - 1) + len(newSequence) - 1) % (len(newSequence) - 1) - if offset == 0 { - newSequence = newSequence[1:] - } else if offset == len(newSequence) - 1 { - newSequence = newSequence[:len(newSequence) - 1] - } else { - newSequence = append(newSequence[:offset], newSequence[offset + 1:]...) - } - - if newIndex == 0 { - newSequence = append([]int{currentNumber}, newSequence...) - } else if newIndex == len(newSequence) { - newSequence = append(newSequence, currentNumber) - } else { - newSequence = append(newSequence[:newIndex+1], newSequence[newIndex:]...) - newSequence[newIndex] = currentNumber - } + newSequence = append(newSequence[:offset], newSequence[offset + 1:]...) + newSequence = append(newSequence[:newIndex+1], newSequence[newIndex:]...) + newSequence[newIndex] = currentNumber for i := range currentIndices { if newIndex <= currentIndices[i] && currentIndices[i] < offset { @@ -58,12 +40,6 @@ func (arrangement *Arrangement) Mix(number int) { } } currentIndices[j] = newIndex - - offset %= len(newSequence) - } - - for i := range currentIndices { - oldIndices[i] = currentIndices[i] } }