using System; public class RomanDecode { public static int GetCharacter(char character) { switch (character) { case 'I': return 1; case 'V': return 5; case 'X': return 10; case 'L': return 50; case 'C': return 100; case 'D': return 500; case 'M': return 1000; default: throw new NotImplementedException(); } } public static int Solution(string roman) { var result = 0; var lastCharacter = 0; for (var i = roman.Length - 1; i >= 0; i--) { var character = GetCharacter(roman[i]); if (character >= lastCharacter) { result += character; } else { result -= character; } lastCharacter = character; } return result; } }
package kata- using System;
func Decode(roman string) int {return 0- public class RomanDecode
- {
- public static int GetCharacter(char character) {
- switch (character) {
- case 'I': return 1;
- case 'V': return 5;
- case 'X': return 10;
- case 'L': return 50;
- case 'C': return 100;
- case 'D': return 500;
- case 'M': return 1000;
- default: throw new NotImplementedException();
- }
- }
- public static int Solution(string roman)
- {
- var result = 0;
- var lastCharacter = 0;
- for (var i = roman.Length - 1; i >= 0; i--) {
- var character = GetCharacter(roman[i]);
- if (character >= lastCharacter) {
- result += character;
- } else {
- result -= character;
- }
- lastCharacter = character;
- }
- return result;
- }
- }
using System; using NUnit.Framework; [TestFixture] public class RomanDecodeTests { [TestCase(21, "XXI")] public void Test21(int expected, string roman) { Assert.AreEqual(expected, RomanDecode.Solution(roman)); } [TestCase(1, "I")] public void Test1(int expected, string roman) { Assert.AreEqual(expected, RomanDecode.Solution(roman)); } [TestCase(4, "IV")] public void Test4(int expected, string roman) { Assert.AreEqual(expected, RomanDecode.Solution(roman)); } [TestCase(2008, "MMVIII")] public void Test2008(int expected, string roman) { Assert.AreEqual(expected, RomanDecode.Solution(roman)); } [TestCase(1666, "MDCLXVI")] public void Test1666(int expected, string roman) { Assert.AreEqual(expected, RomanDecode.Solution(roman)); } }
package kata_testimport (. "github.com/onsi/ginkgo". "github.com/onsi/gomega". "codewarrior/kata")- using System;
- using NUnit.Framework;
var _ = Describe("test roman to decimal converter", func() {It("should give decimal number from roman", func() {Expect(Decode("XXI")).To(Equal(21))})It("should give decimal number from roman", func() {Expect(Decode("I")).To(Equal(1))})It("should give decimal number from roman", func() {Expect(Decode("IV")).To(Equal(4))})It("should give decimal number from roman", func() {Expect(Decode("MMVIII")).To(Equal(2008))})It("should give decimal number from roman", func() {Expect(Decode("MDCLXVI")).To(Equal(1666))})})- [TestFixture]
- public class RomanDecodeTests
- {
- [TestCase(21, "XXI")]
- public void Test21(int expected, string roman)
- {
- Assert.AreEqual(expected, RomanDecode.Solution(roman));
- }
- [TestCase(1, "I")]
- public void Test1(int expected, string roman)
- {
- Assert.AreEqual(expected, RomanDecode.Solution(roman));
- }
- [TestCase(4, "IV")]
- public void Test4(int expected, string roman)
- {
- Assert.AreEqual(expected, RomanDecode.Solution(roman));
- }
- [TestCase(2008, "MMVIII")]
- public void Test2008(int expected, string roman)
- {
- Assert.AreEqual(expected, RomanDecode.Solution(roman));
- }
- [TestCase(1666, "MDCLXVI")]
- public void Test1666(int expected, string roman)
- {
- Assert.AreEqual(expected, RomanDecode.Solution(roman));
- }
- }