diff options
| -rw-r--r-- | print_digit_map.go | 37 | ||||
| -rw-r--r-- | radix_info.go | 1 |
2 files changed, 38 insertions, 0 deletions
diff --git a/print_digit_map.go b/print_digit_map.go new file mode 100644 index 0000000..356ca37 --- /dev/null +++ b/print_digit_map.go @@ -0,0 +1,37 @@ +package main + +import ( + "aphopkins/radix_info/factors" + "fmt" + "io" + "strconv" + "strings" +) + +func writeDigitMap(w io.Writer, digitMap []factors.DigitType) { + if len(digitMap) <= 2 { + panic("Radices cannot be less than 2!") + } else if len(digitMap) <= 36 { + writeDigitMapSmall(w, digitMap) + } +} + +// Prints a digit map suitable for small bases (≤36). +func writeDigitMapSmall(w io.Writer, digitMap []factors.DigitType) { + radix := uint(len(digitMap)) + digitsString := strings.Builder{} + digitsString.Grow(int(3*radix + 6)) + digitsString.WriteString("Digit:") + typesString := strings.Builder{} + typesString.WriteString("Class:") + for digit, digitType := range digitMap { + digitString := fmt.Sprintf("%2s", strings.ToUpper( + strconv.FormatUint(uint64(digit), int(radix)))) + typeString := digitType.String() + fmt.Fprintf(&digitsString, " %s", digitString) + fmt.Fprintf(&typesString, " %s", typeString) + } + + fmt.Fprintln(w, digitsString.String()) + fmt.Fprintln(w, typesString.String()) +} diff --git a/radix_info.go b/radix_info.go index 1a8cccb..20cbc20 100644 --- a/radix_info.go +++ b/radix_info.go @@ -32,6 +32,7 @@ func main() { float32(n)*float32(n-2)) } fmt.Printf("Natural Logarithm: %.2f\n", math.Log(float64(n))) + writeDigitMap(os.Stdout, factors.DigitMap(n)) } else { fmt.Println("Argument must be an integer above 1.") } |
