aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Manring <michael@manring>2025-02-11 18:42:21 +1100
committerMichael Manring <michael@manring>2025-02-11 18:42:21 +1100
commit824dd6ce5ffa5e3545787712d213bbbf02639f47 (patch)
tree810e7c6c1cac5633e628ec6875ae7770b2e169c0
parent021c7ff25d352c5e5849a6f10438e6f10db70573 (diff)
downloadperlweeklychallenge-club-824dd6ce5ffa5e3545787712d213bbbf02639f47.tar.gz
perlweeklychallenge-club-824dd6ce5ffa5e3545787712d213bbbf02639f47.tar.bz2
perlweeklychallenge-club-824dd6ce5ffa5e3545787712d213bbbf02639f47.zip
pwc308 solution in go
-rw-r--r--challenge-308/pokgopun/go/ch-1.go88
-rw-r--r--challenge-308/pokgopun/go/ch-2.go100
2 files changed, 188 insertions, 0 deletions
diff --git a/challenge-308/pokgopun/go/ch-1.go b/challenge-308/pokgopun/go/ch-1.go
new file mode 100644
index 0000000000..58af71f6e4
--- /dev/null
+++ b/challenge-308/pokgopun/go/ch-1.go
@@ -0,0 +1,88 @@
+//# https://theweeklychallenge.org/blog/perl-weekly-challenge-308/
+/*#
+
+Task 1: Count Common
+
+Submitted by: [46]Mohammad Sajid Anwar
+ __________________________________________________________________
+
+ You are given two array of strings, @str1 and @str2.
+
+ Write a script to return the count of common strings in both arrays.
+
+Example 1
+
+Input: @str1 = ("perl", "weekly", "challenge")
+ @str2 = ("raku", "weekly", "challenge")
+Output: 2
+
+Example 2
+
+Input: @str1 = ("perl", "raku", "python")
+ @str2 = ("python", "java")
+Output: 1
+
+Example 3
+
+Input: @str1 = ("guest", "contribution")
+ @str2 = ("fun", "weekly", "challenge")
+Output: 0
+
+Task 2: Decode XOR
+#*/
+//# solution by pokgopun@gmail.com
+
+package main
+
+import (
+ "io"
+ "os"
+
+ "github.com/google/go-cmp/cmp"
+)
+
+type strs []string
+
+type input struct {
+ str1, str2 strs
+}
+
+func (in input) process() int {
+ m := make(map[string]bool)
+ for _, v := range in.str1 {
+ m[v] = true
+ }
+ c := 0
+ for _, v := range in.str2 {
+ if m[v] {
+ c++
+ m[v] = false
+ }
+ }
+ /*
+ for k, v := range m {
+ if v {
+ delete(m, k)
+ }
+ }
+ fmt.Println(m)
+ */
+ return c
+}
+
+func main() {
+ for _, data := range []struct {
+ input input
+ output int
+ }{
+ {input{strs{"perl", "weekly", "challenge"}, strs{"raku", "weekly", "challenge"}}, 2},
+ {input{strs{"perl", "raku", "python"}, strs{"python", "java"}}, 1},
+ {input{strs{"guest", "contribution"}, strs{"fun", "weekly", "challenge"}}, 0},
+ {input{strs{"perl", "raku", "perl"}, strs{"perl", "perl"}}, 1},
+ {input{strs{"challenge", "challenge", "challenge"}, strs{"challenge", "weekly", "challenge"}}, 1},
+ {input{strs{"challenge", "go", "challenge"}, strs{"go", "challenge", "go"}}, 2},
+ } {
+ //fmt.Println(data.input)
+ io.WriteString(os.Stdout, cmp.Diff(data.input.process(), data.output)) // blank if ok, otherwise show the difference
+ }
+}
diff --git a/challenge-308/pokgopun/go/ch-2.go b/challenge-308/pokgopun/go/ch-2.go
new file mode 100644
index 0000000000..12f0bba5ea
--- /dev/null
+++ b/challenge-308/pokgopun/go/ch-2.go
@@ -0,0 +1,100 @@
+//# https://theweeklychallenge.org/blog/perl-weekly-challenge-308/
+/*#
+
+Task 2: Decode XOR
+
+Submitted by: [47]Mohammad Sajid Anwar
+ __________________________________________________________________
+
+ You are given an encoded array and an initial integer.
+
+ Write a script to find the original array that produced the given
+ encoded array. It was encoded such that encoded[i] = orig[i] XOR orig[i
+ + 1].
+
+Example 1
+
+Input: @encoded = (1, 2, 3), $initial = 1
+Output: (1, 0, 2, 1)
+
+Encoded array created like below, if the original array was (1, 0, 2, 1)
+$encoded[0] = (1 xor 0) = 1
+$encoded[1] = (0 xor 2) = 2
+$encoded[2] = (2 xor 1) = 3
+
+Example 2
+
+Input: @encoded = (6, 2, 7, 3), $initial = 4
+Output: (4, 2, 0, 7, 4)
+ __________________________________________________________________
+
+ Last date to submit the solution 23:59 (UK Time) Sunday 16^th February
+ 2025.
+ __________________________________________________________________
+
+SO WHAT DO YOU THINK ?
+#*/
+//# solution by pokgopun@gmail.com
+
+package main
+
+import (
+ "io"
+ "os"
+
+ "github.com/google/go-cmp/cmp"
+)
+
+type ints []int
+
+type input struct {
+ enc ints
+ init int
+}
+
+func (in input) process() ints {
+ enc := in.enc
+ l := len(enc)
+ org := make(ints, l+1)
+ org[0] = in.init
+ for i := range l {
+ orgn := 0
+ switch {
+ case enc[i] == org[i]:
+ case enc[i] == 0:
+ orgn = org[i]
+ case org[i] == 0:
+ orgn = enc[i]
+ default:
+ b := 1
+ dst, src := enc[i], org[i]
+ if dst < src {
+ dst, src = src, dst
+ }
+ for dst > 0 {
+ o := dst%2 - src%2
+ if o < 0 {
+ o = 1
+ }
+ orgn += b * o
+ b *= 2
+ dst /= 2
+ src /= 2
+ }
+ }
+ org[i+1] = orgn
+ }
+ return org
+}
+
+func main() {
+ for _, data := range []struct {
+ input input
+ output ints
+ }{
+ {input{ints{1, 2, 3}, 1}, ints{1, 0, 2, 1}},
+ {input{ints{6, 2, 7, 3}, 4}, ints{4, 2, 0, 7, 4}},
+ } {
+ io.WriteString(os.Stdout, cmp.Diff(data.input.process(), data.output)) // blank if ok, otherwise show the difference
+ }
+}