This commit is contained in:
2021-12-15 16:53:29 +01:00
parent 1312fbc3fd
commit 11beb88b77
2 changed files with 108 additions and 0 deletions

48
15/01.sh Executable file
View File

@@ -0,0 +1,48 @@
#!/bin/bash
grid=()
risks_grid=()
i_max=0
j_max=0
while read line; do
j_max=${#line}
for ((j=0; j<j_max;j++)); do
grid+=( ${line:$j:1} )
risks_grid+=( -1 )
done
i_max=$((i_max+1))
done
risks_grid[0]=0
detected_paths=1
while [ $detected_paths -eq 1 ]; do
detected_paths=0
for ((i=0; i<i_max; i++)); do
for ((j=0; j<j_max; j++)); do
lowest_risk=$((9*i_max*j_max))
if [ $j -gt 0 ] && [ ${risks_grid[$((i*j_max+j-1))]} -lt $lowest_risk ] \
&& [ ${risks_grid[$((i*j_max+j-1))]} -ge 0 ]; then
lowest_risk=${risks_grid[$((i*j_max+j-1))]}
fi
if [ $j -lt $((j_max-1)) ] && [ ${risks_grid[$((i*j_max+j+1))]} -lt $lowest_risk ] \
&& [ ${risks_grid[$((i*j_max+j+1))]} -ge 0 ]; then
lowest_risk=${risks_grid[$((i*j_max+j+1))]}
fi
if [ $i -gt 0 ] && [ ${risks_grid[$(((i-1)*j_max+j))]} -lt $lowest_risk ] \
&& [ ${risks_grid[$(((i-1)*j_max+j))]} -ge 0 ]; then
lowest_risk=${risks_grid[$(((i-1)*j_max+j))]}
fi
if [ $i -lt $((i_max-1)) ] && [ ${risks_grid[$(((i+1)*j_max+j))]} -lt $lowest_risk ] \
&& [ ${risks_grid[$(((i+1)*j_max+j))]} -ge 0 ]; then
lowest_risk=${risks_grid[$(((i+1)*j_max+j))]}
fi
if [ ${risks_grid[$((i*j_max+j))]} -lt 0 ] \
|| [ ${risks_grid[$((i*j_max+j))]} -gt $((grid[i*j_max+j]+lowest_risk)) ]; then
risks_grid[$((i*j_max+j))]=$((grid[i*j_max+j]+lowest_risk))
detected_paths=1
fi
done
done
done
echo ${risks_grid[$((i_max*j_max-1))]}

60
15/02.sh Executable file
View File

@@ -0,0 +1,60 @@
#!/bin/bash
lines=()
grid=()
risks_grid=()
i_max=0
j_max=0
while read line; do
lines+=( $line )
done
for ((grid_iter_i=0; grid_iter_i<5; grid_iter_i++)); do
for line in ${lines[@]}; do
j_max=${#line}
for ((grid_iter_j=0; grid_iter_j<5; grid_iter_j++)); do
for ((j=0; j<j_max; j++)); do
grid+=( $(((${line:$j:1}-1+grid_iter_j+grid_iter_i)%9+1)) )
risks_grid+=( -1 )
done
done
i_max=$((i_max+1))
j_max=$((j_max*5))
done
done
risks_grid[0]=0
detected_paths=1
iter=0
while [ $detected_paths -eq 1 ]; do
detected_paths=0
for ((i=0; i<i_max; i++)); do
for ((j=0; j<j_max; j++)); do
lowest_risk=$((9*i_max*j_max))
if [ $j -gt 0 ] && [ ${risks_grid[$((i*j_max+j-1))]} -lt $lowest_risk ] \
&& [ ${risks_grid[$((i*j_max+j-1))]} -ge 0 ]; then
lowest_risk=${risks_grid[$((i*j_max+j-1))]}
fi
if [ $j -lt $((j_max-1)) ] && [ ${risks_grid[$((i*j_max+j+1))]} -lt $lowest_risk ] \
&& [ ${risks_grid[$((i*j_max+j+1))]} -ge 0 ]; then
lowest_risk=${risks_grid[$((i*j_max+j+1))]}
fi
if [ $i -gt 0 ] && [ ${risks_grid[$(((i-1)*j_max+j))]} -lt $lowest_risk ] \
&& [ ${risks_grid[$(((i-1)*j_max+j))]} -ge 0 ]; then
lowest_risk=${risks_grid[$(((i-1)*j_max+j))]}
fi
if [ $i -lt $((i_max-1)) ] && [ ${risks_grid[$(((i+1)*j_max+j))]} -lt $lowest_risk ] \
&& [ ${risks_grid[$(((i+1)*j_max+j))]} -ge 0 ]; then
lowest_risk=${risks_grid[$(((i+1)*j_max+j))]}
fi
if [ ${risks_grid[$((i*j_max+j))]} -lt 0 ] \
|| [ ${risks_grid[$((i*j_max+j))]} -gt $((grid[i*j_max+j]+lowest_risk)) ]; then
risks_grid[$((i*j_max+j))]=$((grid[i*j_max+j]+lowest_risk))
detected_paths=1
fi
done
done
iter=$((iter+1))
done
echo ${risks_grid[$((i_max*j_max-1))]}