#!/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"