#!/usr/bin/env tclsh8.6 while {[gets stdin line] >= 0} { if {$line eq ""} continue set len [string length $line] lappend list [scan $line %b] } set oxy $list set mask [expr {2**($len-1)}] while {[llength $oxy] > 1} { # puts "mask = $mask length = [llength $oxy]" # Which bit is most common? set zero 0; set one 0 foreach n $oxy { if {($n & $mask) > 0} {incr one} else {incr zero} } if {$one >= $zero} {set keepbit $mask} else {set keepbit 0} # Discard undesirables. set new [list] foreach n $oxy { if {($n & $mask) == $keepbit} {lappend new $n} } set oxy $new # Don't forget: set mask [expr {$mask / 2}] } puts "oxy = [lindex $oxy 0]" set co2 $list set mask [expr {2**($len-1)}] while {[llength $co2] > 1} { # puts "mask = $mask length = [llength $co2]" # Which bit is most common? set zero 0; set one 0 foreach n $co2 { if {($n & $mask) > 0} {incr one} else {incr zero} } if {$zero <= $one} {set keepbit 0} else {set keepbit $mask} # Discard undesirables. set new [list] foreach n $co2 { if {($n & $mask) == $keepbit} {lappend new $n} } set co2 $new # Don't forget: set mask [expr {$mask / 2}] } puts "co2 = [lindex $co2 0]" puts "product = [expr {[lindex $oxy 0] * [lindex $co2 0]}]"