This wiki is in the process of being archived due to lack of usage and the resources necessary to serve it — predominately to bots, crawlers, and LLM companies. Edits are discouraged.
Pages are preserved as they were at the time of archival. For current information, please visit python.org.
If a change to this archive is absolutely needed, requests can be made via the infrastructure@python.org mailing list.

Python solutions and commentary for Programming Challenges

Index

Contents

  1. Problem 110101: The 3n + 1 problem

Problem 110101: The 3n + 1 problem

http://www.programming-challenges.com/pg.php?page=downloadproblem&probid=110101&format=html

 def memoized(fn):
 memoized_lengths = [0] * 1000000
 def fn2(n):
 if not memoized_lengths[n]:
 memoized_lengths[n] = fn(n)
 return memoized_lengths[n]
 return fn2

 @memoized
 def cycle_length(n):
 if n == 1: return 1
 if n % 2:
 return cycle_length(n * 3 + 1) + 1
 return cycle_length(n / 2) + 1
 
 def problem(i,j):
 return max([cycle_length(x) for x in range(i, j+1)])
 
 def test_cycle_length():
 assert cycle_length(22) == 16
 assert cycle_length(10) == 7
 assert cycle_length(11) == 15
 print 'OK'
 
 def test_problem():
 print 1, 10, problem(1, 10)
 print 100, 200, problem(100, 200)
 print 201, 210, problem(201, 210)
 print 900, 100, problem(900, 1000)
 
 if __name__ == '__main__': test_problem()

2026年02月14日 16:12

AltStyle によって変換されたページ (->オリジナル) /