33 lines
575 B
Bash
33 lines
575 B
Bash
function sum_of_square_digits {
|
|
typeset -i n=$1 sum=0 d
|
|
while (( n )); do
|
|
(( d=n%10, sum+=d*d, n=n/10 ))
|
|
done
|
|
printf '%d\n' "$sum"
|
|
}
|
|
|
|
function is_happy {
|
|
typeset -i n=$1
|
|
typeset -a seen=()
|
|
while (( n != 1 )); do
|
|
if [[ -n ${seen[$n]} ]]; then
|
|
return 1
|
|
fi
|
|
seen[$n]=1
|
|
(( n=$(sum_of_square_digits "$n") ))
|
|
done
|
|
return 0
|
|
}
|
|
|
|
function first_n_happy {
|
|
typeset -i count=$1 n
|
|
for (( n=1; count; n+=1 )); do
|
|
if is_happy "$n"; then
|
|
printf '%d\n' "$n"
|
|
(( count -= 1 ))
|
|
fi
|
|
done
|
|
return 0
|
|
}
|
|
|
|
first_n_happy 8
|