Working day 20 part 2 en bash (before removing debug code)
This commit is contained in:
@@ -10,10 +10,10 @@ source tile.bash
|
|||||||
|
|
||||||
#declare -A strings
|
#declare -A strings
|
||||||
declare -a strings T R B L RT RR RB RL nums
|
declare -a strings T R B L RT RR RB RL nums
|
||||||
declare -a final
|
declare -a final finalfoo
|
||||||
declare -A FINAL
|
declare -A FINAL
|
||||||
declare -a CORNER EDGE CENTRAL
|
declare -a CORNER EDGE CENTRAL
|
||||||
declare -i count=-1 res=1 SQUARE
|
declare -i count=-1 SQUARE
|
||||||
|
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
case ${line:0:1} in
|
case ${line:0:1} in
|
||||||
@@ -152,6 +152,7 @@ for ((row=0; row<SQUARE; ++row)); do
|
|||||||
print_tile "$i"
|
print_tile "$i"
|
||||||
FINAL[0,0]="$i"
|
FINAL[0,0]="$i"
|
||||||
final+=("${nums[$i]}")
|
final+=("${nums[$i]}")
|
||||||
|
final_add "$row" "$i"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
################################## rest of 1st line
|
################################## rest of 1st line
|
||||||
@@ -178,6 +179,7 @@ for ((row=0; row<SQUARE; ++row)); do
|
|||||||
final+=("${nums[$j]}")
|
final+=("${nums[$j]}")
|
||||||
echo "c=$c"
|
echo "c=$c"
|
||||||
attach_left "$right" "$j"
|
attach_left "$right" "$j"
|
||||||
|
final_add "$row" "$j"
|
||||||
if ((col < SQUARE-1)); then
|
if ((col < SQUARE-1)); then
|
||||||
unset "EDGE[$index]"
|
unset "EDGE[$index]"
|
||||||
EDGE=("${EDGE[@]}")
|
EDGE=("${EDGE[@]}")
|
||||||
@@ -228,6 +230,7 @@ for ((row=0; row<SQUARE; ++row)); do
|
|||||||
final+=("${nums[$j]}")
|
final+=("${nums[$j]}")
|
||||||
echo "c=$c"
|
echo "c=$c"
|
||||||
attach_top "$bottom" "$j"
|
attach_top "$bottom" "$j"
|
||||||
|
final_add "$row" "$j"
|
||||||
if ((row < SQUARE-1)); then
|
if ((row < SQUARE-1)); then
|
||||||
unset "EDGE[$index]"
|
unset "EDGE[$index]"
|
||||||
EDGE=("${EDGE[@]}")
|
EDGE=("${EDGE[@]}")
|
||||||
@@ -265,6 +268,7 @@ for ((row=0; row<SQUARE; ++row)); do
|
|||||||
final+=("${nums[$j]}")
|
final+=("${nums[$j]}")
|
||||||
echo "c=$c"
|
echo "c=$c"
|
||||||
attach_top "$bottom" "$j"
|
attach_top "$bottom" "$j"
|
||||||
|
final_add "$row" "$j"
|
||||||
unset "EDGE[$index]"
|
unset "EDGE[$index]"
|
||||||
EDGE=("${EDGE[@]}")
|
EDGE=("${EDGE[@]}")
|
||||||
found=1
|
found=1
|
||||||
@@ -296,6 +300,7 @@ for ((row=0; row<SQUARE; ++row)); do
|
|||||||
final+=("${nums[$j]}")
|
final+=("${nums[$j]}")
|
||||||
echo "c=$c"
|
echo "c=$c"
|
||||||
attach_top "$bottom" "$j"
|
attach_top "$bottom" "$j"
|
||||||
|
final_add "$row" "$j"
|
||||||
unset "CENTRAL[$index]"
|
unset "CENTRAL[$index]"
|
||||||
CENTRAL=("${CENTRAL[@]}")
|
CENTRAL=("${CENTRAL[@]}")
|
||||||
found=1
|
found=1
|
||||||
@@ -323,20 +328,73 @@ print_final
|
|||||||
trim_borders
|
trim_borders
|
||||||
print_final
|
print_final
|
||||||
|
|
||||||
|
# dragon:
|
||||||
|
# 01234567890123456789
|
||||||
|
# 0 #
|
||||||
|
# 1 # ## ## ###
|
||||||
|
# 2 # # # # # #
|
||||||
|
find_dragons() {
|
||||||
|
local drag l1 l2 l3
|
||||||
|
local -i found=0 r c len
|
||||||
|
printf "square=%d\n" "$SQUARE"
|
||||||
|
len=${#finalfoo[@]}
|
||||||
|
for ((r=0; r<len-2; ++r)); do
|
||||||
|
l1=${finalfoo[$r]}
|
||||||
|
l2=${finalfoo[$((r+1))]}
|
||||||
|
l3=${finalfoo[$((r+2))]}
|
||||||
|
for ((c=0; c<len-20; ++c)); do
|
||||||
|
drag=${l1:$c+18:1}${l2:$c:1}${l2:$c+5:2}${l2:$c+11:2}${l2:$c+17:3}
|
||||||
|
drag+=${l3:$c+1:1}${l3:$c+4:1}${l3:$c+7:1}${l3:$c+10:1}${l3:$c+13:1}${l3:$c+16:1}
|
||||||
|
printf "dragon=%s len=%d\n" "$drag" "${#drag}"
|
||||||
|
if [[ "$drag" == '###############' ]]; then
|
||||||
|
printf "found dragon at (%d,%d)\n" "$r" "$c"
|
||||||
|
((found++))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
return $found
|
||||||
|
}
|
||||||
|
|
||||||
# dragon:
|
printf "\n"
|
||||||
# 01234567890123456789
|
for k in "${!finalfoo[@]}"; do
|
||||||
# #
|
printf "%s\n" "${finalfoo[$k]}"
|
||||||
# # ## ## ###
|
done
|
||||||
# # # # # # #
|
for ((i=0; i<4; ++i)); do
|
||||||
for ((r=0; r<SQUARE-2; ++r)); do
|
find_dragons
|
||||||
for ((c=18; c<SQUARE-1; ++c)); do
|
found=$?
|
||||||
:
|
((found>0)) && 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
|
||||||
done
|
done
|
||||||
|
|
||||||
|
fullstr="${finalfoo[*]}"
|
||||||
printf "%s \n" "${final[@]}"
|
fullstr="${fullstr//[. ]}"
|
||||||
|
sharp=${#fullstr}
|
||||||
|
printf "found=%d \n" $((sharp - found*15))
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
|
@@ -27,7 +27,83 @@ print_final() {
|
|||||||
done
|
done
|
||||||
printf "\n"
|
printf "\n"
|
||||||
done
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
assemble_final() {
|
||||||
|
local k str
|
||||||
|
local -i l len r c
|
||||||
|
local -a tile
|
||||||
|
str=${strings[0]%% *}
|
||||||
|
len=${#str}
|
||||||
|
for ((r=0; r<SQUARE; ++r)); do
|
||||||
|
for ((l=0; l<len; ++l)); do # each line
|
||||||
|
for ((c=0; c<SQUARE; ++c)); do
|
||||||
|
k=${FINAL[$r,$c]}
|
||||||
|
# shellcheck disable=SC2206
|
||||||
|
tile=(${strings[$k]})
|
||||||
|
str=${tile[$l]}
|
||||||
|
printf "%s " "$str"
|
||||||
|
done
|
||||||
|
printf "\n"
|
||||||
|
done
|
||||||
|
printf "\n"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
rotate_final() {
|
||||||
|
local -i i j len
|
||||||
|
local -a new
|
||||||
|
local line
|
||||||
|
len=${#finalfoo[@]}
|
||||||
|
printf "rotate foo. len=%d\n" "$len"
|
||||||
|
for ((i=len-1; i>=0; --i)); do
|
||||||
|
line=${finalfoo[$i]}
|
||||||
|
for ((j=0; j<len; ++j)); do
|
||||||
|
new[$j]+=${line:$j:1}
|
||||||
|
done
|
||||||
|
#dst+=("$str2")
|
||||||
|
done
|
||||||
|
finalfoo=("${new[@]}")
|
||||||
|
}
|
||||||
|
|
||||||
|
flipv_final() {
|
||||||
|
local -i i len
|
||||||
|
local -a dst
|
||||||
|
len=${#finalfoo[@]}
|
||||||
|
for ((i=0; i<len; ++i)); do
|
||||||
|
dst[$((len-1-i))]=${finalfoo[$i]}
|
||||||
|
done
|
||||||
|
finalfoo=("${dst[@]}")
|
||||||
|
}
|
||||||
|
|
||||||
|
fliph_final() {
|
||||||
|
local -i i j len
|
||||||
|
local str1 str2
|
||||||
|
local -a dst
|
||||||
|
local str1 str2
|
||||||
|
|
||||||
|
len=${#finalfoo[@]}
|
||||||
|
for ((i=0; i<len; ++i)); do
|
||||||
|
str1=${finalfoo[$i]}
|
||||||
|
str2=""
|
||||||
|
for ((j=len-1; 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() {
|
trim_borders() {
|
||||||
@@ -58,6 +134,7 @@ flip_h() {
|
|||||||
local str1 str2
|
local str1 str2
|
||||||
# shellcheck disable=SC2206
|
# shellcheck disable=SC2206
|
||||||
local -a dst src=(${strings[$t]})
|
local -a dst src=(${strings[$t]})
|
||||||
|
local len=${#src[0]}
|
||||||
local str1 str2
|
local str1 str2
|
||||||
for ((i=0; i<10; ++i)); do
|
for ((i=0; i<10; ++i)); do
|
||||||
str1=${src[$i]}
|
str1=${src[$i]}
|
||||||
@@ -82,8 +159,8 @@ r90() {
|
|||||||
#dst+=("$str2")
|
#dst+=("$str2")
|
||||||
done
|
done
|
||||||
strings[$t]="${str2[*]}"
|
strings[$t]="${str2[*]}"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
r180() {
|
r180() {
|
||||||
local -i t=$1 i j
|
local -i t=$1 i j
|
||||||
# shellcheck disable=SC2206
|
# shellcheck disable=SC2206
|
||||||
|
Reference in New Issue
Block a user