Day 8b complete
Struggled with this challenge as well, had to consult the forums in order to get my head around it 😞
This commit is contained in:
parent
ec060003c4
commit
e3af9240d8
3
day8/day 8b/go.mod
Normal file
3
day8/day 8b/go.mod
Normal file
@ -0,0 +1,3 @@
|
||||
module PWD
|
||||
|
||||
go 1.17
|
147
day8/day 8b/main.go
Normal file
147
day8/day 8b/main.go
Normal file
@ -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
|
||||
}
|
1
day8/day 8b/testInput
Normal file
1
day8/day 8b/testInput
Normal file
@ -0,0 +1 @@
|
||||
16,1,2,0,4,2,7,1,2,14
|
Loading…
Reference in New Issue
Block a user