diff --git a/739/739.go b/739/739.go new file mode 100644 index 0000000..2bb14f4 --- /dev/null +++ b/739/739.go @@ -0,0 +1,62 @@ +// UVa 739 - Soundex Indexing + +package main + +import ( + "fmt" + "os" +) + +var codeMap = map[byte]string{ + 'B': "1", 'P': "1", 'F': "1", 'V': "1", + 'C': "2", 'S': "2", 'K': "2", 'G': "2", 'J': "2", 'Q': "2", 'X': "2", 'Z': "2", + 'D': "3", 'T': "3", + 'L': "4", + 'M': "5", 'N': "5", + 'R': "6", +} + +func encode(name string) string { + skipped := false + soundex := name[0:1] + for i := 1; i < len(name); i++ { + code := codeMap[name[i]] + if code == "" || code == soundex[len(soundex)-1:] { + continue + } + if len(soundex) == 1 && code == codeMap[name[0]] && !skipped { + skipped = true + continue + } + soundex += code + if len(soundex) == 4 { + break + } + } + for len(soundex) < 4 { + soundex += "0" + } + return soundex +} + +func main() { + in, _ := os.Open("739.in") + defer in.Close() + out, _ := os.Create("739.out") + defer out.Close() + + fmt.Fprintln(out, " NAME SOUNDEX CODE") + + var name string + for { + if _, err := fmt.Fscanf(in, "%s", &name); err != nil { + break + } + encoded := encode(name) + for len(name) < 25 { + name += " " + } + fmt.Fprintf(out, " %s%s\n", name, encoded) + } + fmt.Fprintln(out, " END OF OUTPUT") +} diff --git a/739/739.in b/739/739.in new file mode 100644 index 0000000..863e0c1 --- /dev/null +++ b/739/739.in @@ -0,0 +1,6 @@ +LEE +KUHNE +EBELL +EBELSON +SCHAEFER +SCHAAK diff --git a/739/739.out b/739/739.out new file mode 100644 index 0000000..2654164 --- /dev/null +++ b/739/739.out @@ -0,0 +1,8 @@ + NAME SOUNDEX CODE + LEE L000 + KUHNE K500 + EBELL E140 + EBELSON E142 + SCHAEFER S160 + SCHAAK S200 + END OF OUTPUT diff --git a/README.md b/README.md index 50311bf..bf46d4b 100644 --- a/README.md +++ b/README.md @@ -167,6 +167,7 @@ UVa 713 - Adding Reversed Numbers UVa 725 - Division UVa 727 - Equation UVa 729 - The Hamming Distance Problem +UVa 739 - Soundex Indexing UVa 740 - Baudot Data Communication Code UVa 750 - 8 Queens Chess Problem UVa 755 - 487--3279