From 410825768e080b0793f9521888d487b40f09bcb9 Mon Sep 17 00:00:00 2001 From: VicRen Date: Wed, 2 Dec 2020 08:51:48 +0800 Subject: [PATCH] 20201202 --- 20201202/main.go | 32 +++++++++++++++++++++++++++++ 20201202/main_test.go | 47 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 20201202/main.go create mode 100644 20201202/main_test.go diff --git a/20201202/main.go b/20201202/main.go new file mode 100644 index 0000000..af90801 --- /dev/null +++ b/20201202/main.go @@ -0,0 +1,32 @@ +package main + +var r2d = map[uint8]int{ + 'I': 1, + 'V': 5, + 'X': 10, + 'L': 50, + 'C': 100, + 'D': 500, + 'M': 1000, +} + +func main() { + +} + +func RomaToDigit(s string) int { + l := len(s) + ret := 0 + for i := 0; i < l; i++ { + c := r2d[s[i]] + ret += c + if i >= l-1 { + break + } + cn := r2d[s[i+1]] + if cn > c { + ret -= 2 * c + } + } + return ret +} diff --git a/20201202/main_test.go b/20201202/main_test.go new file mode 100644 index 0000000..7114905 --- /dev/null +++ b/20201202/main_test.go @@ -0,0 +1,47 @@ +package main + +import "testing" + +func TestRomaToDigit(t *testing.T) { + type args struct { + s string + } + tests := []struct { + name string + args args + want int + }{ + { + "test1", + args{"III"}, + 3, + }, + { + "test2", + args{"IV"}, + 4, + }, + { + "test3", + args{"VI"}, + 6, + }, + { + "test4", + args{"LVIII"}, + 58, + }, + { + "test5", + args{"MCMXCIV"}, + 1994, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := RomaToDigit(tt.args.s); got != tt.want { + t.Errorf("RomaToDigit() = %v, want %v", got, tt.want) + } + }) + } +}