• + 0 comments

    My solution using Python.

    #!/bin/python3
    
    from functools import lru_cache
    import math
    import os
    import random
    import re
    import sys
    
    #
    # Complete the 'strangeCounter' function below.
    #
    # The function is expected to return a LONG_INTEGER.
    # The function accepts LONG_INTEGER t as parameter.
    #
    class Cycle:
        def __init__(self, start_time, initial_value, length):
            self.start_time = start_time
            self.initial_value = initial_value
            self.length = length
            self.end_time = start_time + length - 1
    
        def __repr__(self):
            return f"Cycle(start_time={self.start_time}, initial_value={self.initial_value}, length={self.length}, end_time={self.end_time})"
    
    def generate_cycles(limit):
        cycles = []
        start_time = 1
        initial_value = 3
        while start_time <= limit:
            cycle_length = initial_value
            cycle = Cycle(start_time, initial_value, cycle_length)
            cycles.append(cycle)
            start_time += cycle_length
            initial_value *= 2
        return cycles
    
    
    @lru_cache(None)
    def find_cycle(t, cycles):
        for cycle in cycles:
            if cycle.start_time <= t <= cycle.end_time:
                return cycle
        return None
    
    def strangeCounter(t, cycles):
        cycle = find_cycle(t, tuple(cycles))
        if cycle:
            return cycle.initial_value - (t - cycle.start_time)
        return -1  
    
    cycles = generate_cycles(1000000000000)
    
    
    if __name__ == '__main__':
        fptr = open(os.environ['OUTPUT_PATH'], 'w')
    
        t = int(input().strip())
    
        result = strangeCounter(t, cycles)
    
        fptr.write(str(result) + '\n')
    
        fptr.close()