From 1d06c8c2f7094cd58ae13acd76cfa6b195352090 Mon Sep 17 00:00:00 2001 From: Pierre Jeanjean Date: Fri, 3 Dec 2021 11:20:46 +0100 Subject: [PATCH] Day 3 --- 03/01.sh | 29 +++++++++++++++++++++++++ 03/02.sh | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100755 03/01.sh create mode 100755 03/02.sh diff --git a/03/01.sh b/03/01.sh new file mode 100755 index 0000000..39197ed --- /dev/null +++ b/03/01.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +length=0 +n_array=() +lines_number=0 +while read line; do + if [ $length -eq 0 ]; then + length=${#line} + n_array=($(for j in $(seq $length); do echo 0; done)) + fi + for i in $(seq $length); do + curr_bit=${line:$((i-1)):1} + n_array[$((i-1))]=$((n_array[i-1]+curr_bit)) + done + lines_number=$((lines_number+1)) +done + +gamma_rate='' +epsilon_rate='' +for i in $(seq $length); do + if [ ${n_array[$((i-1))]} -ge $((lines_number/2)) ]; then + gamma_rate=${gamma_rate}1 + epsilon_rate=${epsilon_rate}0 + else + gamma_rate=${gamma_rate}0 + epsilon_rate=${epsilon_rate}1 + fi +done +echo "ibase=2;obase=A;$gamma_rate*$epsilon_rate"|bc diff --git a/03/02.sh b/03/02.sh new file mode 100755 index 0000000..05e1b10 --- /dev/null +++ b/03/02.sh @@ -0,0 +1,65 @@ +#!/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