Jump to content

Hailstone sequence: Difference between revisions

→‎{{header|Python}}: Added a version with a generator function
(→‎{{header|Python}}: Added a version with a generator function)
Line 8,189:
{{out}}
<pre>Maximum length 351 was found for hailstone(77031) for numbers <100,000</pre>
 
===Using a generator===
<syntaxhighlight lang="python">from itertools import islice
 
 
def hailstone(n):
yield n
while n > 1:
n = 3 * n + 1 if n & 1 else n // 2
yield n
 
 
if __name__ == '__main__':
h = hailstone(27)
assert list(islice(h, 4)) == [27, 82, 41, 124]
for _ in range(112 - 4 * 2):
next(h)
assert list(islice(h, 4)) == [8, 4, 2, 1]
max_length, n = max((sum(1 for _ in hailstone(i)), i)
for i in range(1, 100_000))
print(f"Maximum length {max_length} was found for hailstone({n}) "
f"for numbers <100,000")</syntaxhighlight>
 
{{out}}
<pre>Maximum length 351 was found for hailstone(77031) for numbers <100,000</pre>
 
 
===Composition of pure functions===
6

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.