-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy path492.go
52 lines (46 loc) · 866 Bytes
/
492.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// UVa 492 - Pig-Latin
package main
import (
"bytes"
"fmt"
"os"
"strings"
)
const vowels = "AEIOU"
func isAlphabetic(b byte) bool { return b >= 'A' && b <= 'Z' || b >= 'a' && b <= 'z' }
func main() {
in, _ := os.Open("492.in")
defer in.Close()
out, _ := os.Create("492.out")
defer out.Close()
var c byte
var started bool
var buf bytes.Buffer
var suffix string
for {
if _, err := fmt.Fscanf(in, "%c", &c); err != nil {
break
}
if !started {
if isAlphabetic(c) {
started = true
if sc := string(c); !strings.Contains(vowels, strings.ToUpper(sc)) {
suffix = sc
} else {
buf.WriteByte(c)
}
suffix += "ay"
} else {
buf.WriteByte(c)
}
} else {
if !isAlphabetic(c) {
started = false
buf.WriteString(suffix)
suffix = ""
}
buf.WriteByte(c)
}
}
fmt.Fprintln(out, buf.String())
}