Piotr Czajkowski 3 år sedan
förälder
incheckning
7338242e61
1 ändrade filer med 76 tillägg och 1 borttagningar
  1. 76 1
      day23/day23.go

+ 76 - 1
day23/day23.go

@@ -39,6 +39,81 @@ func minMax(sequence []int) (int, int) {
 	return min, max
 }
 
+func inSequence(value int, sequence []int) bool {
+	for _, item := range sequence {
+		if item == value {
+			return true
+		}
+	}
+
+	return false
+}
+
+func indexOf(value int, sequence []int) int {
+	for i, item := range sequence {
+		if item == value {
+			return i
+		}
+	}
+
+	return -1
+}
+
+func part1(sequence []int, min, max int) {
+	index := 0
+
+	for i := 0; i < 10; i++ {
+		pickup := sequence[index+1 : index+4]
+		var partialSequence []int
+		for j, item := range sequence {
+			if j > index && j < index+4 {
+				continue
+			}
+
+			partialSequence = append(partialSequence, item)
+		}
+
+		destination := sequence[index] - 1
+		fmt.Println(destination)
+		for {
+			if !inSequence(destination, pickup) {
+				break
+			}
+
+			destination--
+			if destination < min {
+				_, newDestination := minMax(partialSequence)
+				destination = newDestination
+				break
+			}
+		}
+
+		fmt.Println(destination)
+		destinationIndex := indexOf(destination, partialSequence)
+		if destinationIndex < 0 {
+			log.Fatalf("Wrong destinationIndex: %d", destinationIndex)
+		}
+
+		var newSequence []int
+		for j, item := range partialSequence {
+			newSequence = append(newSequence, item)
+
+			if j == destinationIndex {
+				for _, cup := range pickup {
+					newSequence = append(newSequence, cup)
+				}
+			}
+		}
+
+		sequence = newSequence
+		index++
+		if index < 0 {
+			index = 0
+		}
+		fmt.Println(sequence)
+	}
+}
+
 func main() {
 	if len(os.Args) < 2 {
 		log.Fatal("You need to specify a sequence!")
@@ -47,5 +122,5 @@ func main() {
 	sequence := processSequence(os.Args[1])
 	min, max := minMax(sequence)
 
-	fmt.Println(min, max)
+	part1(sequence, min, max)
 }