aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Manring <michael@manring>2024-08-12 12:05:39 +1000
committerMichael Manring <michael@manring>2024-08-12 12:05:39 +1000
commit5fd8ee56bd06542ea11d5112e1b1a7d0237d4f40 (patch)
tree98ccf739a27f2f157623bc99ad50e0ac6145366c
parent9ff9513860cd4e4fa87ecd33f9c7c50cab82721f (diff)
downloadperlweeklychallenge-club-5fd8ee56bd06542ea11d5112e1b1a7d0237d4f40.tar.gz
perlweeklychallenge-club-5fd8ee56bd06542ea11d5112e1b1a7d0237d4f40.tar.bz2
perlweeklychallenge-club-5fd8ee56bd06542ea11d5112e1b1a7d0237d4f40.zip
pwc282 solution in go
-rw-r--r--challenge-282/pokgopun/go/ch-1.go80
-rw-r--r--challenge-282/pokgopun/go/ch-2.go85
2 files changed, 165 insertions, 0 deletions
diff --git a/challenge-282/pokgopun/go/ch-1.go b/challenge-282/pokgopun/go/ch-1.go
new file mode 100644
index 0000000000..7254c6cde8
--- /dev/null
+++ b/challenge-282/pokgopun/go/ch-1.go
@@ -0,0 +1,80 @@
+//# https://theweeklychallenge.org/blog/perl-weekly-challenge-282/
+/*#
+
+Task 1: Good Integer
+
+Submitted by: [57]Mohammad Sajid Anwar
+ __________________________________________________________________
+
+ You are given a positive integer, $int, having 3 or more digits.
+
+ Write a script to return the Good Integer in the given integer or -1 if
+ none found.
+
+ A good integer is exactly three consecutive matching digits.
+
+Example 1
+
+Input: $int = 12344456
+Output: "444"
+
+Example 2
+
+Input: $int = 1233334
+Output: -1
+
+Example 3
+
+Input: $int = 10020003
+Output: "000"
+
+Task 2: Changing Keys
+#*/
+//# solution by pokgopun@gmail.com
+
+package main
+
+import (
+ "io"
+ "os"
+ "strconv"
+
+ "github.com/google/go-cmp/cmp"
+)
+
+type answer struct {
+ Val_str string
+ Err_code int
+}
+
+func goodInteger(num int) answer {
+ var (
+ c int
+ r rune
+ )
+ for _, v := range strconv.Itoa(num) {
+ if r == v {
+ c++
+ } else {
+ if c == 3 {
+ return answer{Val_str: string([]rune{r, r, r})}
+ }
+ r = v
+ c = 1
+ }
+ }
+ return answer{Err_code: -1}
+}
+
+func main() {
+ for _, data := range []struct {
+ input int
+ output answer
+ }{
+ {12344456, answer{Val_str: "444"}},
+ {1233334, answer{Err_code: -1}},
+ {10020003, answer{Val_str: "000"}},
+ } {
+ io.WriteString(os.Stdout, cmp.Diff(goodInteger(data.input), data.output)) // blank if ok, otherwise show the difference
+ }
+}
diff --git a/challenge-282/pokgopun/go/ch-2.go b/challenge-282/pokgopun/go/ch-2.go
new file mode 100644
index 0000000000..4d11b56d8b
--- /dev/null
+++ b/challenge-282/pokgopun/go/ch-2.go
@@ -0,0 +1,85 @@
+//# https://theweeklychallenge.org/blog/perl-weekly-challenge-282/
+/*#
+
+Task 2: Changing Keys
+
+Submitted by: [58]Mohammad Sajid Anwar
+ __________________________________________________________________
+
+ You are given an alphabetic string, $str, as typed by user.
+
+ Write a script to find the number of times user had to change the key
+ to type the given string. Changing key is defined as using a key
+ different from the last used key. The shift and caps lock keys won’t be
+ counted.
+
+Example 1
+
+Input: $str = 'pPeERrLl'
+Ouput: 3
+
+p -> P : 0 key change
+P -> e : 1 key change
+e -> E : 0 key change
+E -> R : 1 key change
+R -> r : 0 key change
+r -> L : 1 key change
+L -> l : 0 key change
+
+Example 2
+
+Input: $str = 'rRr'
+Ouput: 0
+
+Example 3
+
+Input: $str = 'GoO'
+Ouput: 1
+ __________________________________________________________________
+
+ Last date to submit the solution 23:59 (UK Time) Sunday 18th August
+ 2024.
+ __________________________________________________________________
+
+SO WHAT DO YOU THINK ?
+#*/
+//# solution by pokgopun@gmail.com
+
+package main
+
+import (
+ "io"
+ "os"
+
+ "github.com/google/go-cmp/cmp"
+)
+
+func ck(str string) int {
+ var a, b byte
+ c := -1
+ for i := range len(str) {
+ if str[i] < 97 {
+ a = str[i] + 32
+ }
+ if i > 0 {
+ if a != b {
+ c++
+ }
+ b = a
+ }
+ }
+ return c
+}
+
+func main() {
+ for _, data := range []struct {
+ input string
+ output int
+ }{
+ {"pPeERrLl", 3},
+ {"rRr", 0},
+ {"GoO", 1},
+ } {
+ io.WriteString(os.Stdout, cmp.Diff(ck(data.input), data.output)) // blank if ok, otherwise show the differece
+ }
+}