forked from root/public
![](/git/assets/img/avatar_default.png)
![xpetit](/git/assets/img/avatar_default.png)
5 changed files with 63 additions and 82 deletions
@ -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