diff --git a/algs4/src/go/Makefile b/algs4/src/go/Makefile index 58d819a..909c309 100644 --- a/algs4/src/go/Makefile +++ b/algs4/src/go/Makefile @@ -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) diff --git a/algs4/src/go/algs4-average/main.go b/algs4/src/go/algs4-average/main.go new file mode 100644 index 0000000..208dea0 --- /dev/null +++ b/algs4/src/go/algs4-average/main.go @@ -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)) +} diff --git a/algs4/src/go/algs4/io.go b/algs4/src/go/algs4/io.go index 0c4799c..b04e30c 100644 --- a/algs4/src/go/algs4/io.go +++ b/algs4/src/go/algs4/io.go @@ -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)