class Node:
def __init__(self, name, children, value=None):
self.name = name
self.children = children
self.value = value
t1 = Node('t1', [], 3)
t2 = Node('t2', [], 5)
t3 = Node('t3', [], 6)
t4 = Node('t4', [], 9)
B = Node('B', [t1, t2])
C = Node('C', [t3, t4])
A = Node('A', [B, C])
def minimax(node, is_maximizing):
if not node.children:
return node.value
if is_maximizing:
max_value = float('-inf')
for child in node.children:
value = minimax(child, False)
max_value = max(max_value, value)
node.value = max_value
return max_value
else:
min_value = float('inf')
for child in node.children:
value = minimax(child, True)
min_value = min(min_value, value)
node.value = min_value
return min_value
result = minimax(A, True)
def print_tree(node):
print(f"{node.name}: {node.value}")
for child in node.children:
print_tree(child)
print_tree(A)
print("\nBest value from root (A):", result)
Y2xhc3MgTm9kZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBjaGlsZHJlbiwgdmFsdWU9Tm9uZSk6CiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYuY2hpbGRyZW4gPSBjaGlsZHJlbgogICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQoKCnQxID0gTm9kZSgndDEnLCBbXSwgMykKdDIgPSBOb2RlKCd0MicsIFtdLCA1KQp0MyA9IE5vZGUoJ3QzJywgW10sIDYpCnQ0ID0gTm9kZSgndDQnLCBbXSwgOSkKCgpCID0gTm9kZSgnQicsIFt0MSwgdDJdKSAgCkMgPSBOb2RlKCdDJywgW3QzLCB0NF0pICAKCgpBID0gTm9kZSgnQScsIFtCLCBDXSkKCgpkZWYgbWluaW1heChub2RlLCBpc19tYXhpbWl6aW5nKToKICAgIGlmIG5vdCBub2RlLmNoaWxkcmVuOgogICAgICAgIHJldHVybiBub2RlLnZhbHVlCgogICAgaWYgaXNfbWF4aW1pemluZzoKICAgICAgICBtYXhfdmFsdWUgPSBmbG9hdCgnLWluZicpCiAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW46CiAgICAgICAgICAgIHZhbHVlID0gbWluaW1heChjaGlsZCwgRmFsc2UpCiAgICAgICAgICAgIG1heF92YWx1ZSA9IG1heChtYXhfdmFsdWUsIHZhbHVlKQogICAgICAgIG5vZGUudmFsdWUgPSBtYXhfdmFsdWUKICAgICAgICByZXR1cm4gbWF4X3ZhbHVlCiAgICBlbHNlOgogICAgICAgIG1pbl92YWx1ZSA9IGZsb2F0KCdpbmYnKQogICAgICAgIGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgogICAgICAgICAgICB2YWx1ZSA9IG1pbmltYXgoY2hpbGQsIFRydWUpCiAgICAgICAgICAgIG1pbl92YWx1ZSA9IG1pbihtaW5fdmFsdWUsIHZhbHVlKQogICAgICAgIG5vZGUudmFsdWUgPSBtaW5fdmFsdWUKICAgICAgICByZXR1cm4gbWluX3ZhbHVlCgoKcmVzdWx0ID0gbWluaW1heChBLCBUcnVlKQoKCmRlZiBwcmludF90cmVlKG5vZGUpOgogICAgcHJpbnQoZiJ7bm9kZS5uYW1lfToge25vZGUudmFsdWV9IikKICAgIGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgogICAgICAgIHByaW50X3RyZWUoY2hpbGQpCgpwcmludF90cmVlKEEpCnByaW50KCJcbkJlc3QgdmFsdWUgZnJvbSByb290IChBKToiLCByZXN1bHQpCg==