solve_2.go 1.1 KB

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