Day 12
This commit is contained in:
32
12/01.sh
Executable file
32
12/01.sh
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/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 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
|
||||
elif ! [[ $marked_caves == *','$current_transition','* ]]; then
|
||||
find_paths $1','$current_transition',' $marked_caves','$current_transition','
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
find_paths ',start,' ',start,'
|
||||
|
||||
echo ${#paths[@]}
|
||||
Reference in New Issue
Block a user