aboutsummaryrefslogtreecommitdiff
path: root/challenge-153
diff options
context:
space:
mode:
authorMichael Lee Firkins <michael@firkins>2022-03-20 12:05:51 +0700
committerMichael Lee Firkins <michael@firkins>2022-03-20 12:05:51 +0700
commita181684919415d51717e476e13e3a4cb5487e216 (patch)
treeadc6c95035532dc64d692b6e8c7478b153b17833 /challenge-153
parent63d5c25a82cbdbc7ae51789d3be79aa04607b59e (diff)
downloadperlweeklychallenge-club-a181684919415d51717e476e13e3a4cb5487e216.tar.gz
perlweeklychallenge-club-a181684919415d51717e476e13e3a4cb5487e216.tar.bz2
perlweeklychallenge-club-a181684919415d51717e476e13e3a4cb5487e216.zip
pwc153 solution in Go
Diffstat (limited to 'challenge-153')
-rw-r--r--challenge-153/pokgopun/go/ch-1.go25
-rw-r--r--challenge-153/pokgopun/go/ch-2.go71
2 files changed, 96 insertions, 0 deletions
diff --git a/challenge-153/pokgopun/go/ch-1.go b/challenge-153/pokgopun/go/ch-1.go
new file mode 100644
index 0000000000..2db4dee496
--- /dev/null
+++ b/challenge-153/pokgopun/go/ch-1.go
@@ -0,0 +1,25 @@
+package main
+
+import "fmt"
+
+func main() {
+ var lf int
+ for i := 0; i < 10; i++ {
+ lf += factorial(i)
+ if i != 0 {
+ fmt.Print(", ")
+ }
+ fmt.Print(lf)
+ }
+ fmt.Printf("\n")
+}
+func factorial(n int) int {
+ r := 1
+ if n == 0 {
+ return r
+ }
+ for i := 1; i <= n; i++ {
+ r *= i
+ }
+ return r
+}
diff --git a/challenge-153/pokgopun/go/ch-2.go b/challenge-153/pokgopun/go/ch-2.go
new file mode 100644
index 0000000000..67e5db03fa
--- /dev/null
+++ b/challenge-153/pokgopun/go/ch-2.go
@@ -0,0 +1,71 @@
+package main
+
+import (
+ "fmt"
+ "log"
+ "os"
+ "strconv"
+)
+
+func main() {
+ s := getArgInts([]int{145, 123})
+ getF := getFactorial()
+ for _, v := range s {
+ //fmt.Println("Input: $n =", v)
+ fmt.Printf("Input: $n = %d, ", v)
+ f := 0
+ n := v
+ for {
+ r, q := n%10, n/10
+ if r == 0 && q == 0 {
+ break
+ }
+ //f += factorial(r)
+ f += getF(r)
+ n = q
+ }
+ o := 0
+ if f == v {
+ o = 1
+ }
+ //fmt.Println("Output:", o)
+ fmt.Printf("Output: %d\n", o)
+ }
+}
+func getArgInts(s []int) (r []int) {
+ if len(os.Args) > 1 {
+ for _, v := range os.Args[1:] {
+ i, err := strconv.Atoi(v)
+ if err != nil {
+ log.Fatal(err)
+ }
+ r = append(r, i)
+ }
+ } else {
+ r = s
+ }
+ return r
+}
+func getFactorial() func(i int) int {
+ m := map[int]int{}
+ return func(i int) int {
+ r, ok := m[i]
+ if ok {
+ return r
+ }
+ f := factorial(i)
+ m[i] = f
+ return f
+ }
+}
+func factorial(n int) int {
+ //fmt.Println("find f for", n)
+ r := 1
+ if n == 0 {
+ return r
+ }
+ for i := 1; i <= n; i++ {
+ r *= i
+ }
+ return r
+}