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