"""
Solution for -> No arithmetic progressions.
Created by Egor Kostan.
GitHub: https://github.com/ikostan
"""
[docs]
def sequence(n: int) -> int:
"""
Return the n-th member of sequence.
Consider a sequence, which is formed by the following rule:
next term is taken as the smallest possible non-negative integer,
which is not yet in the sequence, so that no 3 terms of sequence
form an arithmetic progression.
Example:
f(0) = 0 -- smallest non-negative
f(1) = 1 -- smallest non-negative, which is not yet in the sequence
f(2) = 3 -- since 0, 1, 2 form an arithmetic progression
f(3) = 4 -- neither of 0, 1, 4, 0, 3, 4, 1, 3, 4 form an arithmetic
progression, so we can take smallest non-negative, which is larger than 3
f(4) = 9 -- 5, 6, 7, 8 are not good, since 1, 3, 5, 0, 3, 6, 1, 4, 7, 0, 4, 8
are all valid arithmetic progressions.
:param n:
:return:
"""
return n
[docs]
def sum_of_arithmetic_progression(a: int,
dif: int,
terms: int = 3) -> int:
"""
Sum of an Arithmetic Progression.
:param a:
:param dif:
:param terms:
:return:
"""
return terms * (a + general_term_of_arithmetic_progression(a, dif)) // 2
[docs]
def general_term_of_arithmetic_progression(a: int,
dif: int,
terms: int = 3) -> int:
"""
General Term of an Arithmetic Progression.
:param a:
:param dif:
:param terms:
:return:
"""
return a + (terms - 1) * dif