Day 12
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
**/input.txt
|
**/input.txt
|
||||||
|
**/example.txt
|
||||||
|
|||||||
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[@]}
|
||||||
35
12/02.sh
Executable file
35
12/02.sh
Executable 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[@]}
|
||||||
Reference in New Issue
Block a user