From 8218ddbc7eeeb5b89fa09b5413ce4dd6e1e546a2 Mon Sep 17 00:00:00 2001 From: Michael Manring Date: Mon, 1 Jan 2024 16:19:51 +1100 Subject: pwc250 solution in go --- challenge-250/pokgopun/go/ch-1.go | 76 +++++++++++++++++++++++++++++++++ challenge-250/pokgopun/go/ch-2.go | 88 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 challenge-250/pokgopun/go/ch-1.go create mode 100644 challenge-250/pokgopun/go/ch-2.go 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 +} -- cgit