技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

プログラマ脳を鍛える数学パズル 02

家に帰宅したのが23:55ざっくりといたらこんなもんよね。
PC 起動がそのあとで…

プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問

プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問

# 351 は 3 * 51 = 153 と演算子を挟むと順序を逆にできる
# 1000 - 9999 までの数字で、そんなことができる数字を探せ
if __name__ == "__main__":
    # 演算子を割り込ませる場所
    insert_pos = [
        [3, 2, 1],
        [3, 2],
        [2, 1],
        [3, 1],
        [3], [2], [1]
    ]

    # Python だと eval 使えるから余裕
    for n in range(1111, 9999):
        str_num = str(n)

        # 挿入できる箇所は限られる
        for pos in insert_pos:
            # 区切り箇所を片っ端から nums に突っ込む
            # int(XX) してやれば int(01) = 1 にしてくれる
            test = str_num[:]
            nums = []
            for i in pos:
                nums.append(str(int(test[i:])))
                test = test[:i]
            nums.append(str(int(test)))

            test = '*'.join(nums)
            calc = str(eval(test))
            if calc[::-1] == str_num:
                print(f'{str_num} : {test} = {calc}')

python なら eval で文字列の数式を評価できるので、それで終了。