Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bufio"
- "fmt"
- "os"
- "sort"
- "strings"
- )
- type cart struct {
- x, y int
- state int // 0 = turn left, 1 = go straight, 2 = go right
- on byte
- cart byte
- }
- func main() {
- f, _ := os.Open("input")
- defer f.Close()
- scan := bufio.NewScanner(f)
- tracks := make([]string, 0)
- carts := make([]cart, 0)
- for scan.Scan() {
- track := scan.Text()
- for i := range track {
- if strings.ContainsAny(string(track[i]), "^v") {
- carts = append(carts, cart{i, len(tracks), 0, '|', track[i]})
- } else if strings.ContainsAny(string(track[i]), "<>") {
- carts = append(carts, cart{i, len(tracks), 0, '-', track[i]})
- }
- }
- tracks = append(tracks, track)
- }
- for /*a := 0; a < 3; a++*/ {
- /*for _, track := range tracks {
- fmt.Println(track)
- }*/
- sort.Slice(carts, func(i, j int) bool {
- return carts[i].y < carts[j].y || carts[i].y == carts[j].y && carts[i].x < carts[j].x
- })
- for c := range carts {
- tracks[carts[c].y] = tracks[carts[c].y][:carts[c].x] + string(carts[c].on) + tracks[carts[c].y][carts[c].x+1:]
- switch carts[c].cart {
- case 'v':
- carts[c].y++
- case '<':
- carts[c].x--
- case '>':
- carts[c].x++
- case '^':
- carts[c].y--
- }
- if strings.ContainsAny(string(tracks[carts[c].y][carts[c].x]), "^v<>") {
- fmt.Println("yeet:", carts[c].x, carts[c].y)
- return
- } else if strings.ContainsAny(string(tracks[carts[c].y][carts[c].x]), "-|") {
- carts[c].on = tracks[carts[c].y][carts[c].x]
- tracks[carts[c].y] = tracks[carts[c].y][:carts[c].x] + string(carts[c].cart) + tracks[carts[c].y][carts[c].x+1:]
- continue
- }
- carts[c].on = tracks[carts[c].y][carts[c].x]
- switch carts[c].cart {
- case 'v':
- if carts[c].on == '/' {
- carts[c].cart = '<'
- } else if carts[c].on == '\\' {
- carts[c].cart = '>'
- } else {
- //do stuff
- if carts[c].state == 0 {
- carts[c].cart = '>'
- } else if carts[c].state == 2 {
- carts[c].cart = '<'
- }
- carts[c].state = (carts[c].state + 1) % 3
- }
- case '<':
- if carts[c].on == '/' {
- carts[c].cart = 'v'
- } else if carts[c].on == '\\' {
- carts[c].cart = '^'
- } else {
- //do stuff
- if carts[c].state == 0 {
- carts[c].cart = 'v'
- } else if carts[c].state == 2 {
- carts[c].cart = '^'
- }
- carts[c].state = (carts[c].state + 1) % 3
- }
- case '>':
- if carts[c].on == '/' {
- carts[c].cart = '^'
- } else if carts[c].on == '\\' {
- carts[c].cart = 'v'
- } else {
- //do stuff
- if carts[c].state == 0 {
- carts[c].cart = '^'
- } else if carts[c].state == 2 {
- carts[c].cart = 'v'
- }
- carts[c].state = (carts[c].state + 1) % 3
- }
- case '^':
- if carts[c].on == '/' {
- carts[c].cart = '>'
- } else if carts[c].on == '\\' {
- carts[c].cart = '<'
- } else {
- //do stuff
- if carts[c].state == 0 {
- carts[c].cart = '<'
- } else if carts[c].state == 2 {
- carts[c].cart = '>'
- }
- carts[c].state = (carts[c].state + 1) % 3
- }
- }
- tracks[carts[c].y] = tracks[carts[c].y][:carts[c].x] + string(carts[c].cart) + tracks[carts[c].y][carts[c].x+1:]
- }
- }
- }
Add Comment
Please, Sign In to add comment