mirror of https://github.com/01-edu/public.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
1.6 KiB
88 lines
1.6 KiB
package main |
|
|
|
import ( |
|
"fmt" |
|
"strings" |
|
|
|
student "student" |
|
|
|
"base" |
|
"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) |
|
sign := 1 |
|
rbase := []rune(base) |
|
if n < 0 { |
|
fmt.Print("-") |
|
sign = -1 |
|
} |
|
if n < length && n >= 0 { |
|
fmt.Printf("%c", rbase[n]) |
|
} else { |
|
printNbrBase(sign*(n/length), base) |
|
fmt.Printf("%c", rbase[sign*(n%length)]) |
|
} |
|
} else { |
|
fmt.Print("NV") |
|
} |
|
} |
|
|
|
func main() { |
|
type node struct { |
|
n int |
|
base string |
|
} |
|
|
|
table := []node{} |
|
|
|
// 15 random pairs of ints with valid bases |
|
for i := 0; i < 15; i++ { |
|
validBaseToInput := base.Valid() |
|
val := node{ |
|
n: lib.RandIntBetween(-1000000, 1000000), |
|
base: validBaseToInput, |
|
} |
|
table = append(table, val) |
|
} |
|
|
|
// 15 random pairs of ints with invalid bases |
|
for i := 0; i < 15; i++ { |
|
invalidBaseToInput := base.Invalid() |
|
val := node{ |
|
n: lib.RandIntBetween(-1000000, 1000000), |
|
base: invalidBaseToInput, |
|
} |
|
table = append(table, val) |
|
} |
|
|
|
table = append(table, |
|
node{n: 125, base: "0123456789"}, |
|
node{n: -125, base: "01"}, |
|
node{n: 125, base: "0123456789ABCDEF"}, |
|
node{n: -125, base: "choumi"}, |
|
node{n: 125, base: "-ab"}, |
|
node{n: lib.MinInt, base: "0123456789"}, |
|
) |
|
for _, arg := range table { |
|
lib.Challenge("PrintNbrBase", student.PrintNbrBase, printNbrBase, arg.n, arg.base) |
|
} |
|
}
|
|
|