...sort of. It works, but it takes a lot longer than I'd like on real input. I optimized it with some memoization, but it's still far too slow to be the intended solution. I finished my actual input in over 3 minutes on my macbook m1 (...with the right answer, at least). This solution as-is isn't really going to fly for part 2, though, so I'm probably going to have to re-do it either way.
28 lines
522 B
Go
28 lines
522 B
Go
package utilities
|
|
|
|
func MapKeys[T comparable, U any](m map[T]U) []T {
|
|
r := make([]T, 0, len(m))
|
|
for k := range m {
|
|
r = append(r, k)
|
|
}
|
|
return r
|
|
}
|
|
|
|
func MapValues[T comparable, U any](m map[T]U) []U {
|
|
r := make([]U, 0, len(m))
|
|
for _, v := range m {
|
|
r = append(r, v)
|
|
}
|
|
return r
|
|
}
|
|
|
|
// CopyMap returns a copy of the passed-in map. Note: currently only works if [U]
|
|
// is not a map or slice.
|
|
func CopyMap[T comparable, U any](m map[T]U) map[T]U {
|
|
r := make(map[T]U)
|
|
for k, v := range m {
|
|
r[k] = v
|
|
}
|
|
return r
|
|
}
|