diff options
| author | Abigail <abigail@abigail.be> | 2021-10-25 21:04:00 +0200 |
|---|---|---|
| committer | Abigail <abigail@abigail.be> | 2021-10-25 21:04:00 +0200 |
| commit | 0decbe835d68d170e27aeb9f5c616a6ec92feb15 (patch) | |
| tree | 7f5ebab9c2db80c4a979079fb0b079b1f472dab6 | |
| parent | 812cf2fafa8824c9f98f27c2fc7bc8f008614330 (diff) | |
| download | perlweeklychallenge-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.md | 4 | ||||
| -rw-r--r-- | challenge-136/abigail/go/ch-1.go | 52 | ||||
| -rw-r--r-- | challenge-136/abigail/go/ch-2.go | 32 |
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)) + } +} |
