diff --git a/day12/dayTwelve.go b/day12/dayTwelve.go index 06b7946..af61b94 100644 --- a/day12/dayTwelve.go +++ b/day12/dayTwelve.go @@ -11,7 +11,7 @@ import ( func Run() int { fmt.Println("hello day 12.") - filename := "day12/input" + filename := "day12/example1" bytes, err := os.ReadFile(filename) if err != nil { panic(fmt.Sprintf("error reading file %s\n", filename)) @@ -21,8 +21,7 @@ func Run() int { text := string(bytes) text = strings.TrimSpace(text) - // testMask := "???????#??.????####?" - // testBlocks := []int{1, 1, 1, 1, 1, 6} + // testMask, testBlocks := ReadLine(".??..??...?##. 1,1,3") // blocksSum := 0 // for _, block := range testBlocks { // blocksSum += block @@ -54,6 +53,17 @@ func Run() int { return result } +func myRepeat(line, sep string, amount int) string { + acc := "" + for i := 0; i < amount; i++ { + acc += sep + acc += line + } + acc, _ = strings.CutPrefix(acc, sep) + + return acc +} + // ???.### 1,1,3 func ReadLine(line string) (string, []int) { firstSplit := strings.Split(line, " ") @@ -61,7 +71,11 @@ func ReadLine(line string) (string, []int) { panic(fmt.Sprintf("error splitting %s into 2", line)) } mask := firstSplit[0] - blockLengthStrings := strings.Split(firstSplit[1], ",") + mask = myRepeat(mask, "?", 5) + blocks := firstSplit[1] + blocks = myRepeat(blocks, ",", 5) + // log.Printf(">> repeating blocks %s", blocks) + blockLengthStrings := strings.Split(blocks, ",") blockLengs := make([]int, len(blockLengthStrings)) for i, blockLenStr := range blockLengthStrings { @@ -76,6 +90,11 @@ func ReadLine(line string) (string, []int) { } func generatePermutations(curString string, targetLength int, blockLengths []int, blockLengthsSum int, mask string) []string { + // fmt.Printf("> entering with \n%s\nfor map \n%s\n\n", curString, mask) + // time.Sleep(time.Second) + if !isVariantMatchesMask(curString, mask) { + return []string{} + } // log.Printf("> entering with %s\n", curString) if len(blockLengths) == 0 {