diff options
| author | Michael Lee Firkins <michael@firkins> | 2022-03-20 12:05:51 +0700 |
|---|---|---|
| committer | Michael Lee Firkins <michael@firkins> | 2022-03-20 12:05:51 +0700 |
| commit | a181684919415d51717e476e13e3a4cb5487e216 (patch) | |
| tree | adc6c95035532dc64d692b6e8c7478b153b17833 /challenge-153 | |
| parent | 63d5c25a82cbdbc7ae51789d3be79aa04607b59e (diff) | |
| download | perlweeklychallenge-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.go | 25 | ||||
| -rw-r--r-- | challenge-153/pokgopun/go/ch-2.go | 71 |
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 +} |
