package main import ( "bufio" "flag" "fmt" "os" "strconv" "strings" ) var ( stats = flag.Bool("S", false, "Display statistics about the sequence.") ) func main() { flag.Parse() flag.Usage = func() { fmt.Fprintf(os.Stderr, "usage: [-S] ") flag.PrintDefaults() } elements := argsToElements(flag.Args()) if len(elements) < 1 { scanner := bufio.NewScanner(os.Stdin) var e []string for scanner.Scan() { e = append(e, strings.Split(scanner.Text(), " ")...) } elements = argsToElements(e) } seq := newSequence(elements) fmt.Println(string(seq.histogram())) if *stats { fmt.Printf("min: %f\n", seq.min) fmt.Printf("max: %f\n", seq.max) fmt.Printf("avg: %f\n", seq.avg()) fmt.Printf("p50: %f\n", seq.p50()) fmt.Printf("p90: %f\n", seq.p90()) fmt.Printf("p99: %f\n", seq.p99()) fmt.Printf("p999: %f\n", seq.p999()) fmt.Printf("ordered sequence: %v\n", seq.elementsSorted) } } // converts the input to float64 func argsToElements(args []string) []float64 { elements := make([]float64, len(args)) for i, input := range args { num, err := strconv.ParseFloat(input, 64) if err != nil { panic(err) } elements[i] = num } return elements }