Explorar o código

K5 directions reduction.

Frederic G. MARAND %!s(int64=4) %!d(string=hai) anos
pai
achega
bb093e0a96

+ 13 - 0
go/kyu5/directions_reduction/directions_reduction_suite_test.go

@@ -0,0 +1,13 @@
+package kata_test
+
+import (
+	"testing"
+
+	. "github.com/onsi/ginkgo"
+	. "github.com/onsi/gomega"
+)
+
+func TestDirectionsReduction(t *testing.T) {
+	RegisterFailHandler(Fail)
+	RunSpecs(t, "DirectionsReduction Suite")
+}

+ 39 - 0
go/kyu5/directions_reduction/k.go

@@ -0,0 +1,39 @@
+package kata
+
+func areComplementary(a, b string) bool {
+	switch a {
+	case "NORTH":
+		return b == "SOUTH"
+	case "EAST":
+		return b == "WEST"
+	case "SOUTH":
+		return b == "NORTH"
+	case "WEST":
+		return b == "EAST"
+	default:
+		return falsetri
+	}
+}
+
+func DirReduc(arr []string) []string {
+	// Shortcut for irreducible lists.
+	l := len(arr)
+	if l <= 1 {
+		return arr
+	}
+	for i := 1; i < l; i++ {
+		if areComplementary(arr[i-1], arr[i]) {
+			if i == 1 {
+				if l <= 2 {
+					return []string{}
+				}
+				return DirReduc(arr[i+1:])
+			}
+			if i == l-1 {
+				return DirReduc(arr[:i-1])
+			}
+			return DirReduc(append(arr[:i-1], arr[i+1:]...))
+		}
+	}
+	return arr
+}

+ 26 - 0
go/kyu5/directions_reduction/k_test.go

@@ -0,0 +1,26 @@
+package kata_test
+
+import (
+	. "github.com/onsi/ginkgo"
+	. "github.com/onsi/gomega"
+
+	. "code.osinet.fr/fgm/codewars/kyu5/directions_reduction"
+)
+
+func dotest(arr []string, exp []string) {
+	var ans = DirReduc(arr)
+	Expect(ans).To(Equal(exp))
+}
+
+var _ = Describe("Tests DirReduc", func() {
+
+	It("should handle basic cases", func() {
+		var a = []string{"NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"}
+		dotest(a, []string{"WEST"})
+		a = []string{"NORTH", "WEST", "SOUTH", "EAST"}
+		dotest(a, []string{"NORTH", "WEST", "SOUTH", "EAST"})
+		a = []string{"NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "NORTH"}
+		dotest(a, []string{"NORTH"})
+
+	})
+})