From e6563a9ad71e005d77be4d5875e15837442c6985 Mon Sep 17 00:00:00 2001 From: Daniel Aberger Date: Sat, 4 Dec 2021 22:35:53 +0100 Subject: [PATCH] 3rd: refactor / remove redundancy --- pkg/three/three.go | 52 +++++++++++++++++----------------------------- 1 file changed, 19 insertions(+), 33 deletions(-) diff --git a/pkg/three/three.go b/pkg/three/three.go index 20b1007..785a619 100644 --- a/pkg/three/three.go +++ b/pkg/three/three.go @@ -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,7 +60,7 @@ func calcCO2(values [][]int) int { 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])) @@ -75,38 +75,24 @@ func getMostCommonValues(values [][]int) []int { } for k := range result { if ones[k] > zeros[k] { - result[k] = 1 + if least { + result[k] = 0 + } else { + 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])) - 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]++ + if least { + result[k] = 1 + } else { + result[k] = 0 } } - } - for k := range result { - if ones[k] > zeros[k] { - result[k] = 0 - } else { - result[k] = 1 - } if ones[k] == zeros[k] { - result[k] = 0 + if least { + result[k] = 0 + } else { + result[k] = 1 + } } } return result