#!/bin/bash length=0 n=0 lines=() while read line; do if [ $length -eq 0 ]; then length=${#line} fi curr_bit=${line:0:1} n=$((n+curr_bit)) lines+=($line) done oxygen_lines=(${lines[@]}) oxygen_tmp='' oxygen_n=$n co2_lines=(${lines[@]}) co2_tmp='' co2_n=$n for i in $(seq $length); do lines_number=${#oxygen_lines[@]} if [ $oxygen_n -ge $((lines_number/2)) ]; then oxygen_tmp=1 else oxygen_tmp=0 fi lines_number=${#co2_lines[@]} if [ $co2_n -lt $((lines_number/2)) ]; then co2_tmp=1 else co2_tmp=0 fi new_oxygen_lines=() oxygen_n=0 for line in ${oxygen_lines[@]}; do if [ ${#oxygen_lines[@]} -eq 1 ]; then new_oxygen_lines=(${oxygen_lines[@]}) break fi if [ ${line:$((i-1)):1} -eq $oxygen_tmp ]; then curr_bit=${line:$i:1} oxygen_n=$((oxygen_n+curr_bit)) new_oxygen_lines+=($line) fi done oxygen_lines=(${new_oxygen_lines[@]}) new_co2_lines=() co2_n=0 for line in ${co2_lines[@]}; do if [ ${#co2_lines[@]} -eq 1 ]; then new_co2_lines=(${co2_lines[@]}) break fi if [ ${line:$((i-1)):1} -eq $co2_tmp ]; then curr_bit=${line:$i:1} co2_n=$((co2_n+curr_bit)) new_co2_lines+=($line) fi done co2_lines=(${new_co2_lines[@]}) done echo "ibase=2;obase=A;$oxygen_lines*$co2_lines"|bc