Moving to more powerful system
This commit is contained in:
parent
106b099f68
commit
948d809c4f
Binary file not shown.
86
2017/day16/day16.go
Normal file
86
2017/day16/day16.go
Normal file
@ -0,0 +1,86 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var progs string
|
||||
length := 16
|
||||
iters := 1000000000
|
||||
if len(os.Args) > 1 {
|
||||
length = Atoi(os.Args[1])
|
||||
}
|
||||
for i := 0; i < length; i++ {
|
||||
progs += string('a' + i)
|
||||
}
|
||||
inp := StdinToString()
|
||||
moves := strings.Split(inp, ",")
|
||||
for i := 0; i < iters; i++ {
|
||||
if i%(iters/100) == 0 {
|
||||
// Clear the screen
|
||||
fmt.Print("\033[H\033[2J")
|
||||
// Percent Complete
|
||||
fResult := ((float64(i) / float64(iters)) * 100)
|
||||
sResult2 := strconv.FormatFloat(fResult, 'f', 2, 64)
|
||||
fmt.Println(sResult2)
|
||||
}
|
||||
progs = doDance(progs, moves)
|
||||
}
|
||||
fmt.Println(progs)
|
||||
}
|
||||
|
||||
func doDance(progs string, moves []string) string {
|
||||
for _, v := range moves {
|
||||
switch v[0] {
|
||||
case 's':
|
||||
progs = Spin(progs, Atoi(v[1:]))
|
||||
case 'p':
|
||||
pts := strings.Split(v[1:], "/")
|
||||
progs = Partner(progs, pts[0], pts[1])
|
||||
case 'x':
|
||||
pts := strings.Split(v[1:], "/")
|
||||
progs = Exchange(progs, Atoi(pts[0]), Atoi(pts[1]))
|
||||
}
|
||||
}
|
||||
return progs
|
||||
}
|
||||
|
||||
func Spin(progs string, cnt int) string {
|
||||
stSpin := len(progs) - cnt
|
||||
return progs[stSpin:] + progs[:stSpin]
|
||||
}
|
||||
|
||||
func Exchange(progs string, i1, i2 int) string {
|
||||
if i1 > i2 {
|
||||
i1, i2 = i2, i1
|
||||
}
|
||||
return progs[:i1] + string(progs[i2]) + progs[i1+1:i2] + string(progs[i1]) + progs[i2+1:]
|
||||
}
|
||||
|
||||
func Partner(progs string, p1, p2 string) string {
|
||||
return Exchange(progs, strings.Index(progs, p1), strings.Index(progs, p2))
|
||||
}
|
||||
|
||||
func StdinToString() string {
|
||||
var input string
|
||||
scanner := bufio.NewScanner(os.Stdin)
|
||||
for scanner.Scan() {
|
||||
input = scanner.Text()
|
||||
}
|
||||
return input
|
||||
}
|
||||
|
||||
func Atoi(i string) int {
|
||||
var ret int
|
||||
var err error
|
||||
if ret, err = strconv.Atoi(i); err != nil {
|
||||
log.Fatal("Invalid Atoi")
|
||||
}
|
||||
return ret
|
||||
}
|
1
2017/day16/input
Normal file
1
2017/day16/input
Normal file
File diff suppressed because one or more lines are too long
1
2017/day16/testinput
Normal file
1
2017/day16/testinput
Normal file
@ -0,0 +1 @@
|
||||
s1,x3/4,pe/b
|
Loading…
Reference in New Issue
Block a user