diff --git a/README.md b/README.md new file mode 100644 index 0000000..c66d629 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# domainer diff --git a/domainer.go b/domainer.go new file mode 100644 index 0000000..8371f87 --- /dev/null +++ b/domainer.go @@ -0,0 +1,45 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strings" +) + +func extractRootDomain(domain string) string { + parts := strings.Split(domain, ".") + if len(parts) < 2 { + return "none" + } + return strings.Join(parts[len(parts)-2:], ".") +} + +func main() { + stat, _ := os.Stdin.Stat() + if (stat.Mode() & os.ModeCharDevice) != 0 { + fmt.Fprintln(os.Stderr, "Please provide domains via stdin.") + os.Exit(1) + } + + scanner := bufio.NewScanner(os.Stdin) + seenDomains := make(map[string]bool) + + for scanner.Scan() { + domain := scanner.Text() + rootDomain := extractRootDomain(domain) + if rootDomain != "none" { + seenDomains[rootDomain] = true + } + } + + if scanner.Err() != nil { + fmt.Fprintln(os.Stderr, "Error reading input:", scanner.Err()) + os.Exit(1) + } + + for domain := range seenDomains { + fmt.Println(domain) + } +} + diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..705d05e --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module github.com/topscoder/domainer + +go 1.20