day 10: knot
This commit is contained in:
parent
e22fddcde7
commit
ba23247555
1
10dec/input_test
Normal file
1
10dec/input_test
Normal file
@ -0,0 +1 @@
|
||||
3,4,1,5
|
76
10dec/main.go
Normal file
76
10dec/main.go
Normal file
@ -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
|
||||
}
|
Loading…
Reference in New Issue
Block a user