L33t code 841 initial
Co-authored-by: David Schlachter <https://github.com/davidschlachter>
This commit is contained in:
41
src/l33tcode/841.go
Normal file
41
src/l33tcode/841.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
res := canVisitAllRooms([][]int{{1}, {2}, {}})
|
||||
fmt.Printf("%+v\n", res)
|
||||
}
|
||||
|
||||
func canVisitAllRooms(rooms [][]int) bool {
|
||||
if len(rooms) > 0 && len(rooms[0]) == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
keys := getAllKeys(0, make(map[int]struct{}), rooms)
|
||||
keys[0] = struct{}{}
|
||||
|
||||
for i := 0; i < len(rooms); i++ {
|
||||
if _, ok := keys[i]; !ok {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func getAllKeys(index int, seen map[int]struct{}, rooms [][]int) map[int]struct{} {
|
||||
keys := map[int]struct{}{}
|
||||
|
||||
for j := 0; j < len(rooms[index]); j++ {
|
||||
if _, ok := keys[rooms[index][j]]; ok {
|
||||
continue
|
||||
}
|
||||
keys[rooms[index][j]] = struct{}{}
|
||||
insideKeys := getAllKeys(j, keys, rooms)
|
||||
for k := range insideKeys {
|
||||
keys[k] = struct{}{}
|
||||
}
|
||||
}
|
||||
|
||||
return keys
|
||||
}
|
||||
0
src/l33tcode/841.hs
Normal file
0
src/l33tcode/841.hs
Normal file
Reference in New Issue
Block a user