From c3f6b6758f6c39340dac7e352215c665199811d2 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 8 Jan 2026 18:04:43 -0500 Subject: [PATCH] feat: palindrome --- pkg/valid_palindrome/main.go | 30 ++++++++++++++++++++++++++++++ pkg/valid_palindrome/main_test.go | 14 ++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 pkg/valid_palindrome/main.go create mode 100644 pkg/valid_palindrome/main_test.go diff --git a/pkg/valid_palindrome/main.go b/pkg/valid_palindrome/main.go new file mode 100644 index 0000000..5f9e6b4 --- /dev/null +++ b/pkg/valid_palindrome/main.go @@ -0,0 +1,30 @@ +package valid_palindrome + +import ( + "regexp" + "strings" +) + +var notAlphanumeric = regexp.MustCompile(`[^a-zA-Z0-9]`) + +func KeepAlphanumeric(text string) string { + return notAlphanumeric.ReplaceAllString(text, "") +} + +func IsPalindrome(text string) bool { + scrubbed := strings.ToLower(KeepAlphanumeric(text)) + + start := 0 + end := len(scrubbed) - 1 + + for start < end { + if scrubbed[start] != scrubbed[end] { + return false + } + + start++ + end-- + } + + return true +} diff --git a/pkg/valid_palindrome/main_test.go b/pkg/valid_palindrome/main_test.go new file mode 100644 index 0000000..073cbd8 --- /dev/null +++ b/pkg/valid_palindrome/main_test.go @@ -0,0 +1,14 @@ +package valid_palindrome_test + +import ( + "testing" + + "git.maximhutz.com/practice/pkg/valid_palindrome" + "github.com/stretchr/testify/assert" +) + +func TestTwoSum(t *testing.T) { + assert.Equal(t, true, valid_palindrome.IsPalindrome("A man, a plan, a canal: Panama")) + assert.Equal(t, false, valid_palindrome.IsPalindrome("race a car")) + assert.Equal(t, true, valid_palindrome.IsPalindrome(" ")) +}