diff --git a/2020/day20/ex2.bash b/2020/day20/ex2.bash index 5354a88..440ae97 100755 --- a/2020/day20/ex2.bash +++ b/2020/day20/ex2.bash @@ -10,10 +10,10 @@ source tile.bash #declare -A strings declare -a strings T R B L RT RR RB RL nums -declare -a final +declare -a final finalfoo declare -A FINAL declare -a CORNER EDGE CENTRAL -declare -i count=-1 res=1 SQUARE +declare -i count=-1 SQUARE while read -r line; do case ${line:0:1} in @@ -152,6 +152,7 @@ for ((row=0; row0)) && break + + fliph_final + printf "FLIPH_DRAG\n" + for k in "${!finalfoo[@]}"; do + printf "%s\n" "${finalfoo[$k]}" + done + find_dragons + found=$? + ((found>0)) && break + fliph_final + + flipv_final + printf "FLIPV_DRAG\n" + for k in "${!finalfoo[@]}"; do + printf "%s\n" "${finalfoo[$k]}" + done + find_dragons + found=$? + ((found>0)) && break + flipv_final + + rotate_final + printf "ROTATE_DRAG\n" + for k in "${!finalfoo[@]}"; do + printf "%s\n" "${finalfoo[$k]}" done done - -printf "%s \n" "${final[@]}" +fullstr="${finalfoo[*]}" +fullstr="${fullstr//[. ]}" +sharp=${#fullstr} +printf "found=%d \n" $((sharp - found*15)) exit 0 diff --git a/2020/day20/tile.bash b/2020/day20/tile.bash index 158e929..4a60ea4 100755 --- a/2020/day20/tile.bash +++ b/2020/day20/tile.bash @@ -27,7 +27,83 @@ print_final() { done printf "\n" done +} +assemble_final() { + local k str + local -i l len r c + local -a tile + str=${strings[0]%% *} + len=${#str} + for ((r=0; r=0; --i)); do + line=${finalfoo[$i]} + for ((j=0; j=0; --j)); do + str2+=${str1:$j:1} + done + dst+=("$str2") + done + finalfoo=("${dst[@]}") +} + +final_add() { + local -i start=$1 r t + # shellcheck disable=SC2206 + local -a src=(${strings[$2]}) + + for ((r=1, t=$((start*8)); r<9; ++r, t++)); do + printf "adding tile %d row %d to final %d\n" "$2" "$r" "$t" + printf " %s -> " "${finalfoo[$t]}" + finalfoo[$t]+=${src[$r]:1:8} + printf "%s\n" "${finalfoo[$t]}" + done } trim_borders() { @@ -58,6 +134,7 @@ flip_h() { local str1 str2 # shellcheck disable=SC2206 local -a dst src=(${strings[$t]}) + local len=${#src[0]} local str1 str2 for ((i=0; i<10; ++i)); do str1=${src[$i]} @@ -82,8 +159,8 @@ r90() { #dst+=("$str2") done strings[$t]="${str2[*]}" - } + r180() { local -i t=$1 i j # shellcheck disable=SC2206