Browse Source

PrintNbrBase fixed

content-update
4 years ago committed by xpetit
parent
commit
10ba7a0406
  1. 54
      go/tests/base/base.go
  2. 7
      go/tests/func/atoibase_test/main.go
  3. 4
      go/tests/func/itoabase_test/main.go
  4. 27
      go/tests/func/printnbrbase_test/main.go
  5. 53
      go/tests/tofix/func/correct/atoibase.go

54
go/tests/base/base.go

@ -1,9 +1,61 @@
package base
import (
"math/rand"
"strings"
"lib"
)
func uniqueChar(s string) bool {
m := map[rune]struct{}{}
for _, r := range s {
if _, ok := m[r]; ok {
return false
}
m[r] = struct{}{}
}
return true
}
func IsValid(base string) bool {
return len(base) >= 2 && !strings.ContainsAny(base, "+-") && uniqueChar(base)
}
func power(nbr int, pwr int) int {
if pwr == 0 {
return 1
}
if pwr == 1 {
return nbr
}
return nbr * power(nbr, pwr-1)
}
func Atoi(s string, base string) int {
var result int
var i int
sign := 1
lengthBase := len(base)
lengths := len(s)
if !IsValid(base) {
return 0
}
if s[i] == '-' {
sign = -1
}
if s[i] == '-' || s[i] == '+' {
i++
}
for i < len(s) {
result += strings.Index(base, string(s[i])) * power(lengthBase, lengths-1)
i++
lengths--
}
return result * sign
}
func Valid() string {
valid := []string{
"01",
@ -59,7 +111,7 @@ func ConvertNbr(n int, base string) string {
}
func Convert(nbr, baseFrom, baseTo string) string {
resultIntermediary := AtoiBase(nbr, baseFrom)
resultIntermediary := Atoi(nbr, baseFrom)
resultFinal := ConvertNbr(resultIntermediary, baseTo)

7
go/tests/func/atoibase_test/main.go

@ -3,9 +3,8 @@ package main
import (
student "student"
"./base"
"./correct"
"github.com/01-edu/public/go/lib"
"base"
"lib"
)
// this is the function that creates the TESTS
@ -43,7 +42,7 @@ func main() {
node{s: "bbbbbab", base: "-ab"},
)
for _, arg := range table {
lib.Challenge("AtoiBase", student.AtoiBase, correct.AtoiBase, arg.s, arg.base)
lib.Challenge("AtoiBase", student.AtoiBase, base.Atoi, arg.s, arg.base)
}
}

4
go/tests/func/itoabase_test/main.go

@ -25,7 +25,7 @@ func main() {
}
for i := 0; i < 5; i++ {
base := lib.RandIntBetween(2, 16)
lib.Challenge("ItoaBase", student.ItoaBase, correct.ItoaBase, lib.MaxInt, base)
lib.Challenge("ItoaBase", student.ItoaBase, correct.ItoaBase, lib.MinInt, base)
lib.Challenge("ItoaBase", student.ItoaBase, itoaBase, lib.MaxInt, base)
lib.Challenge("ItoaBase", student.ItoaBase, itoaBase, lib.MinInt, base)
}
}

27
go/tests/func/printnbrbase_test/main.go

@ -2,7 +2,6 @@ package main
import (
"fmt"
"strings"
student "student"
@ -10,27 +9,11 @@ import (
"lib"
)
var m = map[rune]struct{}{}
func uniqueChar(s string) bool {
for _, r := range s {
if _, ok := m[r]; ok {
return false
}
m[r] = struct{}{}
}
return true
}
func validBase(base string) bool {
return len(base) >= 2 && !strings.ContainsAny(base, "+-") && uniqueChar(base)
}
func printNbrBase(n int, base string) {
if validBase(base) {
length := len(base)
func printNbrBase(n int, b string) {
if base.IsValid(b) {
length := len(b)
sign := 1
rbase := []rune(base)
rbase := []rune(b)
if n < 0 {
fmt.Print("-")
sign = -1
@ -38,7 +21,7 @@ func printNbrBase(n int, base string) {
if n < length && n >= 0 {
fmt.Printf("%c", rbase[n])
} else {
printNbrBase(sign*(n/length), base)
printNbrBase(sign*(n/length), b)
fmt.Printf("%c", rbase[sign*(n%length)])
}
} else {

53
go/tests/tofix/func/correct/atoibase.go

@ -1,53 +0,0 @@
package correct
import "strings"
var m = map[rune]struct{}{}
func uniqueChar(s string) bool {
for _, r := range s {
if _, ok := m[r]; ok {
return false
}
m[r] = struct{}{}
}
return true
}
func validBase(base string) bool {
return len(base) >= 2 && !strings.ContainsAny(base, "+-") && uniqueChar(base)
}
func power(nbr int, pwr int) int {
if pwr == 0 {
return 1
}
if pwr == 1 {
return nbr
}
return nbr * power(nbr, pwr-1)
}
func AtoiBase(s string, base string) int {
var result int
var i int
sign := 1
lengthBase := len(base)
lengths := len(s)
if !validBase(base) {
return 0
}
if s[i] == '-' {
sign = -1
}
if s[i] == '-' || s[i] == '+' {
i++
}
for i < len(s) {
result += (Index(base, string(s[i])) * power(lengthBase, lengths-1))
i++
lengths--
}
return result * sign
}
Loading…
Cancel
Save