From 6ed18289c89eaff3557907df63cf58bd2009b3ee Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Tue, 7 Dec 2021 14:26:36 +0100 Subject: Added the first days --- 2021/03/second.go | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 2021/03/second.go (limited to '2021/03/second.go') diff --git a/2021/03/second.go b/2021/03/second.go new file mode 100644 index 0000000..33938a1 --- /dev/null +++ b/2021/03/second.go @@ -0,0 +1,96 @@ +package main + +import ( + "bufio" + "fmt" + "log" + "os" +) + +func findBitCount(data []string) []int { + bits := make([]int, 12) + for _, line := range data { + for n := 0; n < 12; n++ { + if line[n] == '1' { + bits[n]++ + } + } + } + return bits +} + +func main() { + f, err := os.Open("input") + if err != nil { + log.Fatalf("%+v", err) + } + defer f.Close() + + scanner := bufio.NewScanner(f) + scanner.Split(bufio.ScanLines) + + data := make([]string, 0) + for scanner.Scan() { + data = append(data, scanner.Text()) + } + + datacsr := make([]string, len(data)) + copy(datacsr, data) + + var ogr int + for n := 0; n < 12; n++ { + if len(data) == 1 { + break + } + bits := findBitCount(data) + var i byte + if 2*bits[n] >= len(data) { + i = '1' + } else { + i = '0' + } + newdata := make([]string, 0) + for j := 0; j < len(data); j++ { + if data[j][n] == i { + newdata = append(newdata, data[j]) + } + } + data = newdata + } + for n := 0; n < 12; n++ { + ogr *= 2 + if data[0][n] == '1' { + ogr++ + } + } + + data = datacsr + var csr int + for n := 0; n < 12; n++ { + if len(data) == 1 { + break + } + bits := findBitCount(data) + var i byte + if 2*bits[n] < len(data) { + i = '1' + } else { + i = '0' + } + newdata := make([]string, 0) + for j := 0; j < len(data); j++ { + if data[j][n] == i { + newdata = append(newdata, data[j]) + } + } + data = newdata + } + for n := 0; n < 12; n++ { + csr *= 2 + if data[0][n] == '1' { + csr++ + } + } + + fmt.Println(ogr * csr) +} -- cgit v1.2.3