Improve day 20

This commit is contained in:
2022-12-20 15:28:47 +01:00
parent bf9e5ce9c3
commit 6e90e2675d

View File

@@ -13,42 +13,24 @@ type Arrangement struct {
func (arrangement *Arrangement) Mix(number int) { func (arrangement *Arrangement) Mix(number int) {
newSequence := make([]int, len(arrangement.numbers)) newSequence := make([]int, len(arrangement.numbers))
oldIndices := make([]int, 0, len(arrangement.numbers))
var newIndex int var newIndex int
currentIndices := make([]int, len(arrangement.numbers))
for i := range arrangement.numbers { for i := range arrangement.numbers {
oldIndices = append(oldIndices, i) currentIndices[i] = i
newSequence[i] = arrangement.numbers[i] newSequence[i] = arrangement.numbers[i]
} }
for i := 0; i < number; i++ { for i := 0; i < number; i++ {
currentIndices := make([]int, len(oldIndices)) for j := 0; j < len(currentIndices); j++ {
for j := range oldIndices {
currentIndices[j] = oldIndices[j]
}
for j := 0; j < len(oldIndices); j++ {
offset := currentIndices[j] offset := currentIndices[j]
currentNumber := arrangement.numbers[j] currentNumber := arrangement.numbers[j]
newIndex = offset + currentNumber newIndex = offset + currentNumber
newIndex = (newIndex % (len(newSequence) - 1) + len(newSequence) - 1) % (len(newSequence) - 1) 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:]...) 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 = append(newSequence[:newIndex+1], newSequence[newIndex:]...)
newSequence[newIndex] = currentNumber newSequence[newIndex] = currentNumber
}
for i := range currentIndices { for i := range currentIndices {
if newIndex <= currentIndices[i] && currentIndices[i] < offset { if newIndex <= currentIndices[i] && currentIndices[i] < offset {
@@ -58,12 +40,6 @@ func (arrangement *Arrangement) Mix(number int) {
} }
} }
currentIndices[j] = newIndex currentIndices[j] = newIndex
offset %= len(newSequence)
}
for i := range currentIndices {
oldIndices[i] = currentIndices[i]
} }
} }