Solution: Permutations

examples/permutations/permutations.go
```package main

import (
"fmt"
)

func main() {
results := permutations("a")
fmt.Println(results)
}

// We assume they are unique
func permutations(word string) []string {
if word == "" {
return []string{""}
}
perms := []string{}
for i, rn := range word {
rest := word[:i] + word[i+1:]
//fmt.Println(rest)
for _, result := range permutations(rest) {
perms = append(perms, fmt.Sprintf("%c", rn)+result)
}
//perms = append(perms, fmt.Sprintf("%c\n", rn))
}
return perms
}

```

examples/permutations/permutations_test.go
```package main

import (
"fmt"
"sort"
"testing"
)

func TestPermutations(t *testing.T) {
cases := make(map[string][]string)
cases["a"] = []string{"a"}
cases["ab"] = []string{"ab", "ba"}
cases["abc"] = []string{"abc", "acb", "bac", "bca", "cab", "cba"}
cases["abcd"] = []string{
"dabc", "dacb", "dbac", "dbca", "dcab", "dcba",

for inp, expected := range cases {
actual := permutations(inp)
if !compare(expected, actual) {
t.Error(fmt.Sprintf("Expected '%v', Actual '%v'", expected, actual))
}
}
}

func compare(a, b []string) bool {
//fmt.Println(a)
//fmt.Println(b)
if len(a) != len(b) {
return false
}
sort.Strings(a)
sort.Strings(b)

for i := 0; i < len(a); i++ {
if a[i] != b[i] {
return false
}
}
return true
}

```