Golang
func part1() {
// file, _ := os.Open("sample.txt")
file, _ := os.Open("input.txt")
defer file.Close()
scanner := bufio.NewScanner(file)
n := 100
current := 50
pointingAt0 := 0
for scanner.Scan() {
line := scanner.Text()
num, _ := strconv.Atoi(line[1:])
if line[0] == 'L' {
current = ((current-num)%n + n) % n
} else {
current = (current + num) % n
}
if current == 0 {
pointingAt0++
}
}
fmt.Println(pointingAt0)
}
func part2() {
// file, _ := os.Open("sample.txt")
file, _ := os.Open("input.txt")
defer file.Close()
scanner := bufio.NewScanner(file)
n := 100
current := 50
pointingAt0 := 0
for scanner.Scan() {
line := scanner.Text()
num, _ := strconv.Atoi(line[1:])
rounds := num / n
pointingAt0 += rounds
num = num % n
new := -1
if line[0] == 'L' {
new = ((current-num)%n + n) % n
if current != 0 && (new > current || new == 0) {
pointingAt0++
}
} else {
new = (current + num) % n
if current != 0 && (new < current || new == 0) {
pointingAt0++
}
}
current = new
}
fmt.Println(pointingAt0)
}
First I tried to to part 2 with a very poor regex strategy and the performance was abysmal. Switched to plain substrings and boom, instant result.
Golang