오늘 똘삼님이 플레이 하셨던 타워에서 싸우는 게임을 계산하는 파이썬 스크립트 입니다.
towers에 각각의 방을 입력하고 최초 score를 작성하면 어떤 순서대로 눌렀을 때 최대 값이 나오는지 계산해줍니다.
class GameMath: def __init__(self, value: int) -> None: self.value = value
def __str__(self) -> str: return f"{self.__class__.__name__} {self.value}"
def execute(self, x: int) -> int: pass
class Div(GameMath): def execute(self, x: int) -> int: return int(x / self.value)
class Add(GameMath): def execute(self, x: int) -> int: return int(x + self.value)
class Mul(GameMath): def execute(self, x: int) -> int: return int(x * self.value)
def best_search(tower: list, score): best_order = [] best_score = 0
def select(stack, score, tower): nonlocal best_order, best_score if len(tower) == 0: if score > best_score: best_order = stack best_score = score return
for i, room in enumerate(tower): if isinstance(room, Add): if score < room.value: continue select(stack + [room], room.execute(score), tower[:i] + tower[i + 1:])
select([], score, tower)
return best_order, best_score
if __name__ == "__main__": towers = [ [Mul(10), Add(120), Add(5), Add(16), Div(2)], [Add(116), Div(2), Add(132), Div(2), Add(124)] ] score = 10 for tower in towers: order, score = best_search(tower, score) print([str(o) for o in order])
출력 예시)
클리어 공식이 있긴한데 그렇게 쉬우면 재미 없으니까 스크립트를 따로 만들었죠
재미로 봐주세요
댓글 0개 ▼