36 lines
1.1 KiB
Bash
Executable File
36 lines
1.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
declare -A transitions
|
|
while read line; do
|
|
first=$(sed 's/-.*$//' <<< $line)
|
|
last=$(sed 's/^.*-//' <<< $line)
|
|
transitions[$first]=${transitions[$first]}','$last','
|
|
transitions[$last]=${transitions[$last]}','$first','
|
|
done
|
|
|
|
paths=()
|
|
|
|
find_paths() {
|
|
local current_path=( ${1//,/ } )
|
|
local marked_caves=$2
|
|
local visited_twice=$3
|
|
local current_transitions=${transitions[${current_path[-1]}]}
|
|
current_transitions=( ${current_transitions//,/ } )
|
|
local current_transition
|
|
for current_transition in ${current_transitions[@]}; do
|
|
if [[ $current_transition == 'end' ]]; then
|
|
paths+=( $1','$current_transition',' )
|
|
elif [[ ${current_transition:0:1} == [A-Z] ]]; then
|
|
find_paths $1','$current_transition',' $marked_caves $visited_twice
|
|
elif ! [[ $marked_caves == *','$current_transition','* ]]; then
|
|
find_paths $1','$current_transition',' $marked_caves','$current_transition',' $visited_twice
|
|
elif [ $visited_twice -eq 0 ] && ! [[ $current_transition == 'start' ]]; then
|
|
find_paths $1','$current_transition',' $marked_caves 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
find_paths ',start,' ',start,' 0
|
|
|
|
echo ${#paths[@]}
|