42 lines
1.3 KiB
Bash
42 lines
1.3 KiB
Bash
sumto100() {
|
|
typeset expr sum max_count=0 max_values i
|
|
typeset -A histogram
|
|
printf 'Strings that evaluate to 100:\n'
|
|
for expr in {,-}1{,+,-}2{,+,-}3{,+,-}4{,+,-}5{,+,-}6{,+,-}7{,+,-}8{,+,-}9
|
|
do
|
|
(( sum = expr ))
|
|
if (( sum == 100 )); then
|
|
printf '\t%s\n' "$expr"
|
|
fi
|
|
histogram[$sum]=$(( ${histogram[$sum]:-0}+1 ))
|
|
if (( histogram[$sum] > max_count )); then
|
|
(( max_count = histogram[$sum] ))
|
|
max_values=( $sum )
|
|
elif (( histogram[$sum] == max_count )); then
|
|
max_values+=( $sum )
|
|
fi
|
|
done
|
|
printf '\nMost solutions for any number is %d: ' "$max_count"
|
|
if [[ -n $ZSH_VERSION ]]; then
|
|
printf '%s\n\n' "${(j:, :)max_values}"
|
|
else
|
|
printf '%s' "${max_values[0]}"
|
|
printf ', %s' "${max_values[@]:1}"
|
|
printf '\n\n'
|
|
fi
|
|
|
|
for (( i=1; i<123456789; ++i )); do
|
|
if (( !histogram[$i] )); then
|
|
printf "Lowest positive sum that can't be expressed: %d\n\n" "$i"
|
|
break
|
|
fi
|
|
done
|
|
printf 'Ten highest reachable numbers:\n';
|
|
if [[ -n $ZSH_VERSION ]]; then
|
|
printf '\t%9d\n' "${(k@)histogram}"
|
|
else
|
|
printf '\t%9d\n' "${!histogram[@]}"
|
|
fi | sort -nr | head -n 10
|
|
}
|
|
|
|
sumto100
|