aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-10-25 21:04:00 +0200
committerAbigail <abigail@abigail.be>2021-10-25 21:04:00 +0200
commit0decbe835d68d170e27aeb9f5c616a6ec92feb15 (patch)
tree7f5ebab9c2db80c4a979079fb0b079b1f472dab6
parent812cf2fafa8824c9f98f27c2fc7bc8f008614330 (diff)
downloadperlweeklychallenge-club-0decbe835d68d170e27aeb9f5c616a6ec92feb15.tar.gz
perlweeklychallenge-club-0decbe835d68d170e27aeb9f5c616a6ec92feb15.tar.bz2
perlweeklychallenge-club-0decbe835d68d170e27aeb9f5c616a6ec92feb15.zip
Go solutions for week 136
-rw-r--r--challenge-136/abigail/README.md4
-rw-r--r--challenge-136/abigail/go/ch-1.go52
-rw-r--r--challenge-136/abigail/go/ch-2.go32
3 files changed, 88 insertions, 0 deletions
diff --git a/challenge-136/abigail/README.md b/challenge-136/abigail/README.md
index 7c6a7bc2d5..99faaf72b3 100644
--- a/challenge-136/abigail/README.md
+++ b/challenge-136/abigail/README.md
@@ -5,18 +5,22 @@
* [GNU AWK](awk/ch-1.gawk)
* [Bash](bash/ch-1.sh)
* [C](c/ch-1.c)
+* [Go](go/ch-1.go)
* [Lua](lua/ch-1.lua)
* [Node.js](node/ch-1.js)
* [Perl](perl/ch-1.pl)
* [Python](python/ch-1.py)
* [Ruby](ruby/ch-1.rb)
+* [Tcl](tcl/ch-1.tcl)
## Part 2
* [AWK](awk/ch-2.awk)
* [C](c/ch-2.c)
+* [Go](go/ch-2.go)
* [Lua](lua/ch-2.lua)
* [Node.js](node/ch-2.js)
* [Perl](perl/ch-2.pl)
* [Python](python/ch-2.py)
* [Ruby](ruby/ch-2.rb)
+* [Tcl](tcl/ch-2.tcl)
diff --git a/challenge-136/abigail/go/ch-1.go b/challenge-136/abigail/go/ch-1.go
new file mode 100644
index 0000000000..afbba43698
--- /dev/null
+++ b/challenge-136/abigail/go/ch-1.go
@@ -0,0 +1,52 @@
+package main
+
+//
+// See ../README.md
+//
+
+//
+// Run as: go run ch-1.go
+//
+
+import (
+ "fmt"
+// "bufio"
+// "os"
+)
+
+//
+// Find the GCD, using Stein's algorithm
+// (https://en.wikipedia.org/wiki/Binary_GCD_algorithm)
+//
+func gcd (u int, v int) int {
+ var u_odd bool = u % 2 != 0
+ var v_odd bool = v % 2 != 0
+
+ if (u == v || v == 0) {return u}
+ if ( u == 0) {return v}
+ if (!u_odd && !v_odd) {return gcd (u >> 1, v >> 1) << 1}
+ if (!u_odd && v_odd) {return gcd (u >> 1, v)}
+ if ( u_odd && !v_odd) {return gcd (u, v >> 1)}
+ if ( u > v) {return gcd (u - v, v)}
+ return gcd (v - u, u)
+}
+
+func main () {
+ var power_of_2 map [int] int = make (map [int] int)
+ for i := 1; i < 62; i ++ {
+ power_of_2 [i << 1] = 1
+ }
+
+ for {
+ var n, m int
+ c, err := fmt . Scanf ("%d %d", &n, &m);
+ if c != 2 || err != nil {
+ break;
+ }
+ if _, ok := power_of_2 [gcd (m, n)]; ok {
+ fmt . Print ("1\n")
+ } else {
+ fmt . Print ("0\n")
+ }
+ }
+}
diff --git a/challenge-136/abigail/go/ch-2.go b/challenge-136/abigail/go/ch-2.go
new file mode 100644
index 0000000000..b0e177f75c
--- /dev/null
+++ b/challenge-136/abigail/go/ch-2.go
@@ -0,0 +1,32 @@
+package main
+
+//
+// See ../README.md
+//
+
+//
+// Run as: go run ch-2.go
+//
+
+import (
+ "fmt"
+)
+
+func count (target int, this_fib int, prev_fib int) int {
+ if target < this_fib {return 0}
+ if target == this_fib {return 1}
+ return count (target - this_fib, this_fib + prev_fib, this_fib) +
+ count (target, this_fib + prev_fib, this_fib)
+}
+
+func main () {
+ for {
+ var n int
+ c, err := fmt . Scanf ("%d", &n)
+ if c != 1 || err != nil {
+ break;
+ }
+
+ fmt . Printf ("%d\n", count (n, 1, 1))
+ }
+}