Hailstone sequence: Difference between revisions

m
→‎{{header|Phix}}: added syntax colouring, marked p2js compatible
m (→‎{{header|Phix}}: added syntax colouring, marked p2js compatible)
Line 7,341:
=={{header|Phix}}==
Copy of [[Hailstone_sequence#Euphoria|Euphoria]]
<!--<lang Phix>function hailstone(atom nphixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
sequence s = {n}
<span style="color: #008080;">function</span> <span style="color: #000000;">hailstone</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">)</span>
while n!=1 do
<span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">n</span><span style="color: #0000FF;">}</span>
if remainder(n,2)=0 then
<span style="color: #008080;">while</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
n /= 2
<span style="color: #008080;">if</span> <span style="color: #7060A8;">remainder</span><span style="color: #0000FF;">(</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
else
<span style="color: #000000;">n</span> <span style="color: #0000FF;">/=</span> <span style="color: #000000;">2</span>
n = 3*n+1
<span style="color: #008080;">else</span>
end if
<span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">*</span><span style="color: #000000;">n</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span>
s &= n
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end while
<span style="color: #000000;">s</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">n</span>
return s
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
end function
<span style="color: #008080;">return</span> <span style="color: #000000;">s</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
function hailstone_count(atom n)
integer count = 1
<span style="color: #008080;">function</span> <span style="color: #000000;">hailstone_count</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">)</span>
while n!=1 do
<span style="color: #004080;">integer</span> <span style="color: #000000;">count</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
if remainder(n,2)=0 then
<span style="color: #008080;">while</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
n /= 2
<span style="color: #008080;">if</span> <span style="color: #7060A8;">remainder</span><span style="color: #0000FF;">(</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
else
<span style="color: #000000;">n</span> <span style="color: #0000FF;">/=</span> <span style="color: #000000;">2</span>
n = 3*n+1
<span style="color: #008080;">else</span>
end if
<span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">*</span><span style="color: #000000;">n</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span>
count += 1
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end while
<span style="color: #000000;">count</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
return count
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
end function
<span style="color: #008080;">return</span> <span style="color: #000000;">count</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
sequence s = hailstone(27)
integer ls = length(s)
<span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">hailstone</span><span style="color: #0000FF;">(</span><span style="color: #000000;">27</span><span style="color: #0000FF;">)</span>
s[5..-5] = {".."}
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"hailstone(27) = %v\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">shorten</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"numbers"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">)})</span>
puts(1,"hailstone(27) = ")
? s
<span style="color: #004080;">integer</span> <span style="color: #000000;">hmax</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">imax</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">count</span>
printf(1,"length = %d\n\n",ls)
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">2</span> <span style="color: #008080;">to</span> <span style="color: #000000;">1e5</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
 
<span style="color: #000000;">count</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">hailstone_count</span><span style="color: #0000FF;">(</span><span style="color: #000000;">i</span><span style="color: #0000FF;">)</span>
integer hmax = 1, imax = 1,count
<span style="color: #008080;">if</span> <span style="color: #000000;">count</span><span style="color: #0000FF;">></span><span style="color: #000000;">hmax</span> <span style="color: #008080;">then</span>
for i=2 to 1e5-1 do
<span style="color: #000000;">hmax</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">count</span>
count = hailstone_count(i)
<span style="color: #000000;">imax</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">i</span>
if count>hmax then
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
hmax = count
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
imax = i
end if
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"The longest hailstone sequence under 100,000 is %d with %d elements.\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">imax</span><span style="color: #0000FF;">,</span><span style="color: #000000;">hmax</span><span style="color: #0000FF;">})</span>
end for
<!--</lang>-->
 
printf(1,"The longest hailstone sequence under 100,000 is %d with %d elements.\n",{imax,hmax})</lang>
{{out}}
<pre>
hailstone(27) = {27,82,41,124,"...",8,4,2,1," (112 numbers)"}
The longest hailstone sequence under 100,000 is 77031 with 351 elements.
length = 112
 
The longest hailstone sequence under 100,000 is 77031 with 351 elements.
</pre>
 
7,794

edits