Files
advent-of-code-2021/03/02.sh
2021-12-03 11:20:46 +01:00

66 lines
1.3 KiB
Bash
Executable File

#!/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