Implementing "Average" example
and supporting `Stdin.ReadDouble` method.
This commit is contained in:
parent
e0101b4c69
commit
7a40632ca8
@ -5,7 +5,8 @@ TARGETS := \
|
||||
$(REPO_BASE)/algs4-flips \
|
||||
$(REPO_BASE)/algs4-gcd \
|
||||
$(REPO_BASE)/algs4-rolls \
|
||||
$(REPO_BASE)/algs4-randomseq
|
||||
$(REPO_BASE)/algs4-randomseq \
|
||||
$(REPO_BASE)/algs4-average
|
||||
|
||||
test: build
|
||||
go test -x $(TARGETS)
|
||||
|
37
algs4/src/go/algs4-average/main.go
Normal file
37
algs4/src/go/algs4-average/main.go
Normal file
@ -0,0 +1,37 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
)
|
||||
|
||||
import (
|
||||
"github.com/meatballhat/box-o-sand/algs4/src/go/algs4"
|
||||
)
|
||||
|
||||
func die(err error) {
|
||||
fmt.Fprintf(os.Stderr, "ERROR: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
func main() {
|
||||
sum := 0.0
|
||||
cnt := 0
|
||||
|
||||
for {
|
||||
d, err := algs4.Stdin.ReadDouble()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
die(err)
|
||||
}
|
||||
|
||||
sum += d
|
||||
cnt++
|
||||
}
|
||||
|
||||
fmt.Printf("Average is %.5f\n", sum/float64(cnt))
|
||||
}
|
@ -3,10 +3,38 @@ package algs4
|
||||
import (
|
||||
"bufio"
|
||||
"io"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type inputWrapper struct {
|
||||
Inbuf *bufio.Reader
|
||||
}
|
||||
|
||||
var (
|
||||
Stdin = &inputWrapper{}
|
||||
)
|
||||
|
||||
func init() {
|
||||
Stdin.Inbuf = bufio.NewReader(os.Stdin)
|
||||
}
|
||||
|
||||
func (in *inputWrapper) ReadDouble() (float64, error) {
|
||||
line, err := in.Inbuf.ReadString('\n')
|
||||
|
||||
if err != nil {
|
||||
return float64(0), err
|
||||
}
|
||||
|
||||
dbl, err := strconv.ParseFloat(strings.TrimSpace(line), 64)
|
||||
if err != nil {
|
||||
return float64(0), err
|
||||
}
|
||||
|
||||
return dbl, nil
|
||||
}
|
||||
|
||||
func ReadInts(inbuf io.Reader) ([]int, error) {
|
||||
ints := make([]int, 0)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user