aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPok <pok@goyangi>2025-11-10 16:05:44 +0700
committerPok <pok@goyangi>2025-11-10 16:16:17 +0700
commit85642e99a531e28cc549b9e61184969ed8cc429b (patch)
tree304e8ec551e428c43f7c138014f4afc62fb23010
parent9ecb596ea7fb6a88c78a1f336cb9ac174e3f6bdf (diff)
downloadperlweeklychallenge-club-85642e99a531e28cc549b9e61184969ed8cc429b.tar.gz
perlweeklychallenge-club-85642e99a531e28cc549b9e61184969ed8cc429b.tar.bz2
perlweeklychallenge-club-85642e99a531e28cc549b9e61184969ed8cc429b.zip
pwc347 solution in go
-rw-r--r--challenge-347/pokgopun/go/ch-1.go78
-rw-r--r--challenge-347/pokgopun/go/ch-2.go99
2 files changed, 177 insertions, 0 deletions
diff --git a/challenge-347/pokgopun/go/ch-1.go b/challenge-347/pokgopun/go/ch-1.go
new file mode 100644
index 0000000000..f3dca081eb
--- /dev/null
+++ b/challenge-347/pokgopun/go/ch-1.go
@@ -0,0 +1,78 @@
+//# https://theweeklychallenge.org/blog/perl-weekly-challenge-347/
+/*#
+
+Task 1: Format Date
+
+Submitted by: [44]Mohammad Sajid Anwar
+ __________________________________________________________________
+
+ You are given a date in the form: 10th Nov 2025.
+
+ Write a script to format the given date in the form: 2025-11-10 using
+ the set below.
+@DAYS = ("1st", "2nd", "3rd", ....., "30th", "31st")
+@MONTHS = ("Jan", "Feb", "Mar", ....., "Nov", "Dec")
+@YEARS = (1900..2100)
+
+Example 1
+
+Input: $str = "1st Jan 2025"
+Output: "2025-01-01"
+
+Example 2
+
+Input: $str = "22nd Feb 2025"
+Output: "2025-02-22"
+
+Example 3
+
+Input: $str = "15th Apr 2025"
+Output: "2025-04-15"
+
+Example 4
+
+Input: $str = "23rd Oct 2025"
+Output: "2025-10-23"
+
+Example 5
+
+Input: $str = "31st Dec 2025"
+Output: "2025-12-31"
+
+Task 2: Format Phone Number
+#*/
+//# solution by pokgopun@gmail.com
+
+package main
+
+import (
+ "fmt"
+ "io"
+ "os"
+ "slices"
+ "strconv"
+ "strings"
+
+ "github.com/google/go-cmp/cmp"
+)
+
+func fd(str string) string {
+ m := []string{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
+ d := strings.Split(str, " ")
+ day, _ := strconv.Atoi(d[0][:len(d[0])-2])
+ return fmt.Sprintf("%s-%02d-%02d", d[2], slices.Index(m, d[1])+1, day)
+}
+
+func main() {
+ for _, data := range []struct {
+ input, output string
+ }{
+ {"1st Jan 2025", "2025-01-01"},
+ {"22nd Feb 2025", "2025-02-22"},
+ {"15th Apr 2025", "2025-04-15"},
+ {"23rd Oct 2025", "2025-10-23"},
+ {"31st Dec 2025", "2025-12-31"},
+ } {
+ io.WriteString(os.Stdout, cmp.Diff(fd(data.input), data.output)) // blank if ok, otherwise show the difference
+ }
+}
diff --git a/challenge-347/pokgopun/go/ch-2.go b/challenge-347/pokgopun/go/ch-2.go
new file mode 100644
index 0000000000..7fdb7c8ed5
--- /dev/null
+++ b/challenge-347/pokgopun/go/ch-2.go
@@ -0,0 +1,99 @@
+//# https://theweeklychallenge.org/blog/perl-weekly-challenge-347/
+/*#
+
+Task 2: Format Phone Number
+
+Submitted by: [45]Mohammad Sajid Anwar
+ __________________________________________________________________
+
+ You are given a phone number as a string containing digits, space and
+ dash only.
+
+ Write a script to format the given phone number using the below rules:
+1. Removing all spaces and dashes
+2. Grouping digits into blocks of length 3 from left to right
+3. Handling the final digits (4 or fewer) specially:
+ - 2 digits: one block of length 2
+ - 3 digits: one block of length 3
+ - 4 digits: two blocks of length 2
+4. Joining all blocks with dashes
+
+Example 1
+
+Input: $phone = "1-23-45-6"
+Output: "123-456"
+
+Example 2
+
+Input: $phone = "1234"
+Output: "12-34"
+
+Example 3
+
+Input: $phone = "12 345-6789"
+Output: "123-456-789"
+
+Example 4
+
+Input: $phone = "123 4567"
+Output: "123-45-67"
+
+Example 5
+
+Input: $phone = "123 456-78"
+Output: "123-456-78"
+ __________________________________________________________________
+
+ Last date to submit the solution 23:59 (UK Time) Sunday 16th November
+ 2025.
+ __________________________________________________________________
+
+SO WHAT DO YOU THINK ?
+#*/
+//# solution by pokgopun@gmail.com
+
+package main
+
+import (
+ "io"
+ "os"
+
+ "github.com/google/go-cmp/cmp"
+)
+
+func fpn(str string) string {
+ var rs []rune
+ var i, j, k int
+ for _, v := range str {
+ if v < '0' || v > '9' {
+ continue
+ }
+ if i > 0 && i%3 == 0 {
+ rs = append(rs, '-')
+ j++
+ k = j
+ }
+ rs = append(rs, v)
+ i++
+ j++
+ }
+ //fmt.Println(i, j, k)
+ if j-k == 1 {
+ rs[k-1], rs[k-2] = rs[k-2], rs[k-1]
+ }
+ return string(rs)
+}
+
+func main() {
+ for _, data := range []struct {
+ input, output string
+ }{
+ {"1-23-45-6", "123-456"},
+ {"1234", "12-34"},
+ {"12 345-6789", "123-456-789"},
+ {"123 4567", "123-45-67"},
+ {"123 456-78", "123-456-78"},
+ } {
+ io.WriteString(os.Stdout, cmp.Diff(fpn(data.input), data.output)) // blank if ok, otherwise show the difference
+ }
+}