Guest User

Untitled

a guest
Dec 13th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.07 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "fmt"
  6. "os"
  7. "sort"
  8. "strings"
  9. )
  10.  
  11. type cart struct {
  12. x, y int
  13. state int // 0 = turn left, 1 = go straight, 2 = go right
  14. on byte
  15. cart byte
  16. }
  17.  
  18. func main() {
  19. f, _ := os.Open("input")
  20. defer f.Close()
  21. scan := bufio.NewScanner(f)
  22. tracks := make([]string, 0)
  23. carts := make([]cart, 0)
  24. for scan.Scan() {
  25. track := scan.Text()
  26. for i := range track {
  27. if strings.ContainsAny(string(track[i]), "^v") {
  28. carts = append(carts, cart{i, len(tracks), 0, '|', track[i]})
  29. } else if strings.ContainsAny(string(track[i]), "<>") {
  30. carts = append(carts, cart{i, len(tracks), 0, '-', track[i]})
  31. }
  32. }
  33. tracks = append(tracks, track)
  34. }
  35. for /*a := 0; a < 3; a++*/ {
  36. /*for _, track := range tracks {
  37. fmt.Println(track)
  38. }*/
  39. sort.Slice(carts, func(i, j int) bool {
  40. return carts[i].y < carts[j].y || carts[i].y == carts[j].y && carts[i].x < carts[j].x
  41. })
  42. for c := range carts {
  43. tracks[carts[c].y] = tracks[carts[c].y][:carts[c].x] + string(carts[c].on) + tracks[carts[c].y][carts[c].x+1:]
  44. switch carts[c].cart {
  45. case 'v':
  46. carts[c].y++
  47. case '<':
  48. carts[c].x--
  49. case '>':
  50. carts[c].x++
  51. case '^':
  52. carts[c].y--
  53. }
  54. if strings.ContainsAny(string(tracks[carts[c].y][carts[c].x]), "^v<>") {
  55. fmt.Println("yeet:", carts[c].x, carts[c].y)
  56. return
  57. } else if strings.ContainsAny(string(tracks[carts[c].y][carts[c].x]), "-|") {
  58. carts[c].on = tracks[carts[c].y][carts[c].x]
  59. tracks[carts[c].y] = tracks[carts[c].y][:carts[c].x] + string(carts[c].cart) + tracks[carts[c].y][carts[c].x+1:]
  60. continue
  61. }
  62. carts[c].on = tracks[carts[c].y][carts[c].x]
  63. switch carts[c].cart {
  64. case 'v':
  65. if carts[c].on == '/' {
  66. carts[c].cart = '<'
  67. } else if carts[c].on == '\\' {
  68. carts[c].cart = '>'
  69. } else {
  70. //do stuff
  71. if carts[c].state == 0 {
  72. carts[c].cart = '>'
  73. } else if carts[c].state == 2 {
  74. carts[c].cart = '<'
  75. }
  76. carts[c].state = (carts[c].state + 1) % 3
  77. }
  78. case '<':
  79. if carts[c].on == '/' {
  80. carts[c].cart = 'v'
  81. } else if carts[c].on == '\\' {
  82. carts[c].cart = '^'
  83. } else {
  84. //do stuff
  85. if carts[c].state == 0 {
  86. carts[c].cart = 'v'
  87. } else if carts[c].state == 2 {
  88. carts[c].cart = '^'
  89. }
  90. carts[c].state = (carts[c].state + 1) % 3
  91. }
  92. case '>':
  93. if carts[c].on == '/' {
  94. carts[c].cart = '^'
  95. } else if carts[c].on == '\\' {
  96. carts[c].cart = 'v'
  97. } else {
  98. //do stuff
  99. if carts[c].state == 0 {
  100. carts[c].cart = '^'
  101. } else if carts[c].state == 2 {
  102. carts[c].cart = 'v'
  103. }
  104. carts[c].state = (carts[c].state + 1) % 3
  105. }
  106. case '^':
  107. if carts[c].on == '/' {
  108. carts[c].cart = '>'
  109. } else if carts[c].on == '\\' {
  110. carts[c].cart = '<'
  111. } else {
  112. //do stuff
  113. if carts[c].state == 0 {
  114. carts[c].cart = '<'
  115. } else if carts[c].state == 2 {
  116. carts[c].cart = '>'
  117. }
  118. carts[c].state = (carts[c].state + 1) % 3
  119. }
  120. }
  121. tracks[carts[c].y] = tracks[carts[c].y][:carts[c].x] + string(carts[c].cart) + tracks[carts[c].y][carts[c].x+1:]
  122. }
  123. }
  124. }
Add Comment
Please, Sign In to add comment