Happy numbers: Difference between revisions
Content deleted Content added
Added BBC BASIC |
→{{header|Ursala}}: Add UNIX shell version |
||
Line 1,918: | Line 1,918: | ||
puts "the first 8 happy numbers are: [list $happy]"</lang> |
puts "the first 8 happy numbers are: [list $happy]"</lang> |
||
<pre>the first 8 happy numbers are: {1 7 10 13 19 23 28 31}</pre> |
<pre>the first 8 happy numbers are: {1 7 10 13 19 23 28 31}</pre> |
||
=={{header|UNIX Shell}}== |
|||
<lang bash>#!/bin/bash |
|||
function sum_of_square_digits |
|||
{ |
|||
local -i n="$1" sum=0 |
|||
while (( n )); do |
|||
local -i d=n%10 |
|||
let sum+=d*d |
|||
let n=n/10 |
|||
done |
|||
echo "$sum" |
|||
} |
|||
function is_happy? |
|||
{ |
|||
local -i n="$1" |
|||
local seen=() |
|||
while (( n != 1 )); do |
|||
if [ -n "${seen[$n]}" ]; then |
|||
return 1 |
|||
fi |
|||
seen[n]=1 |
|||
let n="$(sum_of_square_digits "$n")" |
|||
done |
|||
return 0 |
|||
} |
|||
function first_n_happy |
|||
{ |
|||
local -i count="$1" |
|||
local -i n |
|||
for (( n=0; count; n+=1 )); do |
|||
if is_happy? "$n"; then |
|||
echo "$n" |
|||
let count-=1 |
|||
fi |
|||
done |
|||
return 0 |
|||
} |
|||
first_n_happy 8</lang> |
|||
=={{header|Ursala}}== |
=={{header|Ursala}}== |