From ba23247555a67d319ef074d9bb473a51a535511f Mon Sep 17 00:00:00 2001 From: Meutel Date: Fri, 22 Dec 2017 23:14:25 +0100 Subject: [PATCH] day 10: knot --- 10dec/input_test | 1 + 10dec/main.go | 76 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 10dec/input_test create mode 100644 10dec/main.go diff --git a/10dec/input_test b/10dec/input_test new file mode 100644 index 0000000..cf15122 --- /dev/null +++ b/10dec/input_test @@ -0,0 +1 @@ +3,4,1,5 diff --git a/10dec/main.go b/10dec/main.go new file mode 100644 index 0000000..e6d36aa --- /dev/null +++ b/10dec/main.go @@ -0,0 +1,76 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strconv" + "strings" +) + +const ( + //SZ = 5 + SZ = 256 +) + +var ( + list [SZ]int + lengths []int + pos int + skip int +) + +func main() { + lengths = parseLengths() + //fmt.Println(lengths) + for i, _ := range list { + list[i] = i + } + for _, l := range lengths { + //fmt.Println(list, pos, skip, l) + reverse(l) + pos = (pos + l + skip) % SZ + skip++ + } + //fmt.Println(list) + + fmt.Println("Result:", list[0]*list[1]) +} + +func reverse(l int) { + if l < 2 { + return + } + rev := make([]int, l, l) + to := (pos + l) % SZ + if to > pos { + for i, n := range list[pos:to] { + rev[l-i-1] = n + } + } else { + var i, j, n int + for i, n = range list[pos:SZ] { + rev[l-i-1] = n + } + //fmt.Println(" ", rev) + for j, n = range list[0:to] { + rev[l-j-i-2] = n + } + } + + //fmt.Println(" ", rev) + for i, n := range rev { + list[(pos+i)%SZ] = n + } +} + +func parseLengths() []int { + l := make([]int, 0, 16) + sc := bufio.NewScanner(os.Stdin) + sc.Scan() + for _, num := range strings.Split(sc.Text(), ",") { + n, _ := strconv.Atoi(num) + l = append(l, n) + } + return l +}