Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bufio"
- _ "bytes"
- "fmt"
- "os"
- "time"
- )
- func canonicalize(s string) string {
- c := s + s[:len(s)-1]
- best := s
- for i := 1; i < len(s); i++ {
- if c[i:i+len(s)] < best {
- best = c[i : i+len(s)]
- }
- }
- return best
- }
- func main() {
- seen := make(map[string][]string)
- // START TIMER
- start := time.Now()
- f, err := os.Open("/etc/passwd")
- if err != nil {
- // or check error by using error checking func in os package
- fmt.Println("err file i/o")
- return
- }
- defer f.Close()
- reader := bufio.NewReader(f)
- for {
- s, _, err := reader.ReadLine()
- if err != nil {
- break
- }
- word := string(s) // it's AoB
- n := canonicalize(word)
- seen[n] = append(seen[n], word)
- }
- for _, words := range seen {
- if len(words) == 4 {
- fmt.Printf("%v\n", words)
- break
- }
- }
- // END TIMER AND PRINT RESULT
- end := time.Now()
- fmt.Printf("Result: %s (%d) nano(%d)\n", end.Sub(start), end.Unix()-start.Unix(), end.UnixNano()-start.UnixNano())
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement