mirror of
https://github.com/cubixle/codekata-golang.git
synced 2026-04-24 21:24:46 +01:00
number letter count
This commit is contained in:
78
17_number_letter_count/main.go
Normal file
78
17_number_letter_count/main.go
Normal file
@@ -0,0 +1,78 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
count := 0
|
||||
for i := 1; i <= 1000; i++ {
|
||||
count += CountNumberLetter(i)
|
||||
}
|
||||
fmt.Println("count:", count)
|
||||
}
|
||||
|
||||
var numberToLetter = map[int]string{
|
||||
1: "one",
|
||||
2: "two",
|
||||
3: "three",
|
||||
4: "four",
|
||||
5: "five",
|
||||
6: "six",
|
||||
7: "seven",
|
||||
8: "eight",
|
||||
9: "nine",
|
||||
10: "ten",
|
||||
11: "eleven",
|
||||
12: "twelve",
|
||||
13: "thirteen",
|
||||
14: "fourteen",
|
||||
15: "fifteen",
|
||||
16: "sixteen",
|
||||
17: "seventeen",
|
||||
18: "eighteen",
|
||||
19: "nineteen",
|
||||
20: "twenty",
|
||||
30: "thirty",
|
||||
40: "forty",
|
||||
50: "fifty",
|
||||
60: "sixty",
|
||||
70: "seventy",
|
||||
80: "eighty",
|
||||
90: "ninety",
|
||||
100: "hundred",
|
||||
1000: "thousand",
|
||||
}
|
||||
|
||||
func CountNumberLetter(input int) int {
|
||||
n := input
|
||||
num := ""
|
||||
if input <= 20 {
|
||||
num += numberToLetter[input]
|
||||
fmt.Println("input:", n, "num:", num, len(num))
|
||||
return len(num)
|
||||
}
|
||||
if input/1000 > 0 {
|
||||
num += "onethousand"
|
||||
input = input % 1000
|
||||
}
|
||||
hundred := input / 100
|
||||
if hundred != 0 {
|
||||
num += numberToLetter[hundred] + "hundred"
|
||||
}
|
||||
input = input % 100
|
||||
one := input % 10
|
||||
ten := input / 10
|
||||
if one == 0 && hundred == 0 {
|
||||
num += numberToLetter[input]
|
||||
} else {
|
||||
if hundred > 0 && (one > 0 || ten > 0) {
|
||||
num += "and"
|
||||
}
|
||||
if ten == 1 {
|
||||
num += numberToLetter[input]
|
||||
} else {
|
||||
num += numberToLetter[ten*10] + numberToLetter[one]
|
||||
}
|
||||
}
|
||||
fmt.Println("input:", n, "num:", num, "len:", len(num))
|
||||
return len(num)
|
||||
}
|
||||
93
17_number_letter_count/number_letter_count_test.go
Normal file
93
17_number_letter_count/number_letter_count_test.go
Normal file
@@ -0,0 +1,93 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestCountNumberLetter(t *testing.T) {
|
||||
tt := []struct {
|
||||
name string
|
||||
input int
|
||||
want int
|
||||
}{
|
||||
{
|
||||
"1",
|
||||
1,
|
||||
3,
|
||||
},
|
||||
{
|
||||
"15",
|
||||
15,
|
||||
7,
|
||||
},
|
||||
{
|
||||
"90",
|
||||
90,
|
||||
6,
|
||||
},
|
||||
{
|
||||
"100",
|
||||
100,
|
||||
10,
|
||||
},
|
||||
{
|
||||
"300",
|
||||
300,
|
||||
12,
|
||||
},
|
||||
{
|
||||
"23",
|
||||
23,
|
||||
11,
|
||||
},
|
||||
{
|
||||
"123",
|
||||
123,
|
||||
24,
|
||||
},
|
||||
{
|
||||
"120",
|
||||
120,
|
||||
19,
|
||||
},
|
||||
{
|
||||
"115",
|
||||
115,
|
||||
20,
|
||||
},
|
||||
{
|
||||
"320",
|
||||
320,
|
||||
21,
|
||||
},
|
||||
{
|
||||
"444",
|
||||
444,
|
||||
23,
|
||||
},
|
||||
{
|
||||
"499",
|
||||
499,
|
||||
24,
|
||||
},
|
||||
{
|
||||
"342",
|
||||
342,
|
||||
23,
|
||||
},
|
||||
{
|
||||
"110",
|
||||
110,
|
||||
16,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range tt {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
got := CountNumberLetter(tc.input)
|
||||
if got != tc.want {
|
||||
t.Errorf("CountNumberLetter(%d)=%d, want %d", tc.input, got, tc.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user