diff --git a/day8/day 8b/go.mod b/day8/day 8b/go.mod new file mode 100644 index 0000000..e938e2e --- /dev/null +++ b/day8/day 8b/go.mod @@ -0,0 +1,3 @@ +module PWD + +go 1.17 diff --git a/day8/day 8b/main.go b/day8/day 8b/main.go new file mode 100644 index 0000000..caf46e6 --- /dev/null +++ b/day8/day 8b/main.go @@ -0,0 +1,147 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strings" +) + +func main() { + content := returnContent("../input") + //content := returnContent("testInput") + + //Assisted Solution + + /*struggled quite a bit on this challenge, + looked at a pre-comepleted solution in order + to get a valid answer */ + + sum := 0 + + for _, line := range *content { + split := strings.Split(line, " | ") + + lhs := split[0] + rhs := split[1] + + lhsDigits := strings.Fields(lhs) + rhsDigits := strings.Fields(rhs) + + one := "" + four := "" + seven := "" + eight := "" + var len5 []string + var len6 []string + for _, digit := range lhsDigits { + switch len(digit) { + case 2: + one = digit + case 4: + four = digit + case 3: + seven = digit + case 7: + eight = digit + case 5: + len5 = append(len5, digit) + case 6: + len6 = append(len6, digit) + } + } + + zero := "" + six := "" + nine := "" + for _, digit := range len6 { + switch inCommon(digit, four) { + case 4: + nine = digit + case 3: + if inCommon(digit, seven) == 3 { + zero = digit + } else { + six = digit + } + } + } + + two := "" + three := "" + five := "" + for _, digit := range len5 { + if inCommon(digit, nine) == 5 { + if inCommon(digit, seven) == 3 { + three = digit + } else { + five = digit + } + } else { + two = digit + } + } + + var answerDigits [4]int + for i, digit := range rhsDigits { + if len(digit) == 6 && inCommon(digit, zero) == 6 { + answerDigits[i] = 0 + } else if len(digit) == 2 && inCommon(digit, one) == 2 { + answerDigits[i] = 1 + } else if len(digit) == 5 && inCommon(digit, two) == 5 { + answerDigits[i] = 2 + } else if len(digit) == 5 && inCommon(digit, three) == 5 { + answerDigits[i] = 3 + } else if len(digit) == 4 && inCommon(digit, four) == 4 { + answerDigits[i] = 4 + } else if len(digit) == 5 && inCommon(digit, five) == 5 { + answerDigits[i] = 5 + } else if len(digit) == 6 && inCommon(digit, six) == 6 { + answerDigits[i] = 6 + } else if len(digit) == 3 && inCommon(digit, seven) == 3 { + answerDigits[i] = 7 + } else if len(digit) == 7 && inCommon(digit, eight) == 7 { + answerDigits[i] = 8 + } else { + answerDigits[i] = 9 + } + } + + sum += 1000*answerDigits[0] + 100*answerDigits[1] + 10*answerDigits[2] + answerDigits[3] + } + + fmt.Println(sum) + +} + +func inCommon(a string, b string) (count int) { + for _, m := range a { + for _, n := range b { + if m == n { + count++ + } + } + } + + return count +} + +func returnContent(path string) *[]string { + //read file and return it as an array of integers + + file, err := os.Open(path) + var content []string + + if err != nil { + fmt.Println("Unlucky, the file didn't open") + return &content + } + defer file.Close() + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + content = append(content, scanner.Text()) + } + + return &content +} diff --git a/day8/day 8b/testInput b/day8/day 8b/testInput new file mode 100644 index 0000000..2bdd92f --- /dev/null +++ b/day8/day 8b/testInput @@ -0,0 +1 @@ +16,1,2,0,4,2,7,1,2,14 \ No newline at end of file