aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Manring <michael@manring>2024-01-01 16:19:51 +1100
committerMichael Manring <michael@manring>2024-01-01 16:19:51 +1100
commit8218ddbc7eeeb5b89fa09b5413ce4dd6e1e546a2 (patch)
treee0b7665e414d70f80228fbc189d275e83a572b77
parent5ed0f29114a9a637d474558c46c441cb3e75bf3b (diff)
downloadperlweeklychallenge-club-8218ddbc7eeeb5b89fa09b5413ce4dd6e1e546a2.tar.gz
perlweeklychallenge-club-8218ddbc7eeeb5b89fa09b5413ce4dd6e1e546a2.tar.bz2
perlweeklychallenge-club-8218ddbc7eeeb5b89fa09b5413ce4dd6e1e546a2.zip
pwc250 solution in go
-rw-r--r--challenge-250/pokgopun/go/ch-1.go76
-rw-r--r--challenge-250/pokgopun/go/ch-2.go88
2 files changed, 164 insertions, 0 deletions
diff --git a/challenge-250/pokgopun/go/ch-1.go b/challenge-250/pokgopun/go/ch-1.go
new file mode 100644
index 0000000000..68c565b258
--- /dev/null
+++ b/challenge-250/pokgopun/go/ch-1.go
@@ -0,0 +1,76 @@
+//# https://theweeklychallenge.org/blog/perl-weekly-challenge-250/
+/*#
+
+Task 1: Smallest Index
+
+Submitted by: [38]Mohammad S Anwar
+ __________________________________________________________________
+
+ You are given an array of integers, @ints.
+
+ Write a script to find the smallest index i such that i mod 10 ==
+ $ints[i] otherwise return -1.
+
+Example 1
+
+Input: @ints = (0, 1, 2)
+Output: 0
+
+i=0: 0 mod 10 = 0 == $ints[0].
+i=1: 1 mod 10 = 1 == $ints[1].
+i=2: 2 mod 10 = 2 == $ints[2].
+All indices have i mod 10 == $ints[i], so we return the smallest index 0.
+
+Example 2
+
+Input: @ints = (4, 3, 2, 1)
+Output: 2
+
+i=0: 0 mod 10 = 0 != $ints[0].
+i=1: 1 mod 10 = 1 != $ints[1].
+i=2: 2 mod 10 = 2 == $ints[2].
+i=3: 3 mod 10 = 3 != $ints[3].
+2 is the only index which has i mod 10 == $ints[i].
+
+Example 3
+
+Input: @ints = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
+Output: -1
+Explanation: No index satisfies i mod 10 == $ints[i].
+
+Task 2: Alphanumeric String Value
+#*/
+//# solution by pokgopun@gmail.com
+
+package main
+
+import (
+ "io"
+ "os"
+
+ "github.com/google/go-cmp/cmp"
+)
+
+type ints []int
+
+func (is ints) smallestIndex() int {
+ for i, v := range is {
+ if i%10 == v {
+ return i
+ }
+ }
+ return -1
+}
+
+func main() {
+ for _, data := range []struct {
+ input ints
+ output int
+ }{
+ {ints{0, 1, 2}, 0},
+ {ints{4, 3, 2, 1}, 2},
+ {ints{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, -1},
+ } {
+ io.WriteString(os.Stdout, cmp.Diff(data.input.smallestIndex(), data.output)) // output nothing if ok, otherwise show the difference
+ }
+}
diff --git a/challenge-250/pokgopun/go/ch-2.go b/challenge-250/pokgopun/go/ch-2.go
new file mode 100644
index 0000000000..cb85858dc1
--- /dev/null
+++ b/challenge-250/pokgopun/go/ch-2.go
@@ -0,0 +1,88 @@
+//# https://theweeklychallenge.org/blog/perl-weekly-challenge-250/
+/*#
+
+Task 2: Alphanumeric String Value
+
+Submitted by: [39]Mohammad S Anwar
+ __________________________________________________________________
+
+ You are given an array of alphanumeric strings.
+
+ Write a script to return the maximum value of alphanumeric string in
+ the given array.
+
+ The value of alphanumeric string can be defined as
+a) The numeric representation of the string in base 10 if it is made up of digit
+s only.
+b) otherwise the length of the string
+
+Example 1
+
+Input: @alphanumstr = ("perl", "2", "000", "python", "r4ku")
+Output: 6
+
+"perl" consists of letters only so the value is 4.
+"2" is digits only so the value is 2.
+"000" is digits only so the value is 0.
+"python" consits of letters so the value is 6.
+"r4ku" consists of letters and digits so the value is 4.
+
+Example 2
+
+Input: @alphanumstr = ("001", "1", "000", "0001")
+Output: 1
+ __________________________________________________________________
+
+ Last date to submit the solution 23:59 (UK Time) Sunday 7th January
+ 2024.
+ __________________________________________________________________
+
+SO WHAT DO YOU THINK ?
+#*/
+//# solution by pokgopun@gmail.com
+
+package main
+
+import (
+ "io"
+ "os"
+ "strconv"
+
+ "github.com/google/go-cmp/cmp"
+)
+
+func main() {
+ for _, data := range []struct {
+ input strs
+ output int
+ }{
+ {strs{"perl", "2", "000", "python", "r4ku"}, 6},
+ {strs{"001", "1", "000", "0001"}, 1},
+ } {
+ io.WriteString(os.Stdout, cmp.Diff(data.input.max(), data.output)) // output nothing if ok, otherwise show the difference
+ }
+}
+
+type str string
+
+func (s str) value() int {
+ r, err := strconv.Atoi(string(s))
+ if err != nil {
+ return len(s)
+ }
+ return r
+}
+
+type strs []str
+
+func (ss strs) max() int {
+ var mx, c int
+ for _, v := range ss {
+ c = v.value()
+ //fmt.Println(v, "=>", c)
+ if mx < c {
+ mx = c
+ }
+ }
+ return mx
+}