This commit is contained in:
2021-12-20 20:38:33 +01:00
parent a581c6b1bd
commit 467f8f499a
2 changed files with 214 additions and 0 deletions

107
20/01.sh Executable file
View File

@@ -0,0 +1,107 @@
#!/bin/bash
read line
enhancement=( $(sed -e 's/\./ 0 /g' -e 's/\#/ 1 /g' <<< $line) )
read line
declare -A image
invisible_pixels_color=0
i=0
i_max=0
i_min=0
j_min=0
while read line; do
j_max=${#line}
for ((j=0;j<j_max;j++)); do
if [[ ${line:$j:1} == '.' ]]; then
image[$i,$j]=0
else
image[$i,$j]=1
fi
done
i=$((i+1))
done
i_max=$i
for ((nb_iter=0;nb_iter<2;nb_iter++)); do
declare -A new_image
i_min=$((i_min-1))
j_min=$((j_min-1))
i_max=$((i_max+1))
j_max=$((j_max+1))
for ((i=i_min;i<i_max;i++)); do
for ((j=j_min;j<j_max;j++)); do
if [ -z ${image[$i,$j]} ]; then
image[$i,$j]=$invisible_pixels_color
fi
done
done
for ((i=i_min;i<i_max;i++)); do
for ((j=j_min;j<j_max;j++)); do
new_color=''
if [ $i -gt $i_min ]; then
if [ $j -gt $j_min ]; then
new_color=$new_color${image[$((i-1)),$((j-1))]}
else
new_color=$new_color$invisible_pixels_color
fi
new_color=$new_color${image[$((i-1)),$j]}
if [ $j -lt $((j_max-1)) ]; then
new_color=$new_color${image[$((i-1)),$((j+1))]}
else
new_color=$new_color$invisible_pixels_color
fi
else
new_color=$new_color$invisible_pixels_color$invisible_pixels_color$invisible_pixels_color
fi
if [ $j -gt $j_min ]; then
new_color=$new_color${image[$i,$((j-1))]}
else
new_color=$new_color$invisible_pixels_color
fi
new_color=$new_color${image[$i,$j]}
if [ $j -lt $((j_max-1)) ]; then
new_color=$new_color${image[$i,$((j+1))]}
else
new_color=$new_color$invisible_pixels_color
fi
if [ $i -lt $((i_max-1)) ]; then
if [ $j -gt $j_min ]; then
new_color=$new_color${image[$((i+1)),$((j-1))]}
else
new_color=$new_color$invisible_pixels_color
fi
new_color=$new_color${image[$((i+1)),$j]}
if [ $j -lt $((j_max-1)) ]; then
new_color=$new_color${image[$((i+1)),$((j+1))]}
else
new_color=$new_color$invisible_pixels_color
fi
else
new_color=$new_color$invisible_pixels_color$invisible_pixels_color$invisible_pixels_color
fi
new_image[$i,$j]=${enhancement[$((2#${new_color}))]}
done
done
for ((i=i_min;i<i_max;i++)); do
for ((j=j_min;j<j_max;j++)); do
image[$i,$j]=${new_image[$i,$j]}
done
done
if [ $invisible_pixels_color -eq 0 ]; then
invisible_pixels_color=${enhancement[0]}
else
invisible_pixels_color=${enhancement[511]}
fi
done
n_pixels_lit=0
for ((i=i_min;i<i_max;i++)); do
for ((j=j_min;j<j_max;j++)); do
if [ ${image[$i,$j]} -eq 1 ]; then
n_pixels_lit=$((n_pixels_lit+1))
fi
done
done
echo $n_pixels_lit

107
20/02.sh Executable file
View File

@@ -0,0 +1,107 @@
#!/bin/bash
read line
enhancement=( $(sed -e 's/\./ 0 /g' -e 's/\#/ 1 /g' <<< $line) )
read line
declare -A image
invisible_pixels_color=0
i=0
i_max=0
i_min=0
j_min=0
while read line; do
j_max=${#line}
for ((j=0;j<j_max;j++)); do
if [[ ${line:$j:1} == '.' ]]; then
image[$i,$j]=0
else
image[$i,$j]=1
fi
done
i=$((i+1))
done
i_max=$i
for ((nb_iter=0;nb_iter<50;nb_iter++)); do
declare -A new_image
i_min=$((i_min-1))
j_min=$((j_min-1))
i_max=$((i_max+1))
j_max=$((j_max+1))
for ((i=i_min;i<i_max;i++)); do
for ((j=j_min;j<j_max;j++)); do
if [ -z ${image[$i,$j]} ]; then
image[$i,$j]=$invisible_pixels_color
fi
done
done
for ((i=i_min;i<i_max;i++)); do
for ((j=j_min;j<j_max;j++)); do
new_color=''
if [ $i -gt $i_min ]; then
if [ $j -gt $j_min ]; then
new_color=$new_color${image[$((i-1)),$((j-1))]}
else
new_color=$new_color$invisible_pixels_color
fi
new_color=$new_color${image[$((i-1)),$j]}
if [ $j -lt $((j_max-1)) ]; then
new_color=$new_color${image[$((i-1)),$((j+1))]}
else
new_color=$new_color$invisible_pixels_color
fi
else
new_color=$new_color$invisible_pixels_color$invisible_pixels_color$invisible_pixels_color
fi
if [ $j -gt $j_min ]; then
new_color=$new_color${image[$i,$((j-1))]}
else
new_color=$new_color$invisible_pixels_color
fi
new_color=$new_color${image[$i,$j]}
if [ $j -lt $((j_max-1)) ]; then
new_color=$new_color${image[$i,$((j+1))]}
else
new_color=$new_color$invisible_pixels_color
fi
if [ $i -lt $((i_max-1)) ]; then
if [ $j -gt $j_min ]; then
new_color=$new_color${image[$((i+1)),$((j-1))]}
else
new_color=$new_color$invisible_pixels_color
fi
new_color=$new_color${image[$((i+1)),$j]}
if [ $j -lt $((j_max-1)) ]; then
new_color=$new_color${image[$((i+1)),$((j+1))]}
else
new_color=$new_color$invisible_pixels_color
fi
else
new_color=$new_color$invisible_pixels_color$invisible_pixels_color$invisible_pixels_color
fi
new_image[$i,$j]=${enhancement[$((2#${new_color}))]}
done
done
for ((i=i_min;i<i_max;i++)); do
for ((j=j_min;j<j_max;j++)); do
image[$i,$j]=${new_image[$i,$j]}
done
done
if [ $invisible_pixels_color -eq 0 ]; then
invisible_pixels_color=${enhancement[0]}
else
invisible_pixels_color=${enhancement[511]}
fi
done
n_pixels_lit=0
for ((i=i_min;i<i_max;i++)); do
for ((j=j_min;j<j_max;j++)); do
if [ ${image[$i,$j]} -eq 1 ]; then
n_pixels_lit=$((n_pixels_lit+1))
fi
done
done
echo $n_pixels_lit