From a5482c5c8f79b7f7b5f597dd79237bcb8244866d Mon Sep 17 00:00:00 2001 From: yenru0 Date: Tue, 13 Aug 2024 11:00:34 +0900 Subject: [PATCH] complete 8891.py --- zeta_python/completed/8891.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 zeta_python/completed/8891.py diff --git a/zeta_python/completed/8891.py b/zeta_python/completed/8891.py new file mode 100644 index 0000000..498f2b1 --- /dev/null +++ b/zeta_python/completed/8891.py @@ -0,0 +1,33 @@ +from dataclasses import dataclass + + +@dataclass +class Point: + x: int + y: int + + def __add__(self, p: "Point"): + return Point(self.x + p.x, self.y + p.y) + + +S = lambda n: n * (n + 1) // 2 + + +def point_to_num(point: Point) -> int: + return S(point.x + point.y - 2) + point.x + + +def num_to_point(num: int) -> Point: + n = 0 + temp1 = S(n) + temp2 = S(n + 1) + while not (temp1 < num <= temp2): + n += 1 + temp1, temp2 = temp2, S(n + 1) + return Point(num - temp1, n + 2 - (num - temp1)) + + +if __name__ == "__main__": + N = int(input()) + # fmt: off + print(*[point_to_num(sum(map(num_to_point, map(int, input().split())), start=Point(0, 0))) for _ in range(N)], sep='\n')