|
|
@@ -0,0 +1,61 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "bufio"
|
|
|
+ "fmt"
|
|
|
+ "log"
|
|
|
+ "math"
|
|
|
+ "os"
|
|
|
+ "strconv"
|
|
|
+)
|
|
|
+
|
|
|
+func main() {
|
|
|
+ nb_occ_zero, lock_num := 0, 50
|
|
|
+ var direction, nb_ticks, prev_lock_num, nb_cycles int
|
|
|
+ var instruction string
|
|
|
+
|
|
|
+ f, _ := os.Open("1/input")
|
|
|
+ defer f.Close()
|
|
|
+
|
|
|
+ scanner := bufio.NewScanner(f)
|
|
|
+ for scanner.Scan() {
|
|
|
+ instruction = scanner.Text()
|
|
|
+ switch instruction[0] {
|
|
|
+ case 'L':
|
|
|
+ direction = -1
|
|
|
+ case 'R':
|
|
|
+ direction = 1
|
|
|
+ default:
|
|
|
+ panic("unrecognized instruction")
|
|
|
+ }
|
|
|
+
|
|
|
+ nb_ticks, _ = strconv.Atoi(instruction[1:])
|
|
|
+ prev_lock_num = lock_num
|
|
|
+
|
|
|
+ lock_num, nb_cycles = (lock_num+direction*nb_ticks)%100, (direction*nb_ticks)/100
|
|
|
+ if lock_num < 0 {
|
|
|
+ lock_num += 100
|
|
|
+ }
|
|
|
+
|
|
|
+ nb_occ_zero += int(math.Abs(float64(nb_cycles)))
|
|
|
+
|
|
|
+ if prev_lock_num == 0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ if lock_num == 0 {
|
|
|
+ nb_occ_zero++
|
|
|
+ } else if direction == -1 && lock_num > prev_lock_num {
|
|
|
+ nb_occ_zero++
|
|
|
+ } else if direction == 1 && lock_num < prev_lock_num {
|
|
|
+ nb_occ_zero++
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := scanner.Err(); err != nil {
|
|
|
+ log.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ fmt.Println(nb_occ_zero)
|
|
|
+}
|