mirror of https://github.com/01-edu/public.git
PrintNbrBase fixed
This commit is contained in:
parent
1b8a36ef47
commit
10ba7a0406
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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…
Reference in New Issue