54 lines
		
	
	
		
			963 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			54 lines
		
	
	
		
			963 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								// 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"
							 | 
						||
| 
								 | 
							
									"sort"
							 | 
						||
| 
								 | 
							
									"strings"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func main() {
							 | 
						||
| 
								 | 
							
									p := newParser()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Scan the standard-in line by line
							 | 
						||
| 
								 | 
							
									in := bufio.NewScanner(os.Stdin)
							 | 
						||
| 
								 | 
							
									for in.Scan() {
							 | 
						||
| 
								 | 
							
										p.lines++
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										parsed, err := parse(p, in.Text())
							 | 
						||
| 
								 | 
							
										if err != nil {
							 | 
						||
| 
								 | 
							
											fmt.Println(err)
							 | 
						||
| 
								 | 
							
											return
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										p = update(p, parsed)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Print the visits per domain
							 | 
						||
| 
								 | 
							
									sort.Strings(p.domains)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									fmt.Printf("%-30s %10s\n", "DOMAIN", "VISITS")
							 | 
						||
| 
								 | 
							
									fmt.Println(strings.Repeat("-", 45))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									for _, domain := range p.domains {
							 | 
						||
| 
								 | 
							
										parsed := p.sum[domain]
							 | 
						||
| 
								 | 
							
										fmt.Printf("%-30s %10d\n", domain, parsed.visits)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Print the total visits for all domains
							 | 
						||
| 
								 | 
							
									fmt.Printf("\n%-30s %10d\n", "TOTAL", p.total)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Let's handle the error
							 | 
						||
| 
								 | 
							
									if err := in.Err(); err != nil {
							 | 
						||
| 
								 | 
							
										fmt.Println("> Err:", err)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |