• + 0 comments

    Python3

    TL;DR

    def powersGame(n):
        return 'Second' if n%8 == 0 else 'First'
    

    What is behind this solution

    Frankly speaking, after few attemtps to find solution, I gave up. But copy&pasting the answer doesn't tune your mind to solve similar problems. Thus I've invested my time into below explanation. I hope, it can help you as well.

    Modulo

    This task is about modulo mathematic, particualry:

    • ( a + b) % c = ( ( a % c ) + ( b % c ) ) % c
    • ( a * b) % c = ( ( a % c ) * ( b % c ) ) % c
    • ( a – b) % c = ( ( a % c ) – ( b % c ) ) % c
    • HOWEVER: ( a / b ) % c NOT EQUAL ( ( a % c ) / ( b % c ) ) % c

    In our case we transfer ( sign_1*2^1 + sign_2*2^2 + .. sign_n*2^n) % 17 into ( (sign_1*2^1)%17 + (sign_2*2^2)%17 + .. +(sign_n*2^n)%17) % 17

    >>> (1+2-3-4)%17
    13
    >>> (1%17+2%17-3%17-4%17)%17
    13
    >>> (1%17+(2%17)-(3%17)-(4%17))%17
    13
    >>> (1%17+(2%17)+(-3%17)+(-4%17))%17
    13
    
    How it works in our case

    Let have a look what will be modulo 17 for 2 in various power:

    max_power = 20
    print("power i:    ", end="")
    for i in range(1,max_power):
        print(f"{i:^5}", end="|")
    print("\n+(2**i)%17: ", end="")
    for i in range(1,max_power):
        print(f"{((2**i)%17):>4}", end=" |")
    print("\n(-2**i)%17: ", end="")
    for i in range(1,max_power):
        print(f"{(-2**i)%17:>4}", end=" |")
    print("\n")
    
    power i:      1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  | ...
    +(2**i)%17:    2 |   4 |   8 |  16 |  15 |  13 |   9 |   1 | ...
    (-2**i)%17:   15 |  13 |   9 |   1 |   2 |   4 |   8 |  16 | ...
    

    Note how group of [2,4,8,16,15,13,9,1] is repeating over and over in intervals of power 1-8, 9-16, 17-24, .. for . The same logic is for

    What does it mean? For those cases when n is divisable by 8, the Second always have one ore more options to counter-strike, i.e. to compensate any move done by First.

    This is so complex task and this solution is so clever.

    Happy pythonong!