"""Collatz 猜想探索器 —— 一个循环了就会上瘾的小实验。

规则：任取一个正整数 n，
  若 n 为偶数 → n = n / 2
  若 n 为奇数 → n = 3n + 1
据说无论从哪个数出发，最终都会掉进 4 → 2 → 1 的循环，
但至今没人能证明它。来试试看。
"""


def collatz_sequence(n: int) -> list[int]:
    seq = [n]
    while n != 1:
        n = n // 2 if n % 2 == 0 else 3 * n + 1
        seq.append(n)
    return seq


def longest_chain_under(limit: int) -> tuple[int, int]:
    """返回 (起始数字, 链长)，找出 limit 以内链条最长的数。"""
    best_num, best_len = 0, 0
    for start in range(1, limit):
        length = len(collatz_sequence(start))
        if length > best_len:
            best_num, best_len = start, length
    return best_num, best_len


if __name__ == "__main__":
    print("27 的 Collatz 序列（前 20 步）：")
    seq = collatz_sequence(27)
    print(" → ".join(map(str, seq[:20])) + " → …")
    print(f"总共走了 {len(seq) - 1} 步到达 1。\n")

    num, length = longest_chain_under(100_000)
    print(f"10 万以内链条最长的起始数字是 {num}，共 {length - 1} 步。")
