aoc

Thing1's 2025 aoc
Log | Files | Refs

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 }