aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Manring <michael@manring>2024-04-10 13:29:40 +1000
committerMichael Manring <michael@manring>2024-04-10 13:29:40 +1000
commit50386d1884b49f7268d6aa6662872be9ff4a2538 (patch)
tree4a0035d449dda3255e54ec4b18e4924322310278
parentba0287822135b4d4c868e8f8ede74622843c6c85 (diff)
downloadperlweeklychallenge-club-50386d1884b49f7268d6aa6662872be9ff4a2538.tar.gz
perlweeklychallenge-club-50386d1884b49f7268d6aa6662872be9ff4a2538.tar.bz2
perlweeklychallenge-club-50386d1884b49f7268d6aa6662872be9ff4a2538.zip
pwc264 solution in go
-rw-r--r--challenge-264/pokgopun/go/ch-1.go80
-rw-r--r--challenge-264/pokgopun/go/ch-2.go90
2 files changed, 170 insertions, 0 deletions
diff --git a/challenge-264/pokgopun/go/ch-1.go b/challenge-264/pokgopun/go/ch-1.go
new file mode 100644
index 0000000000..d5e7f029f3
--- /dev/null
+++ b/challenge-264/pokgopun/go/ch-1.go
@@ -0,0 +1,80 @@
+//# https://theweeklychallenge.org/blog/perl-weekly-challenge-264/
+/*#
+
+Task 1: Greatest English Letter
+
+Submitted by: [47]Mohammad Sajid Anwar
+ __________________________________________________________________
+
+ You are given a string, $str, made up of only alphabetic characters
+ [a..zA..Z].
+
+ Write a script to return the greatest english letter in the given
+ string.
+
+ A letter is greatest if it occurs as lower and upper case. Also
+ letter ‘b’ is greater than ‘a’ if ‘b’ appears after ‘a’ in the
+ English alphabet.
+
+Example 1
+
+Input: $str = 'PeRlwEeKLy'
+Output: L
+
+There are two letters E and L that appears as lower and upper.
+The letter L appears after E, so the L is the greatest english letter.
+
+Example 2
+
+Input: $str = 'ChaLlenge'
+Output: L
+
+Example 3
+
+Input: $str = 'The'
+Output: ''
+
+Task 2: Target Array
+#*/
+//# solution by pokgopun@gmail.com
+
+package main
+
+import (
+ "io"
+ "os"
+
+ "github.com/google/go-cmp/cmp"
+)
+
+func gel(s string) string {
+ seen := make(map[byte]bool)
+ var mx byte
+ for _, v := range []byte(s) {
+ if v > 96 {
+ v -= 32
+ }
+ if seen[v] {
+ mx = max(mx, v)
+ continue
+ }
+ seen[v] = true
+ }
+ var res string
+ if mx > 0 {
+ res = string([]byte{mx})
+ }
+ return res
+}
+
+func main() {
+ for _, data := range []struct {
+ input, output string
+ }{
+ {"PeRlwEeKLy", "L"},
+ {"ChaLlenge", "L"},
+ {"The", ""},
+ } {
+ io.WriteString(os.Stdout, cmp.Diff(gel(data.input), data.output)) // blank if ok, otherwise show the difference
+ }
+}
diff --git a/challenge-264/pokgopun/go/ch-2.go b/challenge-264/pokgopun/go/ch-2.go
new file mode 100644
index 0000000000..b5275f9323
--- /dev/null
+++ b/challenge-264/pokgopun/go/ch-2.go
@@ -0,0 +1,90 @@
+//# https://theweeklychallenge.org/blog/perl-weekly-challenge-264/
+/*#
+
+Task 2: Target Array
+
+Submitted by: [48]Mohammad Sajid Anwar
+ __________________________________________________________________
+
+ You are given two arrays of integers, @source and @indices. The
+ @indices can only contains integers 0 <= i < size of @source.
+
+ Write a script to create target array by insert at index $indices[i]
+ the value $source[i].
+
+Example 1
+
+Input: @source = (0, 1, 2, 3, 4)
+ @indices = (0, 1, 2, 2, 1)
+Output: (0, 4, 1, 3, 2)
+
+@source @indices @target
+0 0 (0)
+1 1 (0, 1)
+2 2 (0, 1, 2)
+3 2 (0, 1, 3, 2)
+4 1 (0, 4, 1, 3, 2)
+
+Example 2
+
+Input: @source = (1, 2, 3, 4, 0)
+ @indices = (0, 1, 2, 3, 0)
+Output: (0, 1, 2, 3, 4)
+
+@source @indices @target
+1 0 (1)
+2 1 (1, 2)
+3 2 (1, 2, 3)
+4 3 (1, 2, 3, 4)
+0 0 (0, 1, 2, 3, 4)
+
+Example 3
+
+Input: @source = (1)
+ @indices = (0)
+Output: (1)
+ __________________________________________________________________
+
+ Last date to submit the solution 23:59 (UK Time) Sunday 14th April
+ 2024.
+ __________________________________________________________________
+
+SO WHAT DO YOU THINK ?
+#*/
+//# solution by pokgopun@gmail.com
+
+package main
+
+import (
+ "io"
+ "os"
+
+ "github.com/google/go-cmp/cmp"
+)
+
+type ints []int
+
+func target(source, indices ints) ints {
+ res := make(ints, len(source))
+ var i, j, v int
+ for i, v = range source {
+ j = indices[i]
+ if j < i {
+ copy(res[j+1:], res[j:])
+ }
+ res[j] = v
+ }
+ return res
+}
+
+func main() {
+ for _, data := range []struct {
+ source, indices, target ints
+ }{
+ {ints{0, 1, 2, 3, 4}, ints{0, 1, 2, 2, 1}, ints{0, 4, 1, 3, 2}},
+ {ints{1, 2, 3, 4, 0}, ints{0, 1, 2, 3, 0}, ints{0, 1, 2, 3, 4}},
+ {ints{1}, ints{0}, ints{1}},
+ } {
+ io.WriteString(os.Stdout, cmp.Diff(target(data.source, data.indices), data.target)) // blank if ok, otherwise show the difference
+ }
+}