From 02693c741931fd74bf7ba3e1c00799ec5db583f2 Mon Sep 17 00:00:00 2001 From: Bill Ewanick Date: Wed, 15 Nov 2023 17:05:27 -0500 Subject: [PATCH] L33t code 841, by David Schindler --- flake.nix | 2 ++ src/l33tcode/841.go | 41 +++++++++++++++++++++++++++++++++++++++++ src/l33tcode/841.hs | 0 3 files changed, 43 insertions(+) create mode 100644 src/l33tcode/841.go create mode 100644 src/l33tcode/841.hs diff --git a/flake.nix b/flake.nix index b2e17b2..6cc9cd5 100644 --- a/flake.nix +++ b/flake.nix @@ -78,6 +78,8 @@ ] ++ (with pkgs; [ # Scripts clean + + go ]); shellHook = '' diff --git a/src/l33tcode/841.go b/src/l33tcode/841.go new file mode 100644 index 0000000..0b258b2 --- /dev/null +++ b/src/l33tcode/841.go @@ -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 +} diff --git a/src/l33tcode/841.hs b/src/l33tcode/841.hs new file mode 100644 index 0000000..e69de29