5b.go (954B)
1 package main 2 3 import ( 4 "fmt" 5 "strconv" 6 "C" 7 "bufio" 8 "os" 9 ) 10 11 type limit struct { 12 lower C.longlong 13 upper C.longlong 14 } 15 16 var limits [1024]limit 17 var limitscount int = 0 18 19 func loadlimits() { 20 reader := bufio.NewReader(os.Stdin) 21 for { 22 line, _ := reader.ReadString('\n') 23 if len(line) == 0 { 24 break; 25 } 26 27 lower, _ := strconv.Atoi(line) 28 upper, _ := strconv.Atoi(strchr(line, '-') + 1) 29 30 limits[limitscount].lower = C.longlong(lower) 31 limits[limitscount].upper = C.longlong(upper) 32 limitscount++ 33 } 34 } 35 36 func hasappeared(id C.longlong, end limit) int { 37 for _, r := range limits { 38 if (r == end) { 39 break 40 } 41 if id <= r.upper && id >= r.lower { 42 goto seen 43 } 44 } 45 return 0 46 seen: 47 return 1 48 } 49 50 func main() { 51 total := 0 52 loadlimits(stdin) 53 54 for i := 0; i < limitscount; i++ { 55 for start := limits[i].lower; start <= limits[i].upper; start++ { 56 if hasappeared(start, limits[i]) == 0 { 57 total++ 58 } 59 } 60 } 61 fmt.Printf("%lld\n", total) 62 }