day12, example part 2
This commit is contained in:
parent
c187a03076
commit
42b587918e
|
@ -11,7 +11,7 @@ import (
|
||||||
func Run() int {
|
func Run() int {
|
||||||
fmt.Println("hello day 12.")
|
fmt.Println("hello day 12.")
|
||||||
|
|
||||||
filename := "day12/input"
|
filename := "day12/example1"
|
||||||
bytes, err := os.ReadFile(filename)
|
bytes, err := os.ReadFile(filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Sprintf("error reading file %s\n", filename))
|
panic(fmt.Sprintf("error reading file %s\n", filename))
|
||||||
|
@ -21,8 +21,7 @@ func Run() int {
|
||||||
text := string(bytes)
|
text := string(bytes)
|
||||||
text = strings.TrimSpace(text)
|
text = strings.TrimSpace(text)
|
||||||
|
|
||||||
// testMask := "???????#??.????####?"
|
// testMask, testBlocks := ReadLine(".??..??...?##. 1,1,3")
|
||||||
// testBlocks := []int{1, 1, 1, 1, 1, 6}
|
|
||||||
// blocksSum := 0
|
// blocksSum := 0
|
||||||
// for _, block := range testBlocks {
|
// for _, block := range testBlocks {
|
||||||
// blocksSum += block
|
// blocksSum += block
|
||||||
|
@ -54,6 +53,17 @@ func Run() int {
|
||||||
return result
|
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
|
// ???.### 1,1,3
|
||||||
func ReadLine(line string) (string, []int) {
|
func ReadLine(line string) (string, []int) {
|
||||||
firstSplit := strings.Split(line, " ")
|
firstSplit := strings.Split(line, " ")
|
||||||
|
@ -61,7 +71,11 @@ func ReadLine(line string) (string, []int) {
|
||||||
panic(fmt.Sprintf("error splitting %s into 2", line))
|
panic(fmt.Sprintf("error splitting %s into 2", line))
|
||||||
}
|
}
|
||||||
mask := firstSplit[0]
|
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))
|
blockLengs := make([]int, len(blockLengthStrings))
|
||||||
|
|
||||||
for i, blockLenStr := range 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 {
|
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)
|
// log.Printf("> entering with %s\n", curString)
|
||||||
if len(blockLengths) == 0 {
|
if len(blockLengths) == 0 {
|
||||||
|
|
Loading…
Reference in New Issue