Browse Source

Able to calculate new index

Piotr Czajkowski 1 year ago
parent
commit
d6ad721dd3
1 changed files with 38 additions and 1 deletions
  1. 38 1
      20/code.go

+ 38 - 1
20/code.go

@@ -29,6 +29,43 @@ func readInput(file *os.File) []int {
 	return numbers
 }
 
+func indexOf(numbers []int, number int) int {
+	for i := range numbers {
+		if numbers[i] == number {
+			return i
+		}
+	}
+
+	return -1
+}
+
+func establishNewIndex(size int, current int, value int) int {
+	delta := current + value
+	if delta < 0 {
+		delta = 0 - delta
+		rest := delta % size
+
+		return size - 1 - rest
+	}
+
+	return delta % size
+}
+
+func mix(numbers []int) []int {
+	size := len(numbers)
+	mixed := make([]int, size)
+	copy(mixed, numbers)
+
+	for i := range numbers {
+		currentIndex := indexOf(mixed, numbers[i])
+		newIndex := establishNewIndex(size, i, numbers[i])
+
+		fmt.Println(currentIndex, newIndex, numbers[i])
+	}
+
+	return mixed
+}
+
 func main() {
 	if len(os.Args) < 2 {
 		log.Fatal("You need to specify a file!")
@@ -42,5 +79,5 @@ func main() {
 	}
 
 	numbers := readInput(file)
-	fmt.Println(numbers)
+	fmt.Println(mix(numbers))
 }