技術をかじる猫

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

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

手元にコインがあり、ゲーム参加に 1 枚消費する。勝てば2枚得られる。
これで、24 回ゲームできる手順は何通りあるか?

原文では 24 回戦って、コインが手元にのこる手順と書いてあるくせに、24 回ゲームに参加する手順になってるところが少しもやっと…

from functools import lru_cache

START_COIN = 10
TURNS = 24

@lru_cache()
def current_game(game:int , coins: int) -> int:
    if game == 0:  # ここで coins > 0 を入れると結果が変わってくる。
        return 1
    if coins == 0:
        return 0
    return current_game(game - 1, coins + 1) + current_game(game - 1, coins - 1)


print(current_game(TURNS, START_COIN))

といってもそんなに複雑な事はなくて、終了条件だけ定めてやれば再起でさっくり片付く。
そして、何気に最近したのだけど、lru_cache なるデコレータが存在し、これを入れるだけでメモ化ができるという。

便利。