aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-04-08 18:06:18 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-04-08 18:06:18 +0200
commit60ac54b9ffd6f8d57e9807f710ace28900955366 (patch)
tree1a89ebed1ddbebc1160f78034c0e01467a752b97
parentf62b0712c209ed86377415d83a6dd62bbade2d2d (diff)
Use roman numerals for demonstration sacke
-rw-r--r--ops.go2
-rw-r--r--roman.go25
2 files changed, 26 insertions, 1 deletions
diff --git a/ops.go b/ops.go
index 59fbcac..75b21a8 100644
--- a/ops.go
+++ b/ops.go
@@ -19,7 +19,7 @@ var (
func init() {
alphabet = List{list.New()}
for i := 0; i <= maxValue; i++ {
- alphabet.PushBack(i)
+ alphabet.PushBack(formatRoman(i))
}
zero = Element{alphabet.Front()}
one = Element{zero.Next()}
diff --git a/roman.go b/roman.go
new file mode 100644
index 0000000..b1c5355
--- /dev/null
+++ b/roman.go
@@ -0,0 +1,25 @@
+// Roman Numerals, stollen from http://rosettacode.org/wiki/Roman_numerals/Encode#Go
+
+package main
+
+var (
+ m0 = []string{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}
+ m1 = []string{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}
+ m2 = []string{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}
+ m3 = []string{"", "M", "MM", "MMM", "I̅V̅", "V̅", "V̅I̅", "V̅I̅I̅", "V̅I̅I̅I̅", "I̅X̅"}
+ m4 = []string{"", "X̅", "X̅X̅", "X̅X̅X̅", "X̅L̅", "L̅", "L̅X̅", "L̅X̅X̅", "L̅X̅X̅X̅", "X̅C̅"}
+ m5 = []string{"", "C̅", "C̅C̅", "C̅C̅C̅", "C̅D̅", "D̅", "D̅C̅", "D̅C̅C̅", "D̅C̅C̅C̅", "C̅M̅"}
+ m6 = []string{"", "M̅", "M̅M̅", "M̅M̅M̅"}
+)
+
+func formatRoman(n int) string {
+ switch {
+ case n == 0:
+ return "N"
+ case n < 0 || n >= 4e6:
+ return "N̅"
+ default:
+ return m6[n/1e6] + m5[n%1e6/1e5] + m4[n%1e5/1e4] +
+ m3[n%1e4/1e3] + m2[n%1e3/1e2] + m1[n%100/10] + m0[n%10]
+ }
+}