48 lines
890 B
Awk
48 lines
890 B
Awk
function bin2num( s ){
|
|
num = 0
|
|
for(i=1;i<=length(s);i++)
|
|
num += lshift( substr(s,i,1), length(s)-i)
|
|
return num
|
|
}
|
|
|
|
BEGIN{ FS="" }
|
|
|
|
{
|
|
a[NR] = $0
|
|
b[NR] = $0
|
|
count += $1
|
|
}
|
|
|
|
END{
|
|
bita = count>=NR/2
|
|
bitb = ! bita
|
|
|
|
for(nbit = 1; nbit<=NF; nbit++){
|
|
if (length(a)>1) delete sela
|
|
if (length(b)>1) delete selb
|
|
|
|
pa = 1; pb=1
|
|
counta = 0; countb = 0
|
|
for(i=1; i<=length(a); i++){
|
|
if( substr(a[i],nbit,1) == bita ){
|
|
sela[pa++] = a[i]
|
|
counta += substr(a[i],nbit+1,1)
|
|
}
|
|
}
|
|
for(i=1; i<=length(b); i++){
|
|
if( substr(b[i],nbit,1) == bitb ){
|
|
selb[pb++] = b[i]
|
|
countb += substr(b[i],nbit+1,1)
|
|
}
|
|
}
|
|
bita = counta>=(length(sela)/2)
|
|
bitb = countb<(length(selb)/2)
|
|
delete a; delete b;
|
|
for(i=1; i<=length(sela); i++) a[i] = sela[i]
|
|
for(i=1; i<=length(selb); i++) b[i] = selb[i]
|
|
}
|
|
oxy = bin2num(sela[1])
|
|
co2 = bin2num(selb[1])
|
|
print oxy, co2, oxy*co2
|
|
}
|