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 = append(valueStore, values)
for i := 0; i < len(values[0]); i++ {
frequencyMap := getMostCommonValues(valueStore[i])
commonValues := getCommonValues(valueStore[i], false)
newValues := make([][]int, 0)
for _, v := range valueStore[i] {
if v[i] == frequencyMap[i] {
if v[i] == commonValues[i] {
newValues = append(newValues, v)
}
}
@@ -42,10 +42,10 @@ func calcCO2(values [][]int) int {
valueStore := make([][][]int, 0)
valueStore = append(valueStore, values)
for i := 0; i < len(values[0]); i++ {
frequencyMap := getLeastCommonValues(valueStore[i])
commonValues := getCommonValues(valueStore[i], true)
newValues := make([][]int, 0)
for _, v := range valueStore[i] {
if v[i] == frequencyMap[i] {
if v[i] == commonValues[i] {
newValues = append(newValues, v)
}
}
@@ -60,33 +60,7 @@ func calcCO2(values [][]int) int {
return convertToDecimal(valueStore[len(valueStore)-1][0])
}
func getMostCommonValues(values [][]int) []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 {
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]))
@@ -101,14 +75,26 @@ func getLeastCommonValues(values [][]int) []int {
}
for k := range result {
if ones[k] > zeros[k] {
if least {
result[k] = 0
} else {
result[k] = 1
}
if ones[k] == zeros[k] {
} else {
if least {
result[k] = 1
} else {
result[k] = 0
}
}
if ones[k] == zeros[k] {
if least {
result[k] = 0
} else {
result[k] = 1
}
}
}
return result
}