3rd: refactor / remove redundancy

This commit is contained in:
Daniel Aberger
2021-12-04 22:35:53 +01:00
parent 062cc5c7cb
commit e6563a9ad7
+18 -32
View File
@@ -20,10 +20,10 @@ func calcOxygen(values [][]int) int {
valueStore := make([][][]int, 0) valueStore := make([][][]int, 0)
valueStore = append(valueStore, values) valueStore = append(valueStore, values)
for i := 0; i < len(values[0]); i++ { for i := 0; i < len(values[0]); i++ {
frequencyMap := getMostCommonValues(valueStore[i]) commonValues := getCommonValues(valueStore[i], false)
newValues := make([][]int, 0) newValues := make([][]int, 0)
for _, v := range valueStore[i] { for _, v := range valueStore[i] {
if v[i] == frequencyMap[i] { if v[i] == commonValues[i] {
newValues = append(newValues, v) newValues = append(newValues, v)
} }
} }
@@ -42,10 +42,10 @@ func calcCO2(values [][]int) int {
valueStore := make([][][]int, 0) valueStore := make([][][]int, 0)
valueStore = append(valueStore, values) valueStore = append(valueStore, values)
for i := 0; i < len(values[0]); i++ { for i := 0; i < len(values[0]); i++ {
frequencyMap := getLeastCommonValues(valueStore[i]) commonValues := getCommonValues(valueStore[i], true)
newValues := make([][]int, 0) newValues := make([][]int, 0)
for _, v := range valueStore[i] { for _, v := range valueStore[i] {
if v[i] == frequencyMap[i] { if v[i] == commonValues[i] {
newValues = append(newValues, v) newValues = append(newValues, v)
} }
} }
@@ -60,33 +60,7 @@ func calcCO2(values [][]int) int {
return convertToDecimal(valueStore[len(valueStore)-1][0]) return convertToDecimal(valueStore[len(valueStore)-1][0])
} }
func getMostCommonValues(values [][]int) []int { func getCommonValues(values [][]int, least bool) []int {
ones := make([]int, len(values[0]))
zeros := make([]int, len(values[0]))
result := make([]int, len(values[0]))
for _, v := range values {
for i, b := range v {
if b == 1 {
ones[i]++
} else if b == 0 {
zeros[i]++
}
}
}
for k := range result {
if ones[k] > zeros[k] {
result[k] = 1
} else {
result[k] = 0
}
if ones[k] == zeros[k] {
result[k] = 1
}
}
return result
}
func getLeastCommonValues(values [][]int) []int {
ones := make([]int, len(values[0])) ones := make([]int, len(values[0]))
zeros := make([]int, len(values[0])) zeros := make([]int, len(values[0]))
result := make([]int, len(values[0])) result := make([]int, len(values[0]))
@@ -101,14 +75,26 @@ func getLeastCommonValues(values [][]int) []int {
} }
for k := range result { for k := range result {
if ones[k] > zeros[k] { if ones[k] > zeros[k] {
if least {
result[k] = 0 result[k] = 0
} else { } else {
result[k] = 1 result[k] = 1
} }
if ones[k] == zeros[k] { } else {
if least {
result[k] = 1
} else {
result[k] = 0 result[k] = 0
} }
} }
if ones[k] == zeros[k] {
if least {
result[k] = 0
} else {
result[k] = 1
}
}
}
return result return result
} }