summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrien Hopkins <adrien.p.hopkins@gmail.com>2023-08-30 14:27:19 -0500
committerAdrien Hopkins <adrien.p.hopkins@gmail.com>2023-08-30 14:29:52 -0500
commit45d7d682c7e9676802fb21e74e47a3c7cca30e19 (patch)
tree5895cf21c4a79931f0518f161ab9bd705e22426d
parent778220b2e3ce662e733727fb9a560fcfe85c19eb (diff)
Print digit map to stdout
-rw-r--r--print_digit_map.go37
-rw-r--r--radix_info.go1
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.")
}