day 3 part 2 finally done, ugly though
This commit is contained in:
parent
91383fc6b0
commit
a1264d825b
52
03/main.go
52
03/main.go
@ -3,7 +3,6 @@ package main
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"math/bits"
|
||||
"os"
|
||||
"strconv"
|
||||
"time"
|
||||
@ -39,7 +38,7 @@ func partOne() {
|
||||
line := scanner.Text()
|
||||
lines++
|
||||
n, _ := strconv.ParseInt(line, 2, 64)
|
||||
for i := 0; i < bits.Len(uint(n)); i++ {
|
||||
for i := 0; i < len(line); i++ {
|
||||
// check if the number in the i'th column is 1, then bit-shift back to the 1s place to add it if it is
|
||||
r[i] += (n & (1 << i)) >> i
|
||||
}
|
||||
@ -60,7 +59,54 @@ func partOne() {
|
||||
func partTwo() {
|
||||
scanner := makeScanner(false)
|
||||
|
||||
var lines int
|
||||
inputs := map[int]int64{}
|
||||
var oxgen, co2scrub int64
|
||||
|
||||
var totalOnes, bitlen int64
|
||||
for scanner.Scan() {
|
||||
// line := scanner.Text()
|
||||
line := scanner.Text()
|
||||
n, _ := strconv.ParseInt(line, 2, 64)
|
||||
inputs[lines] = n
|
||||
bitlen = int64(len(line)) - 1
|
||||
totalOnes += n >> (bitlen)
|
||||
lines++
|
||||
}
|
||||
// make initial check
|
||||
if totalOnes >= int64(lines)/2 {
|
||||
oxgen += (1 << bitlen)
|
||||
} else {
|
||||
co2scrub += (1 << bitlen)
|
||||
}
|
||||
|
||||
for i := bitlen; i > 0; i-- {
|
||||
var oxOnes, oxZeroes, coOnes, coZeroes int64
|
||||
for _, n := range inputs {
|
||||
if oxgen>>i == n>>i {
|
||||
if oxgen>>(i-1)^n>>(i-1) == 1 {
|
||||
oxOnes++
|
||||
} else {
|
||||
oxZeroes++
|
||||
}
|
||||
}
|
||||
if co2scrub>>i == n>>i {
|
||||
if co2scrub>>(i-1)^n>>(i-1) == 1 {
|
||||
coOnes++
|
||||
} else {
|
||||
coZeroes++
|
||||
}
|
||||
}
|
||||
}
|
||||
if oxOnes >= oxZeroes {
|
||||
oxgen += (1 << (i - 1))
|
||||
}
|
||||
if coZeroes == 0 && coOnes != 0 {
|
||||
co2scrub += (1 << (i - 1))
|
||||
} else if coZeroes != 0 && coOnes == 0 {
|
||||
co2scrub += (0 << (i - 1))
|
||||
} else if coOnes < coZeroes {
|
||||
co2scrub += (1 << (i - 1))
|
||||
}
|
||||
}
|
||||
fmt.Println(oxgen * co2scrub)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user