diff --git a/go/asteroid-collision.go b/go/asteroid-collision.go new file mode 100644 index 0000000..d2edd03 --- /dev/null +++ b/go/asteroid-collision.go @@ -0,0 +1,33 @@ +package main + +import as "github.com/emirpasic/gods/v2/stacks/arraystack" + +func asteroidCollision(asteroids []int) []int { + st := as.New[int]() + + for _, asteroid := range asteroids { + alive := true + + for top, ok := st.Peek(); ok && asteroid < 0 && top > 0; top, ok = st.Peek() { + if top < -asteroid { + st.Pop() + continue + } else if top == -asteroid { + st.Pop() + } + + alive = false + break + } + + if alive { + st.Push(asteroid) + } + } + + result := make([]int, st.Size()) + for i := st.Size() - 1; i >= 0; i-- { + result[i], _ = st.Pop() + } + return result +}