from time import time

result = 0
maxIterations = 0
cache = dict()
start_time = time()

def printTime(sec: int):
    mins = sec // 60
    hours = mins // 60
    mins = mins % 60
    sec = sec % 60
    print("Time: %02d:%02d:%02d" % (hours, mins, sec))

def collatz(value: int):
    currentValue = value

    if (value not in cache):
        if (currentValue % 2 == 0):
            currentValue //= 2
        else:
            currentValue = (currentValue * 3) + 1

        if (currentValue == 1):
            cache[value] = 1
        else:
            cache[value] = 1 + collatz(currentValue)

    return cache[value]

for i in range(1, 50 * 1000 * 1000):
    iterations = collatz(i)

    if (iterations > maxIterations):
        maxIterations = iterations
        result = i

end_time = time()
print("The number with the most iterations is " + str(result) + " with " + str(maxIterations) + " iterations.")
printTime(end_time - start_time)
