solve_2.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "log"
  6. "math"
  7. "os"
  8. "strconv"
  9. )
  10. func main() {
  11. nb_occ_zero, lock_num := 0, 50
  12. var direction, nb_ticks, prev_lock_num, nb_cycles int
  13. var instruction string
  14. f, _ := os.Open("1/input")
  15. defer f.Close()
  16. scanner := bufio.NewScanner(f)
  17. for scanner.Scan() {
  18. instruction = scanner.Text()
  19. switch instruction[0] {
  20. case 'L':
  21. direction = -1
  22. case 'R':
  23. direction = 1
  24. default:
  25. panic("unrecognized instruction")
  26. }
  27. nb_ticks, _ = strconv.Atoi(instruction[1:])
  28. prev_lock_num = lock_num
  29. lock_num, nb_cycles = (lock_num+direction*nb_ticks)%100, (direction*nb_ticks)/100
  30. if lock_num < 0 {
  31. lock_num += 100
  32. }
  33. nb_occ_zero += int(math.Abs(float64(nb_cycles)))
  34. if prev_lock_num == 0 {
  35. continue
  36. }
  37. if lock_num == 0 {
  38. nb_occ_zero++
  39. } else if direction == -1 && lock_num > prev_lock_num {
  40. nb_occ_zero++
  41. } else if direction == 1 && lock_num < prev_lock_num {
  42. nb_occ_zero++
  43. }
  44. }
  45. if err := scanner.Err(); err != nil {
  46. log.Fatal(err)
  47. }
  48. fmt.Println(nb_occ_zero)
  49. }