Day 15
This commit is contained in:
60
15/02.sh
Executable file
60
15/02.sh
Executable 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))]}
|
||||
Reference in New Issue
Block a user