This commit is contained in:
2021-12-12 11:28:43 +01:00
parent e8d8ecd468
commit 013c76a977
3 changed files with 68 additions and 0 deletions

32
12/01.sh Executable file
View 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[@]}

35
12/02.sh Executable file
View File

@@ -0,0 +1,35 @@
#!/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[@]}