From 60ac54b9ffd6f8d57e9807f710ace28900955366 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 8 Apr 2015 18:06:18 +0200 Subject: Use roman numerals for demonstration sacke --- ops.go | 2 +- roman.go | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 roman.go 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] + } +} -- cgit v1.2.3