aboutsummaryrefslogtreecommitdiff
path: root/challenge-159/lubos-kolouch/python/ch-1.py
blob: cdfcf94d85d556d177f986b0e518929d2ebe88cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
""" Challenge 159 Task 1"""


def farey_sequence(n: int, descending: bool = False) -> str:
    """Print the n'th Farey sequence. Allow for either ascending or descending."""
    (a, b, c, d) = (0, 1, 1, n)

    solution = []
    if descending:
        (a, c) = (1, n - 1)
    solution.append(f"{a}/{b}")
    while (c <= n and not descending) or (a > 0 and descending):
        k = (n + b) // d
        (a, b, c, d) = (c, d, k * c - a, k * d - b)
        solution.append(f"{a}/{b}")

    return ", ".join(solution)


assert farey_sequence(5) == "0/1, 1/5, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 1/1"