***roman: refactor in the OOP way
This commit is contained in:
		@ -2,25 +2,25 @@ package roman
 | 
			
		||||
 | 
			
		||||
import "strings"
 | 
			
		||||
 | 
			
		||||
type RomanNumeral struct {
 | 
			
		||||
	Value  int
 | 
			
		||||
	Symbol string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var allRomanNumerals = []RomanNumeral{
 | 
			
		||||
	{10, "X"},
 | 
			
		||||
	{9, "IX"},
 | 
			
		||||
	{5, "V"},
 | 
			
		||||
	{4, "IV"},
 | 
			
		||||
	{1, "I"},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ConvertToRoman(arabic int) string {
 | 
			
		||||
	var converted strings.Builder
 | 
			
		||||
	for arabic > 0 {
 | 
			
		||||
		switch {
 | 
			
		||||
		case arabic > 9:
 | 
			
		||||
			converted.WriteString("X")
 | 
			
		||||
			arabic -= 10
 | 
			
		||||
		case arabic > 8:
 | 
			
		||||
			converted.WriteString("IX")
 | 
			
		||||
			arabic -= 9
 | 
			
		||||
		case arabic > 4:
 | 
			
		||||
			converted.WriteString("V")
 | 
			
		||||
			arabic -= 5
 | 
			
		||||
		case arabic > 3:
 | 
			
		||||
			converted.WriteString("IV")
 | 
			
		||||
			arabic -= 4
 | 
			
		||||
		default:
 | 
			
		||||
			converted.WriteString("I")
 | 
			
		||||
			arabic -= 1
 | 
			
		||||
	for _, numeral := range allRomanNumerals {
 | 
			
		||||
		for arabic >= numeral.Value {
 | 
			
		||||
			converted.WriteString(numeral.Symbol)
 | 
			
		||||
			arabic -= numeral.Value
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user