diff --git a/04/01.sh b/04/01.sh new file mode 100755 index 0000000..cc502c3 --- /dev/null +++ b/04/01.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +read line +inputs=( ${line//,/ } ) +read line +grid_size=5 +i=0 +conditions='' +columns=() +first_win=0 +first_score=0 +victory_condition=() +for j in $(seq $grid_size); do + columns+='' + victory_condition+=('X') +done +victory_condition=${victory_condition[@]} + +while read line; do + if [[ ! -z "$line" ]] && [ $i -lt $grid_size ]; then + conditions=${conditions}$line' ; ' + current=($line) + for j in $(seq $grid_size); do + columns[$((j-1))]=${columns[$((j-1))]}${current[$((j-1))]}' ' + done + i=$((i+1)) + fi + if [ $i -eq $grid_size ]; then + i=0 + for j in $(seq $grid_size); do + conditions=${conditions}${columns[$((j-1))]}'; ' + done + + conditions='; '$conditions + for j in $(seq ${#inputs[@]}); do + conditions=${conditions// ${inputs[$((j-1))]} / X } + if [[ "$conditions" == *"$victory_condition"* ]]; then + current_score=$(sed 's/;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*; $//' <<< $conditions) + current_score=$(sed 's/[X; ]/+/g' <<< $current_score) + current_score=$(sed 's/\+\++/+/g' <<< $current_score) + current_score=$(sed 's/\+*$//' <<< $current_score) + current_score=$((current_score)) + current_score=$((current_score*inputs[j-1])) + if [ $first_win -eq 0 ] || [ $j -lt $first_win ]; then + first_win=$j + first_score=$current_score + fi + break + fi + done + + conditions='' + columns=() + for j in $(seq $grid_size); do + columns+='' + done + fi +done + +echo $first_score diff --git a/04/02.sh b/04/02.sh new file mode 100755 index 0000000..0376c33 --- /dev/null +++ b/04/02.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +read line +inputs=( ${line//,/ } ) +read line +grid_size=5 +i=0 +conditions='' +columns=() +last_win=0 +last_score=0 +victory_condition=() +for j in $(seq $grid_size); do + columns+='' + victory_condition+=('X') +done +victory_condition=${victory_condition[@]} + +while read line; do + if [[ ! -z "$line" ]] && [ $i -lt $grid_size ]; then + conditions=${conditions}$line' ; ' + current=($line) + for j in $(seq $grid_size); do + columns[$((j-1))]=${columns[$((j-1))]}${current[$((j-1))]}' ' + done + i=$((i+1)) + fi + if [ $i -eq $grid_size ]; then + i=0 + for j in $(seq $grid_size); do + conditions=${conditions}${columns[$((j-1))]}'; ' + done + + conditions='; '$conditions + for j in $(seq ${#inputs[@]}); do + conditions=${conditions// ${inputs[$((j-1))]} / X } + if [[ "$conditions" == *"$victory_condition"* ]]; then + current_score=$(sed 's/;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*; $//' <<< $conditions) + current_score=$(sed 's/[X; ]/+/g' <<< $current_score) + current_score=$(sed 's/\+\++/+/g' <<< $current_score) + current_score=$(sed 's/\+*$//' <<< $current_score) + current_score=$((current_score)) + current_score=$((current_score*inputs[j-1])) + if [ $last_win -eq 0 ] || [ $j -gt $last_win ]; then + last_win=$j + last_score=$current_score + fi + break + fi + done + + conditions='' + columns=() + for j in $(seq $grid_size); do + columns+='' + done + fi +done + +echo $last_score