Combine AoC Repos
This commit is contained in:
76
2015/day10/main.go
Normal file
76
2015/day10/main.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func printUsage() {
|
||||
fmt.Println("Usage: day10 <look-and-say> [iterations]")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
/* Pt 2 Result:
|
||||
Length of result: 5103798
|
||||
*/
|
||||
func main() {
|
||||
var debugMode bool
|
||||
|
||||
args := os.Args
|
||||
if len(args) < 2 {
|
||||
printUsage()
|
||||
}
|
||||
var lasString string
|
||||
lasString = args[1]
|
||||
|
||||
var iter int
|
||||
var err error
|
||||
if len(args) > 2 {
|
||||
if iter, err = strconv.Atoi(args[2]); err != nil {
|
||||
printUsage()
|
||||
}
|
||||
} else {
|
||||
iter = 40
|
||||
}
|
||||
if len(args) > 3 {
|
||||
if args[2] == "--debug" {
|
||||
debugMode = true
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Printf("Iterate %d times over %s\n", iter, lasString)
|
||||
for i := 0; i < iter; i++ {
|
||||
fmt.Print("O")
|
||||
if i%10 == 9 {
|
||||
fmt.Println(" " + strconv.Itoa(len(lasString)))
|
||||
}
|
||||
r := lookAndSay(lasString)
|
||||
if debugMode {
|
||||
fmt.Println(strconv.Itoa(i) + " >> " + r)
|
||||
}
|
||||
lasString = r
|
||||
}
|
||||
fmt.Println("\nLength of result: " + strconv.Itoa(len(lasString)))
|
||||
}
|
||||
|
||||
func lookAndSay(str string) string {
|
||||
numI := 1
|
||||
var ret string
|
||||
|
||||
strLen := len(str)
|
||||
|
||||
for i := range str {
|
||||
if strLen > i+1 {
|
||||
if str[i+1] != str[i] {
|
||||
ret += strconv.Itoa(numI) + string(str[i])
|
||||
numI = 0
|
||||
}
|
||||
} else {
|
||||
// Last char in string
|
||||
ret += strconv.Itoa(numI) + string(str[i])
|
||||
}
|
||||
numI++
|
||||
}
|
||||
return ret
|
||||
}
|
||||
Reference in New Issue
Block a user