CDE
This commit is contained in:
parent
518da4a923
commit
764da6cbbb
6144 changed files with 83610 additions and 11 deletions
56
Task/Digital-root/Go/digital-root.go
Normal file
56
Task/Digital-root/Go/digital-root.go
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"strconv"
|
||||
|
||||
"digit"
|
||||
)
|
||||
|
||||
type testCase struct {
|
||||
n string
|
||||
base int
|
||||
persistence int
|
||||
root int
|
||||
}
|
||||
|
||||
var testCases = []testCase{
|
||||
{"627615", 10, 2, 9},
|
||||
{"39390", 10, 2, 6},
|
||||
{"588225", 10, 2, 3},
|
||||
{"393900588225", 10, 2, 9},
|
||||
}
|
||||
|
||||
func root(n string, base int) (persistence, root int, err error) {
|
||||
i, err := digit.Sum(n, base)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
if len(n) == 1 {
|
||||
return 0, int(i), nil
|
||||
}
|
||||
for {
|
||||
persistence++
|
||||
n := strconv.FormatInt(i, base)
|
||||
if len(n) == 1 {
|
||||
root = int(i)
|
||||
break
|
||||
}
|
||||
i, _ = digit.Sum(n, base)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func main() {
|
||||
for _, tc := range testCases {
|
||||
p, r, err := root(tc.n, tc.base)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if p != tc.persistence || r != tc.root {
|
||||
log.Fatal("test case", tc)
|
||||
}
|
||||
}
|
||||
fmt.Println("all tests passed")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue