diff --git a/26-functions-and-pointers/xxx-finished/log.txt b/26-functions-and-pointers/xxx-finished/log.txt deleted file mode 100644 index fb2432b..0000000 --- a/26-functions-and-pointers/xxx-finished/log.txt +++ /dev/null @@ -1,6 +0,0 @@ -learngoprogramming.com 10 -learngoprogramming.com 10 -golang.org 4 -golang.org 6 -blog.golang.org 20 -blog.golang.org 10 \ No newline at end of file diff --git a/26-functions-and-pointers/xxx-finished/log_err_missing.txt b/26-functions-and-pointers/xxx-finished/log_err_missing.txt deleted file mode 100644 index fd8eff4..0000000 --- a/26-functions-and-pointers/xxx-finished/log_err_missing.txt +++ /dev/null @@ -1,6 +0,0 @@ -learngoprogramming.com 10 -learngoprogramming.com 10 -golang.org -golang.org 6 -blog.golang.org 20 -blog.golang.org 10 \ No newline at end of file diff --git a/26-functions-and-pointers/xxx-finished/log_err_negative.txt b/26-functions-and-pointers/xxx-finished/log_err_negative.txt deleted file mode 100644 index 60485c0..0000000 --- a/26-functions-and-pointers/xxx-finished/log_err_negative.txt +++ /dev/null @@ -1,6 +0,0 @@ -learngoprogramming.com 10 -learngoprogramming.com 10 -golang.org -100 -golang.org 6 -blog.golang.org 20 -blog.golang.org 10 \ No newline at end of file diff --git a/26-functions-and-pointers/xxx-finished/log_err_str.txt b/26-functions-and-pointers/xxx-finished/log_err_str.txt deleted file mode 100644 index 3a55bd7..0000000 --- a/26-functions-and-pointers/xxx-finished/log_err_str.txt +++ /dev/null @@ -1,6 +0,0 @@ -learngoprogramming.com 10 -learngoprogramming.com 10 -golang.org FOUR -golang.org 6 -blog.golang.org 20 -blog.golang.org 10 \ No newline at end of file diff --git a/26-functions-and-pointers/xxx-finished/main.go b/26-functions-and-pointers/xxx-finished/main.go deleted file mode 100644 index 2e6b642..0000000 --- a/26-functions-and-pointers/xxx-finished/main.go +++ /dev/null @@ -1,57 +0,0 @@ -// For more tutorials: https://blog.learngoprogramming.com -// -// Copyright © 2018 Inanc Gumus -// Learn Go Programming Course -// License: https://creativecommons.org/licenses/by-nc-sa/4.0/ -// - -package main - -import ( - "bufio" - "fmt" - "os" -) - -func main() { - in := bufio.NewScanner(os.Stdin) - - p := newParser() - for in.Scan() { - // dom, err := parse(p, in.Text()) - // if err != nil { - // fmt.Println(err) - // return - // } - - // p = push(p, dom) - - p = add(p, in.Text()) - } - - summarize(p) - dumpErrs(in.Err(), err(p)) -} - -// funcs not always need to be reused. -// here, it tells about what it does: it summarizes the parsing result. -func summarize(p parser) { - // Print the visits per domain - for _, d := range p.domains { - vis := p.sum[d.name] - - fmt.Printf("%-25s -> %d\n", d.name, vis) - } - - // Print the total visits for all domains - fmt.Printf("\n%-25s -> %d\n", "TOTAL", p.total) -} - -// this variadic func simplifies the multiple error handling -func dumpErrs(errs ...error) { - for _, err := range errs { - if err != nil { - fmt.Printf("> Err: %s\n", err) - } - } -} diff --git a/26-functions-and-pointers/xxx-finished/parser.go b/26-functions-and-pointers/xxx-finished/parser.go deleted file mode 100644 index 6253333..0000000 --- a/26-functions-and-pointers/xxx-finished/parser.go +++ /dev/null @@ -1,85 +0,0 @@ -package main - -import ( - "fmt" - "strconv" - "strings" -) - -// domain represents a domain log record -type domain struct { - name string - visits int -} - -// parser parses a log file and provides an iterator to iterate upon the domains -// -// the parser struct is carefully crafted to be usable using its zero values except the map field. -type parser struct { - sum map[string]int // visits per unique domain - domains []domain // unique domain names - total int // total visits to all domains - lines int // number of parsed lines (for the error messages) - err error // saves the last error occurred -} - -// newParser creates and returns a new parser. -func newParser() parser { - return parser{sum: make(map[string]int)} -} - -func add(p parser, line string) parser { - // if there was a previous error do not add - if p.err != nil { - return p - } - - dom, err := parse(p, line) - - // store only the last error - if err != nil { - p.err = err - return p - } - - return push(p, dom) -} - -// error returns the last error occurred -func err(p parser) error { - return p.err -} - -// parse parses the given text and returns a domain struct -func parse(p parser, line string) (dom domain, err error) { - p.lines++ // increase the parsed line counter (only write is here) - - fields := strings.Fields(line) - if len(fields) != 2 { - err = fmt.Errorf("wrong input: %v (line #%d)", fields, p.lines) - return - } - - name, visits := fields[0], fields[1] - - n, err := strconv.Atoi(visits) - if n < 0 || err != nil { - err = fmt.Errorf("wrong input: %q (line #%d)", visits, p.lines) - return - } - - return domain{name: name, visits: n}, nil -} - -// push pushes the given domain to the internal list of domains. -// it also increases the total visits for all the domains. -func push(p parser, d domain) parser { - // collect the unique domains - if _, ok := p.sum[d.name]; !ok { - p.domains = append(p.domains, d) - } - - p.sum[d.name] += d.visits - p.total += d.visits - return p -}