From 3b5b6de41a4d61547ad7152505cc3fc6d651ba8c Mon Sep 17 00:00:00 2001 From: Apricot-S Date: Sun, 25 Jan 2026 01:28:02 +0900 Subject: [PATCH] refactor: Simplify `TilesConverter.to_one_line_string()` implementation --- mahjong/tile.py | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/mahjong/tile.py b/mahjong/tile.py index b5ab6cf..0be5541 100644 --- a/mahjong/tile.py +++ b/mahjong/tile.py @@ -24,29 +24,21 @@ def to_one_line_string(tiles: Collection[int], print_aka_dora: bool = False) -> tiles = sorted(tiles) man = [t for t in tiles if t < 36] + pin = [t - 36 for t in tiles if 36 <= t < 72] + sou = [t - 72 for t in tiles if 72 <= t < 108] + honors = [t - 108 for t in tiles if t >= 108] - pin = [t for t in tiles if 36 <= t < 72] - pin = [t - 36 for t in pin] - - sou = [t for t in tiles if 72 <= t < 108] - sou = [t - 72 for t in sou] + def words(suits: list[int], red_five: int, suffix: str) -> str: + if not suits: + return "" + return "".join(["0" if i == red_five and print_aka_dora else str((i // 4) + 1) for i in suits]) + suffix - honors = [t for t in tiles if t >= 108] - honors = [t - 108 for t in honors] + man_words = words(man, FIVE_RED_MAN, "m") + pin_words = words(pin, FIVE_RED_PIN - 36, "p") + sou_words = words(sou, FIVE_RED_SOU - 72, "s") + honors_words = words(honors, -1 - 108, "z") - def words(suits: list[int], red_five: int, suffix: str) -> str: - return ( - suits - and "".join(["0" if i == red_five and print_aka_dora else str((i // 4) + 1) for i in suits]) + suffix - or "" - ) - - sou = words(sou, FIVE_RED_SOU - 72, "s") # type: ignore - pin = words(pin, FIVE_RED_PIN - 36, "p") # type: ignore - man = words(man, FIVE_RED_MAN, "m") # type: ignore - honors = words(honors, -1 - 108, "z") # type: ignore - - return man + pin + sou + honors # type: ignore + return man_words + pin_words + sou_words + honors_words @staticmethod def to_34_array(tiles: Collection[int]) -> list[int]: