summaryrefslogtreecommitdiff
path: root/go/grains/grains.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/grains/grains.go')
-rw-r--r--go/grains/grains.go19
1 files changed, 19 insertions, 0 deletions
diff --git a/go/grains/grains.go b/go/grains/grains.go
new file mode 100644
index 0000000..22bbdda
--- /dev/null
+++ b/go/grains/grains.go
@@ -0,0 +1,19 @@
+package grains
+
+import "errors"
+
+func Square(n int) (uint64, error) {
+ if n < 1 || n > 64 {
+ return 0, errors.New("out of range")
+ }
+ return 1 << uint(n-1), nil
+}
+
+func Total() uint64 {
+ var n uint64
+ for i := 0; i < 64; i++ {
+ s, _ := Square(i + 1)
+ n += s
+ }
+ return n
+}