From 4fbacfaf2a8fdac29e06df4b09b92ae228a55b51 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 30 Aug 2016 02:19:29 +0200 Subject: Solve phone --- go/phone-number/phone_number.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 go/phone-number/phone_number.go (limited to 'go/phone-number/phone_number.go') diff --git a/go/phone-number/phone_number.go b/go/phone-number/phone_number.go new file mode 100644 index 0000000..f88145a --- /dev/null +++ b/go/phone-number/phone_number.go @@ -0,0 +1,38 @@ +package phonenumber + +import ( + "fmt" + "unicode" +) + +func Number(s string) (string, error) { + r := []rune{} + for _, v := range s { + if unicode.IsNumber(v) { + r = append(r, v) + } + } + switch { + case len(r) == 11 && r[0] == '1': + return string(r)[1:], nil + case len(r) == 10: + return string(r), nil + } + return "", fmt.Errorf("bad number") +} + +func AreaCode(s string) (string, error) { + num, err := Number(s) + if err != nil { + return "", err + } + return num[:3], nil +} + +func Format(s string) (string, error) { + num, err := Number(s) + if err != nil { + return "", err + } + return fmt.Sprintf("(%v) %v-%v", num[:3], num[3:6], num[6:]), nil +} -- cgit v1.2.3