Browse Source

Solved part2

Piotr Czajkowski 2 weeks ago
parent
commit
3fe35c486a
1 changed files with 41 additions and 1 deletions
  1. 41 1
      02/code.go

+ 41 - 1
02/code.go

@@ -5,6 +5,8 @@ import (
 	"fmt"
 	"log"
 	"os"
+	"strconv"
+	"strings"
 )
 
 func getRanges(data []byte) [][]int {
@@ -22,6 +24,42 @@ func getRanges(data []byte) [][]int {
 	return ranges
 }
 
+func parts(ranges [][]int) (int, int) {
+	invalid := make(map[int]int)
+	invalidRest := make(map[int]int)
+	for _, r := range ranges {
+		for i := r[0]; i <= r[1]; i++ {
+			s := strconv.Itoa(i)
+			if len(s)%2 == 0 {
+				half := len(s) / 2
+				if s[:half] == s[half:] {
+					invalid[i]++
+					continue
+				}
+			}
+
+			if len(s) > 1 {
+				ds := s + s
+				if strings.Contains(ds[1:len(ds)-2], s) {
+					invalidRest[i]++
+				}
+			}
+		}
+	}
+
+	var part1 int
+	for key, value := range invalid {
+		part1 += key * value
+	}
+
+	var part2 int
+	for key, value := range invalidRest {
+		part2 += key * value
+	}
+
+	return part1, part1 + part2
+}
+
 func main() {
 	if len(os.Args) < 2 {
 		log.Fatal("You need to specify a file!")
@@ -33,5 +71,7 @@ func main() {
 	}
 
 	ranges := getRanges(data)
-	fmt.Println(ranges)
+	part1, part2 := parts(ranges)
+	fmt.Println("Part1:", part1)
+	fmt.Println("Part2:", part2)
 }