59 lines
1.2 KiB
Bash
59 lines
1.2 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
FILE=input
|
|
# Sparse sequence
|
|
read -r -a SPARSE_ARRAY <<< "$(
|
|
INDEX=0
|
|
FILE_ID=0
|
|
while read -r CHAR
|
|
do
|
|
if [[ $(( INDEX % 2 )) -eq 0 ]]
|
|
then
|
|
for (( i=1; i<=$CHAR; i++ )) do printf "%s " "$FILE_ID"
|
|
done
|
|
(( FILE_ID++ ))
|
|
else
|
|
for (( i=1; i<=$CHAR; i++ ))
|
|
do
|
|
printf ". "
|
|
done
|
|
fi
|
|
(( INDEX++ ))
|
|
done <<< "$( sed -E 's/(.)/\1\n/g' "$FILE" | grep -v '^$' )"
|
|
)"
|
|
#printf "%s" "${SPARSE_ARRAY[@]}"
|
|
#printf "\n"
|
|
printf "Sparse array len: %s\n" "${#SPARSE_ARRAY[@]}"
|
|
|
|
# Reverse feed
|
|
read -r -a FEED_ARRAY <<< "$(
|
|
for (( i=0; i<${#SPARSE_ARRAY[@]}; i++ ))
|
|
do
|
|
if [[ ${SPARSE_ARRAY[i]} != "." ]]
|
|
then
|
|
printf "%s " "${SPARSE_ARRAY[i]}"
|
|
fi
|
|
done
|
|
)"
|
|
#printf "%s" "${FEED_ARRAY[@]}"
|
|
#printf "\n"
|
|
printf "Reverse feed len : %s\n" "${#FEED_ARRAY[@]}"
|
|
|
|
# Generate checksum for sparse array
|
|
CHECKSUM=0
|
|
i=0
|
|
j=$(( ${#FEED_ARRAY[@]} - 1 ))
|
|
for (( k=0; k<${#SPARSE_ARRAY[@]}; k++ ))
|
|
do
|
|
if [[ $i -gt $j ]]; then break ; fi
|
|
if [[ ${SPARSE_ARRAY[k]} == '.' ]]
|
|
then
|
|
(( CHECKSUM += k * FEED_ARRAY[j] ))
|
|
(( j-- ))
|
|
else
|
|
(( CHECKSUM += k * FEED_ARRAY[i] ))
|
|
(( i++ ))
|
|
fi
|
|
done
|
|
printf "%s" "$CHECKSUM"
|