diff --git a/23/01.sh b/23/01.sh new file mode 100755 index 0000000..acf273b --- /dev/null +++ b/23/01.sh @@ -0,0 +1,244 @@ +#!/bin/bash + +read line +read line +read line +read line2 +column_1=( ${line:3:1} ${line2:1:1} ) +column_2=( ${line:5:1} ${line2:3:1} ) +column_3=( ${line:7:1} ${line2:5:1} ) +column_4=( ${line:9:1} ${line2:7:1} ) +column_len=2 +declare -A energies +energies[A]=1 +energies[B]=10 +energies[C]=100 +energies[D]=1000 +min_energy=-1 + +declare -A encountered_configurations + +function move() { + local column_1=( ${1//_/ } ) + local column_2=( ${2//_/ } ) + local column_3=( ${3//_/ } ) + local column_4=( ${4//_/ } ) + local hallway=( ${5//_/ } ) + local energy=$6 + + if [ ${encountered_configurations[1$12$23$34$4H$5$6]} ]; then + return 0 + else + encountered_configurations[1$12$23$34$4H$5$6]=1 + fi + + if ! [[ $5 == *[ABCD]* ]] && ! [[ $1 == *[BCD]* ]] && ! [[ $2 == *[ACD]* ]] && ! [[ $3 == *[ABD]* ]] \ + && ! [[ $4 == *[ABC]* ]]; then + if [ $min_energy -lt 0 ] || [ $energy -lt $min_energy ]; then + min_energy=$energy + fi + fi + + if ! [[ $1 == *[BCD]* ]]; then + if [[ ${hallway[0]} == 'A' ]] && [[ ${hallway[1]} == "O" ]]; then + move '_A'$1 $2 $3 $4 'O'${5:1} $((energy+2+column_len-${#column_1[@]})) + fi + if [[ ${hallway[1]} == 'A' ]]; then + move '_A'$1 $2 $3 $4 ${5:0:2}'O'${5:3} $((energy+1+column_len-${#column_1[@]})) + fi + if [[ ${hallway[2]} == 'A' ]]; then + move '_A'$1 $2 $3 $4 ${5:0:4}'O'${5:5} $((energy+1+column_len-${#column_1[@]})) + fi + if [[ ${hallway[3]} == 'A' ]] && [[ ${hallway[2]} == "O" ]]; then + move '_A'$1 $2 $3 $4 ${5:0:6}'O'${5:7} $((energy+3+column_len-${#column_1[@]})) + fi + if [[ ${hallway[4]} == 'A' ]] && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[2]} == "O" ]]; then + move '_A'$1 $2 $3 $4 ${5:0:8}'O'${5:9} $((energy+5+column_len-${#column_1[@]})) + fi + if [[ ${hallway[5]} == 'A' ]] && [[ ${hallway[4]} == "O" ]] && [[ ${hallway[3]} == "O" ]] \ + && [[ ${hallway[2]} == "O" ]]; then + move '_A'$1 $2 $3 $4 ${5:0:10}'O'${5:11} $((energy+7+column_len-${#column_1[@]})) + fi + if [[ ${hallway[6]} == 'A' ]] && [[ ${hallway[5]} == "O" ]] && [[ ${hallway[4]} == "O" ]] \ + && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[2]} == "O" ]]; then + move '_A'$1 $2 $3 $4 ${5:0:12}'O' $((energy+8+column_len-${#column_1[@]})) + fi + elif [ ${#column_1[@]} -gt 0 ]; then + if [[ ${hallway[0]} == "O" ]] && [[ ${hallway[1]} == "O" ]]; then + move ${1:2} $2 $3 $4 ${column_1[0]}${5:1} $((energy+(3+column_len-${#column_1[@]})*${energies[${column_1[0]}]})) + fi + if [[ ${hallway[1]} == "O" ]]; then + move ${1:2} $2 $3 $4 ${5:0:2}${column_1[0]}${5:3} $((energy+(2+column_len-${#column_1[@]})*${energies[${column_1[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]]; then + move ${1:2} $2 $3 $4 ${5:0:4}${column_1[0]}${5:5} $((energy+(2+column_len-${#column_1[@]})*${energies[${column_1[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]]; then + move ${1:2} $2 $3 $4 ${5:0:6}${column_1[0]}${5:7} $((energy+(4+column_len-${#column_1[@]})*${energies[${column_1[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move ${1:2} $2 $3 $4 ${5:0:8}${column_1[0]}${5:9} $((energy+(6+column_len-${#column_1[@]})*${energies[${column_1[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]] \ + && [[ ${hallway[5]} == "O" ]]; then + move ${1:2} $2 $3 $4 ${5:0:10}${column_1[0]}${5:11} $((energy+(8+column_len-${#column_1[@]})*${energies[${column_1[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]] \ + && [[ ${hallway[5]} == "O" ]] && [[ ${hallway[6]} == "O" ]]; then + move ${1:2} $2 $3 $4 ${5:0:12}${column_1[0]} $((energy+(9+column_len-${#column_1[@]})*${energies[${column_1[0]}]})) + fi + fi + + if ! [[ $2 == *[ACD]* ]]; then + if [[ ${hallway[0]} == 'B' ]] && [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]]; then + move $1 '_B'$2 $3 $4 'O'${5:1} $((energy+(4+column_len-${#column_2[@]})*10)) + fi + if [[ ${hallway[1]} == 'B' ]] && [[ ${hallway[2]} == "O" ]]; then + move $1 '_B'$2 $3 $4 ${5:0:2}'O'${5:3} $((energy+(3+column_len-${#column_2[@]})*10)) + fi + if [[ ${hallway[2]} == 'B' ]]; then + move $1 '_B'$2 $3 $4 ${5:0:4}'O'${5:5} $((energy+(1+column_len-${#column_2[@]})*10)) + fi + if [[ ${hallway[3]} == 'B' ]]; then + move $1 '_B'$2 $3 $4 ${5:0:6}'O'${5:7} $((energy+(1+column_len-${#column_2[@]})*10)) + fi + if [[ ${hallway[4]} == 'B' ]] && [[ ${hallway[3]} == "O" ]]; then + move $1 '_B'$2 $3 $4 ${5:0:8}'O'${5:9} $((energy+(3+column_len-${#column_2[@]})*10)) + fi + if [[ ${hallway[5]} == 'B' ]] && [[ ${hallway[4]} == "O" ]] && [[ ${hallway[3]} == "O" ]]; then + move $1 '_B'$2 $3 $4 ${5:0:10}'O'${5:11} $((energy+(5+column_len-${#column_2[@]})*10)) + fi + if [[ ${hallway[6]} == 'B' ]] && [[ ${hallway[5]} == "O" ]] && [[ ${hallway[4]} == "O" ]] \ + && [[ ${hallway[3]} == "O" ]]; then + move $1 '_B'$2 $3 $4 ${5:0:12}'O' $((energy+(6+column_len-${#column_2[@]})*10)) + fi + elif [ ${#column_2[@]} -gt 0 ]; then + if [[ ${hallway[0]} == "O" ]] && [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]]; then + move $1 ${2:2} $3 $4 ${column_2[0]}${5:1} $((energy+(5+column_len-${#column_2[@]})*${energies[${column_2[0]}]})) + fi + if [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]]; then + move $1 ${2:2} $3 $4 ${5:0:2}${column_2[0]}${5:3} $((energy+(4+column_len-${#column_2[@]})*${energies[${column_2[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]]; then + move $1 ${2:2} $3 $4 ${5:0:4}${column_2[0]}${5:5} $((energy+(2+column_len-${#column_2[@]})*${energies[${column_2[0]}]})) + fi + if [[ ${hallway[3]} == "O" ]]; then + move $1 ${2:2} $3 $4 ${5:0:6}${column_2[0]}${5:7} $((energy+(2+column_len-${#column_2[@]})*${energies[${column_2[0]}]})) + fi + if [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 ${2:2} $3 $4 ${5:0:8}${column_2[0]}${5:9} $((energy+(4+column_len-${#column_2[@]})*${energies[${column_2[0]}]})) + fi + if [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]] && [[ ${hallway[5]} == "O" ]]; then + move $1 ${2:2} $3 $4 ${5:0:10}${column_2[0]}${5:11} $((energy+(6+column_len-${#column_2[@]})*${energies[${column_2[0]}]})) + fi + if [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]] && [[ ${hallway[5]} == "O" ]] \ + && [[ ${hallway[6]} == "O" ]]; then + move $1 ${2:2} $3 $4 ${5:0:12}${column_2[0]} $((energy+(7+column_len-${#column_2[@]})*${energies[${column_2[0]}]})) + fi + fi + + if ! [[ $3 == *[ABD]* ]]; then + if [[ ${hallway[0]} == 'C' ]] && [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]] \ + && [[ ${hallway[3]} == "O" ]]; then + move $1 $2 '_C'$3 $4 'O'${5:1} $((energy+(6+column_len-${#column_3[@]})*100)) + fi + if [[ ${hallway[1]} == 'C' ]] && [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]]; then + move $1 $2 '_C'$3 $4 ${5:0:2}'O'${5:3} $((energy+(5+column_len-${#column_3[@]})*100)) + fi + if [[ ${hallway[2]} == 'C' ]] && [[ ${hallway[3]} == "O" ]]; then + move $1 $2 '_C'$3 $4 ${5:0:4}'O'${5:5} $((energy+(3+column_len-${#column_3[@]})*100)) + fi + if [[ ${hallway[3]} == 'C' ]]; then + move $1 $2 '_C'$3 $4 ${5:0:6}'O'${5:7} $((energy+(1+column_len-${#column_3[@]})*100)) + fi + if [[ ${hallway[4]} == 'C' ]]; then + move $1 $2 '_C'$3 $4 ${5:0:8}'O'${5:9} $((energy+(1+column_len-${#column_3[@]})*100)) + fi + if [[ ${hallway[5]} == 'C' ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 '_C'$3 $4 ${5:0:10}'O'${5:11} $((energy+(3+column_len-${#column_3[@]})*100)) + fi + if [[ ${hallway[6]} == 'C' ]] && [[ ${hallway[5]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 '_C'$3 $4 ${5:0:12}'O' $((energy+(4+column_len-${#column_3[@]})*100)) + fi + elif [ ${#column_3[@]} -gt 0 ]; then + if [[ ${hallway[0]} == "O" ]] && [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]] \ + && [[ ${hallway[3]} == "O" ]]; then + move $1 $2 ${3:2} $4 ${column_3[0]}${5:1} $((energy+(7+column_len-${#column_3[@]})*${energies[${column_3[0]}]})) + fi + if [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]]; then + move $1 $2 ${3:2} $4 ${5:0:2}${column_3[0]}${5:3} $((energy+(6+column_len-${#column_3[@]})*${energies[${column_3[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]]; then + move $1 $2 ${3:2} $4 ${5:0:4}${column_3[0]}${5:5} $((energy+(4+column_len-${#column_3[@]})*${energies[${column_3[0]}]})) + fi + if [[ ${hallway[3]} == "O" ]]; then + move $1 $2 ${3:2} $4 ${5:0:6}${column_3[0]}${5:7} $((energy+(2+column_len-${#column_3[@]})*${energies[${column_3[0]}]})) + fi + if [[ ${hallway[4]} == "O" ]]; then + move $1 $2 ${3:2} $4 ${5:0:8}${column_3[0]}${5:9} $((energy+(2+column_len-${#column_3[@]})*${energies[${column_3[0]}]})) + fi + if [[ ${hallway[4]} == "O" ]] && [[ ${hallway[5]} == "O" ]]; then + move $1 $2 ${3:2} $4 ${5:0:10}${column_3[0]}${5:11} $((energy+(4+column_len-${#column_3[@]})*${energies[${column_3[0]}]})) + fi + if [[ ${hallway[4]} == "O" ]] && [[ ${hallway[5]} == "O" ]] && [[ ${hallway[6]} == "O" ]]; then + move $1 $2 ${3:2} $4 ${5:0:12}${column_3[0]} $((energy+(5+column_len-${#column_3[@]})*${energies[${column_3[0]}]})) + fi + fi + + if ! [[ $4 == *[ABC]* ]]; then + if [[ ${hallway[0]} == 'D' ]] && [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]] \ + && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 '_D'$4 'O'${5:1} $((energy+(8+column_len-${#column_4[@]})*1000)) + fi + if [[ ${hallway[1]} == 'D' ]] && [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]] \ + && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 '_D'$4 ${5:0:2}'O'${5:3} $((energy+(7+column_len-${#column_4[@]})*1000)) + fi + if [[ ${hallway[2]} == 'D' ]] && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 '_D'$4 ${5:0:4}'O'${5:5} $((energy+(5+column_len-${#column_4[@]})*1000)) + fi + if [[ ${hallway[3]} == 'D' ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 '_D'$4 ${5:0:6}'O'${5:7} $((energy+(3+column_len-${#column_4[@]})*1000)) + fi + if [[ ${hallway[4]} == 'D' ]]; then + move $1 $2 $3 '_D'$4 ${5:0:8}'O'${5:9} $((energy+(1+column_len-${#column_4[@]})*1000)) + fi + if [[ ${hallway[5]} == 'D' ]]; then + move $1 $2 $3 '_D'$4 ${5:0:10}'O'${5:11} $((energy+(1+column_len-${#column_4[@]})*1000)) + fi + if [[ ${hallway[6]} == 'D' ]] && [[ ${hallway[5]} == "O" ]]; then + move $1 $2 $3 '_D'$4 ${5:0:12}'O' $((energy+(2+column_len-${#column_4[@]})*1000)) + fi + elif [ ${#column_4[@]} -gt 0 ]; then + if [[ ${hallway[0]} == "O" ]] && [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]] \ + && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 ${4:2} ${column_4[0]}${5:1} $((energy+(9+column_len-${#column_4[@]})*${energies[${column_4[0]}]})) + fi + if [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]] \ + && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 ${4:2} ${5:0:2}${column_4[0]}${5:3} $((energy+(8+column_len-${#column_4[@]})*${energies[${column_4[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 ${4:2} ${5:0:4}${column_4[0]}${5:5} $((energy+(6+column_len-${#column_4[@]})*${energies[${column_4[0]}]})) + fi + if [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 ${4:2} ${5:0:6}${column_4[0]}${5:7} $((energy+(4+column_len-${#column_4[@]})*${energies[${column_4[0]}]})) + fi + if [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 ${4:2} ${5:0:8}${column_4[0]}${5:9} $((energy+(2+column_len-${#column_4[@]})*${energies[${column_4[0]}]})) + fi + if [[ ${hallway[5]} == "O" ]]; then + move $1 $2 $3 ${4:2} ${5:0:10}${column_4[0]}${5:11} $((energy+(2+column_len-${#column_4[@]})*${energies[${column_4[0]}]})) + fi + if [[ ${hallway[5]} == "O" ]] && [[ ${hallway[6]} == "O" ]]; then + move $1 $2 $3 ${4:2} ${5:0:12}${column_4[0]} $((energy+(3+column_len-${#column_4[@]})*${energies[${column_4[0]}]})) + fi + fi +} + +column_1_str=${column_1[@]} +column_2_str=${column_2[@]} +column_3_str=${column_3[@]} +column_4_str=${column_4[@]} +move _${column_1_str// /_}_ _${column_2_str// /_}_ _${column_3_str// /_}_ _${column_4_str// /_}_ "O_O_O_O_O_O_O" 0 +echo $min_energy diff --git a/23/02.sh b/23/02.sh new file mode 100755 index 0000000..0f6a5dc --- /dev/null +++ b/23/02.sh @@ -0,0 +1,244 @@ +#!/bin/bash + +read line +read line +read line +read line2 +column_1=( ${line:3:1} D D ${line2:1:1} ) +column_2=( ${line:5:1} C B ${line2:3:1} ) +column_3=( ${line:7:1} B A ${line2:5:1} ) +column_4=( ${line:9:1} A C ${line2:7:1} ) +column_len=4 +declare -A energies +energies[A]=1 +energies[B]=10 +energies[C]=100 +energies[D]=1000 +min_energy=10000000000 + +declare -A encountered_configurations + +function move() { + local column_1=( ${1//_/ } ) + local column_2=( ${2//_/ } ) + local column_3=( ${3//_/ } ) + local column_4=( ${4//_/ } ) + local hallway=( ${5//_/ } ) + local energy=$6 + + if [ ${encountered_configurations[1$12$23$34$4H$5$6]} ]; then + return 0 + else + encountered_configurations[1$12$23$34$4H$5$6]=1 + fi + + if ! [[ $5 == *[ABCD]* ]] && ! [[ $1 == *[BCD]* ]] && ! [[ $2 == *[ACD]* ]] && ! [[ $3 == *[ABD]* ]] \ + && ! [[ $4 == *[ABC]* ]]; then + if [ $energy -lt $min_energy ]; then + min_energy=$energy + fi + fi + + if ! [[ $1 == *[BCD]* ]]; then + if [[ ${hallway[0]} == 'A' ]] && [[ ${hallway[1]} == "O" ]]; then + move '_A'$1 $2 $3 $4 'O'${5:1} $((energy+2+column_len-${#column_1[@]})) + fi + if [[ ${hallway[1]} == 'A' ]]; then + move '_A'$1 $2 $3 $4 ${5:0:2}'O'${5:3} $((energy+1+column_len-${#column_1[@]})) + fi + if [[ ${hallway[2]} == 'A' ]]; then + move '_A'$1 $2 $3 $4 ${5:0:4}'O'${5:5} $((energy+1+column_len-${#column_1[@]})) + fi + if [[ ${hallway[3]} == 'A' ]] && [[ ${hallway[2]} == "O" ]]; then + move '_A'$1 $2 $3 $4 ${5:0:6}'O'${5:7} $((energy+3+column_len-${#column_1[@]})) + fi + if [[ ${hallway[4]} == 'A' ]] && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[2]} == "O" ]]; then + move '_A'$1 $2 $3 $4 ${5:0:8}'O'${5:9} $((energy+5+column_len-${#column_1[@]})) + fi + if [[ ${hallway[5]} == 'A' ]] && [[ ${hallway[4]} == "O" ]] && [[ ${hallway[3]} == "O" ]] \ + && [[ ${hallway[2]} == "O" ]]; then + move '_A'$1 $2 $3 $4 ${5:0:10}'O'${5:11} $((energy+7+column_len-${#column_1[@]})) + fi + if [[ ${hallway[6]} == 'A' ]] && [[ ${hallway[5]} == "O" ]] && [[ ${hallway[4]} == "O" ]] \ + && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[2]} == "O" ]]; then + move '_A'$1 $2 $3 $4 ${5:0:12}'O' $((energy+8+column_len-${#column_1[@]})) + fi + elif [ ${#column_1[@]} -gt 0 ]; then + if [[ ${hallway[0]} == "O" ]] && [[ ${hallway[1]} == "O" ]]; then + move ${1:2} $2 $3 $4 ${column_1[0]}${5:1} $((energy+(3+column_len-${#column_1[@]})*${energies[${column_1[0]}]})) + fi + if [[ ${hallway[1]} == "O" ]]; then + move ${1:2} $2 $3 $4 ${5:0:2}${column_1[0]}${5:3} $((energy+(2+column_len-${#column_1[@]})*${energies[${column_1[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]]; then + move ${1:2} $2 $3 $4 ${5:0:4}${column_1[0]}${5:5} $((energy+(2+column_len-${#column_1[@]})*${energies[${column_1[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]]; then + move ${1:2} $2 $3 $4 ${5:0:6}${column_1[0]}${5:7} $((energy+(4+column_len-${#column_1[@]})*${energies[${column_1[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move ${1:2} $2 $3 $4 ${5:0:8}${column_1[0]}${5:9} $((energy+(6+column_len-${#column_1[@]})*${energies[${column_1[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]] \ + && [[ ${hallway[5]} == "O" ]]; then + move ${1:2} $2 $3 $4 ${5:0:10}${column_1[0]}${5:11} $((energy+(8+column_len-${#column_1[@]})*${energies[${column_1[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]] \ + && [[ ${hallway[5]} == "O" ]] && [[ ${hallway[6]} == "O" ]]; then + move ${1:2} $2 $3 $4 ${5:0:12}${column_1[0]} $((energy+(9+column_len-${#column_1[@]})*${energies[${column_1[0]}]})) + fi + fi + + if ! [[ $2 == *[ACD]* ]]; then + if [[ ${hallway[0]} == 'B' ]] && [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]]; then + move $1 '_B'$2 $3 $4 'O'${5:1} $((energy+(4+column_len-${#column_2[@]})*10)) + fi + if [[ ${hallway[1]} == 'B' ]] && [[ ${hallway[2]} == "O" ]]; then + move $1 '_B'$2 $3 $4 ${5:0:2}'O'${5:3} $((energy+(3+column_len-${#column_2[@]})*10)) + fi + if [[ ${hallway[2]} == 'B' ]]; then + move $1 '_B'$2 $3 $4 ${5:0:4}'O'${5:5} $((energy+(1+column_len-${#column_2[@]})*10)) + fi + if [[ ${hallway[3]} == 'B' ]]; then + move $1 '_B'$2 $3 $4 ${5:0:6}'O'${5:7} $((energy+(1+column_len-${#column_2[@]})*10)) + fi + if [[ ${hallway[4]} == 'B' ]] && [[ ${hallway[3]} == "O" ]]; then + move $1 '_B'$2 $3 $4 ${5:0:8}'O'${5:9} $((energy+(3+column_len-${#column_2[@]})*10)) + fi + if [[ ${hallway[5]} == 'B' ]] && [[ ${hallway[4]} == "O" ]] && [[ ${hallway[3]} == "O" ]]; then + move $1 '_B'$2 $3 $4 ${5:0:10}'O'${5:11} $((energy+(5+column_len-${#column_2[@]})*10)) + fi + if [[ ${hallway[6]} == 'B' ]] && [[ ${hallway[5]} == "O" ]] && [[ ${hallway[4]} == "O" ]] \ + && [[ ${hallway[3]} == "O" ]]; then + move $1 '_B'$2 $3 $4 ${5:0:12}'O' $((energy+(6+column_len-${#column_2[@]})*10)) + fi + elif [ ${#column_2[@]} -gt 0 ]; then + if [[ ${hallway[0]} == "O" ]] && [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]]; then + move $1 ${2:2} $3 $4 ${column_2[0]}${5:1} $((energy+(5+column_len-${#column_2[@]})*${energies[${column_2[0]}]})) + fi + if [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]]; then + move $1 ${2:2} $3 $4 ${5:0:2}${column_2[0]}${5:3} $((energy+(4+column_len-${#column_2[@]})*${energies[${column_2[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]]; then + move $1 ${2:2} $3 $4 ${5:0:4}${column_2[0]}${5:5} $((energy+(2+column_len-${#column_2[@]})*${energies[${column_2[0]}]})) + fi + if [[ ${hallway[3]} == "O" ]]; then + move $1 ${2:2} $3 $4 ${5:0:6}${column_2[0]}${5:7} $((energy+(2+column_len-${#column_2[@]})*${energies[${column_2[0]}]})) + fi + if [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 ${2:2} $3 $4 ${5:0:8}${column_2[0]}${5:9} $((energy+(4+column_len-${#column_2[@]})*${energies[${column_2[0]}]})) + fi + if [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]] && [[ ${hallway[5]} == "O" ]]; then + move $1 ${2:2} $3 $4 ${5:0:10}${column_2[0]}${5:11} $((energy+(6+column_len-${#column_2[@]})*${energies[${column_2[0]}]})) + fi + if [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]] && [[ ${hallway[5]} == "O" ]] \ + && [[ ${hallway[6]} == "O" ]]; then + move $1 ${2:2} $3 $4 ${5:0:12}${column_2[0]} $((energy+(7+column_len-${#column_2[@]})*${energies[${column_2[0]}]})) + fi + fi + + if ! [[ $3 == *[ABD]* ]]; then + if [[ ${hallway[0]} == 'C' ]] && [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]] \ + && [[ ${hallway[3]} == "O" ]]; then + move $1 $2 '_C'$3 $4 'O'${5:1} $((energy+(6+column_len-${#column_3[@]})*100)) + fi + if [[ ${hallway[1]} == 'C' ]] && [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]]; then + move $1 $2 '_C'$3 $4 ${5:0:2}'O'${5:3} $((energy+(5+column_len-${#column_3[@]})*100)) + fi + if [[ ${hallway[2]} == 'C' ]] && [[ ${hallway[3]} == "O" ]]; then + move $1 $2 '_C'$3 $4 ${5:0:4}'O'${5:5} $((energy+(3+column_len-${#column_3[@]})*100)) + fi + if [[ ${hallway[3]} == 'C' ]]; then + move $1 $2 '_C'$3 $4 ${5:0:6}'O'${5:7} $((energy+(1+column_len-${#column_3[@]})*100)) + fi + if [[ ${hallway[4]} == 'C' ]]; then + move $1 $2 '_C'$3 $4 ${5:0:8}'O'${5:9} $((energy+(1+column_len-${#column_3[@]})*100)) + fi + if [[ ${hallway[5]} == 'C' ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 '_C'$3 $4 ${5:0:10}'O'${5:11} $((energy+(3+column_len-${#column_3[@]})*100)) + fi + if [[ ${hallway[6]} == 'C' ]] && [[ ${hallway[5]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 '_C'$3 $4 ${5:0:12}'O' $((energy+(4+column_len-${#column_3[@]})*100)) + fi + elif [ ${#column_3[@]} -gt 0 ]; then + if [[ ${hallway[0]} == "O" ]] && [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]] \ + && [[ ${hallway[3]} == "O" ]]; then + move $1 $2 ${3:2} $4 ${column_3[0]}${5:1} $((energy+(7+column_len-${#column_3[@]})*${energies[${column_3[0]}]})) + fi + if [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]]; then + move $1 $2 ${3:2} $4 ${5:0:2}${column_3[0]}${5:3} $((energy+(6+column_len-${#column_3[@]})*${energies[${column_3[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]]; then + move $1 $2 ${3:2} $4 ${5:0:4}${column_3[0]}${5:5} $((energy+(4+column_len-${#column_3[@]})*${energies[${column_3[0]}]})) + fi + if [[ ${hallway[3]} == "O" ]]; then + move $1 $2 ${3:2} $4 ${5:0:6}${column_3[0]}${5:7} $((energy+(2+column_len-${#column_3[@]})*${energies[${column_3[0]}]})) + fi + if [[ ${hallway[4]} == "O" ]]; then + move $1 $2 ${3:2} $4 ${5:0:8}${column_3[0]}${5:9} $((energy+(2+column_len-${#column_3[@]})*${energies[${column_3[0]}]})) + fi + if [[ ${hallway[4]} == "O" ]] && [[ ${hallway[5]} == "O" ]]; then + move $1 $2 ${3:2} $4 ${5:0:10}${column_3[0]}${5:11} $((energy+(4+column_len-${#column_3[@]})*${energies[${column_3[0]}]})) + fi + if [[ ${hallway[4]} == "O" ]] && [[ ${hallway[5]} == "O" ]] && [[ ${hallway[6]} == "O" ]]; then + move $1 $2 ${3:2} $4 ${5:0:12}${column_3[0]} $((energy+(5+column_len-${#column_3[@]})*${energies[${column_3[0]}]})) + fi + fi + + if ! [[ $4 == *[ABC]* ]]; then + if [[ ${hallway[0]} == 'D' ]] && [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]] \ + && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 '_D'$4 'O'${5:1} $((energy+(8+column_len-${#column_4[@]})*1000)) + fi + if [[ ${hallway[1]} == 'D' ]] && [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]] \ + && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 '_D'$4 ${5:0:2}'O'${5:3} $((energy+(7+column_len-${#column_4[@]})*1000)) + fi + if [[ ${hallway[2]} == 'D' ]] && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 '_D'$4 ${5:0:4}'O'${5:5} $((energy+(5+column_len-${#column_4[@]})*1000)) + fi + if [[ ${hallway[3]} == 'D' ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 '_D'$4 ${5:0:6}'O'${5:7} $((energy+(3+column_len-${#column_4[@]})*1000)) + fi + if [[ ${hallway[4]} == 'D' ]]; then + move $1 $2 $3 '_D'$4 ${5:0:8}'O'${5:9} $((energy+(1+column_len-${#column_4[@]})*1000)) + fi + if [[ ${hallway[5]} == 'D' ]]; then + move $1 $2 $3 '_D'$4 ${5:0:10}'O'${5:11} $((energy+(1+column_len-${#column_4[@]})*1000)) + fi + if [[ ${hallway[6]} == 'D' ]] && [[ ${hallway[5]} == "O" ]]; then + move $1 $2 $3 '_D'$4 ${5:0:12}'O' $((energy+(2+column_len-${#column_4[@]})*1000)) + fi + elif [ ${#column_4[@]} -gt 0 ]; then + if [[ ${hallway[0]} == "O" ]] && [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]] \ + && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 ${4:2} ${column_4[0]}${5:1} $((energy+(9+column_len-${#column_4[@]})*${energies[${column_4[0]}]})) + fi + if [[ ${hallway[1]} == "O" ]] && [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]] \ + && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 ${4:2} ${5:0:2}${column_4[0]}${5:3} $((energy+(8+column_len-${#column_4[@]})*${energies[${column_4[0]}]})) + fi + if [[ ${hallway[2]} == "O" ]] && [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 ${4:2} ${5:0:4}${column_4[0]}${5:5} $((energy+(6+column_len-${#column_4[@]})*${energies[${column_4[0]}]})) + fi + if [[ ${hallway[3]} == "O" ]] && [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 ${4:2} ${5:0:6}${column_4[0]}${5:7} $((energy+(4+column_len-${#column_4[@]})*${energies[${column_4[0]}]})) + fi + if [[ ${hallway[4]} == "O" ]]; then + move $1 $2 $3 ${4:2} ${5:0:8}${column_4[0]}${5:9} $((energy+(2+column_len-${#column_4[@]})*${energies[${column_4[0]}]})) + fi + if [[ ${hallway[5]} == "O" ]]; then + move $1 $2 $3 ${4:2} ${5:0:10}${column_4[0]}${5:11} $((energy+(2+column_len-${#column_4[@]})*${energies[${column_4[0]}]})) + fi + if [[ ${hallway[5]} == "O" ]] && [[ ${hallway[6]} == "O" ]]; then + move $1 $2 $3 ${4:2} ${5:0:12}${column_4[0]} $((energy+(3+column_len-${#column_4[@]})*${energies[${column_4[0]}]})) + fi + fi +} + +column_1_str=${column_1[@]} +column_2_str=${column_2[@]} +column_3_str=${column_3[@]} +column_4_str=${column_4[@]} +move _${column_1_str// /_}_ _${column_2_str// /_}_ _${column_3_str// /_}_ _${column_4_str// /_}_ "O_O_O_O_O_O_O" 0 +echo $min_energy