This commit is contained in:
2021-12-23 23:15:17 +01:00
parent f08ab437f9
commit 962167e7bd
2 changed files with 488 additions and 0 deletions

244
23/01.sh Executable file
View File

@@ -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