advent-of-code/12021/03/03_2.awk

74 lines
1.1 KiB
Awk

NR==1{ n = length($0); }
{
a[NR] = $0
b[NR] = $0
ocount += substr($1,1,1)
}
END{
gamma = ""
epsilon = ""
g = 0
e = 0
len = NR
count = ocount
for(nbit = 1; nbit<=n; nbit++){
bit = count>=len/2
print nbit, "bit", bit
delete sel
i=1
count = 0
for(r=1;r<=len;r++){
print a[r]
if( substr(a[r],nbit,1) == bit ){
sel[i] = a[r]
count += substr(a[r],nbit+1,1)
i++
}
}
delete a
for(i=1;i<=length(sel);i++){
a[i] = sel[i]
}
len = length(sel)
print length(sel)
if (len == 1)
break
}
oxygen = sel[1]
len = NR
count = ocount
for(nbit = 1; nbit<=n; nbit++){
bit = count<len/2
print nbit, "bit", bit
delete sel
i=1
count = 0
for(r=1;r<=len;r++){
print b[r]
if( substr(b[r],nbit,1) == bit ){
sel[i] = b[r]
count += substr(b[r],nbit+1,1)
i++
}
}
delete b
for(i=1;i<=length(sel);i++){
b[i] = sel[i]
}
len = length(sel)
print length(sel)
if (len==1)
break
}
co2 = sel[1]
print oxygen, co2
for(i=1;i<=n;i++){
o += lshift( substr(oxygen,i,1), n-i)
c += lshift( substr(co2,i,1), n-i)
}
print o, c, o*c
}