def aimed(player_attributes, enemy_attributes):
branch_taken = 0
if player_attributes['endurance'] < enemy_attributes['endurance'] // 10 * 10:
branch_taken = 1
player_attributes['endurance'] += 1
else:
branch_taken = 2
for attribute in enemy_attributes:
if player_attributes[attribute] <= enemy_attributes[attribute] // 2:
player_attributes[attribute] += 1
equated = False
break
else:
equated = True
if equated:
branch_taken = 3
for attribute in enemy_attributes:
if enemy_attributes[attribute] == min(enemy_attributes.values()):
player_attributes[attribute] += 1
break
return player_attributes, branch_taken
def stats_dict(endurance, strength, agility, speed):
return {'endurance': endurance, 'strength': strength, 'agility': agility, 'speed': speed}
def stats_to_string(stats):
return "(END {endurance}, STR {strength}, AGI {agility}, SPD {speed})".format(**stats)
def test(player_endurance, player_strength, player_agility, player_speed,
enemy_endurance, enemy_strength, enemy_agility, enemy_speed):
player = stats_dict(player_endurance, player_strength, player_agility, player_speed)
enemy = stats_dict(enemy_endurance, enemy_strength, enemy_agility, enemy_speed)
aimed_result, branch_taken = aimed(player.copy(), enemy)
print("aim {0} to {1}: {2}, b#{3}".format(stats_to_string(player), stats_to_string(enemy), stats_to_string(aimed_result), branch_taken))
# Вторая ветка — увеличение «недостающего» атрибута
test(99, 3, 3, 3, 99, 9, 9, 9)
test(99, 8, 8, 8, 99, 20, 20, 20)
# Третья ветка — увеличение атрибута, соответствующего худшему атрибуту врага
test(99, 3, 3, 3, 99, 4, 4, 4)
test(99, 8, 8, 8, 99, 9, 9, 9)
ZGVmIGFpbWVkKHBsYXllcl9hdHRyaWJ1dGVzLCBlbmVteV9hdHRyaWJ1dGVzKToKCWJyYW5jaF90YWtlbiA9IDAKCWlmIHBsYXllcl9hdHRyaWJ1dGVzWydlbmR1cmFuY2UnXSA8IGVuZW15X2F0dHJpYnV0ZXNbJ2VuZHVyYW5jZSddIC8vIDEwICogMTA6CgkJYnJhbmNoX3Rha2VuID0gMQoJCXBsYXllcl9hdHRyaWJ1dGVzWydlbmR1cmFuY2UnXSArPSAxCgllbHNlOgoJCWJyYW5jaF90YWtlbiA9IDIKCQlmb3IgYXR0cmlidXRlIGluIGVuZW15X2F0dHJpYnV0ZXM6CgkJCWlmIHBsYXllcl9hdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gPD0gZW5lbXlfYXR0cmlidXRlc1thdHRyaWJ1dGVdIC8vIDI6CgkJCQlwbGF5ZXJfYXR0cmlidXRlc1thdHRyaWJ1dGVdICs9IDEKCQkJCWVxdWF0ZWQgPSBGYWxzZQoJCQkJYnJlYWsKCQkJZWxzZToKCQkJCWVxdWF0ZWQgPSBUcnVlCgkJCQkKCQlpZiBlcXVhdGVkOgoJCQlicmFuY2hfdGFrZW4gPSAzCgkJCWZvciBhdHRyaWJ1dGUgaW4gZW5lbXlfYXR0cmlidXRlczoKCQkJCWlmIGVuZW15X2F0dHJpYnV0ZXNbYXR0cmlidXRlXSA9PSBtaW4oZW5lbXlfYXR0cmlidXRlcy52YWx1ZXMoKSk6CgkJCQkJcGxheWVyX2F0dHJpYnV0ZXNbYXR0cmlidXRlXSArPSAxCgkJCQkJYnJlYWsKCglyZXR1cm4gcGxheWVyX2F0dHJpYnV0ZXMsIGJyYW5jaF90YWtlbgoKZGVmIHN0YXRzX2RpY3QoZW5kdXJhbmNlLCBzdHJlbmd0aCwgYWdpbGl0eSwgc3BlZWQpOgoJcmV0dXJuIHsnZW5kdXJhbmNlJzogZW5kdXJhbmNlLCAnc3RyZW5ndGgnOiBzdHJlbmd0aCwgJ2FnaWxpdHknOiBhZ2lsaXR5LCAnc3BlZWQnOiBzcGVlZH0KCmRlZiBzdGF0c190b19zdHJpbmcoc3RhdHMpOgoJcmV0dXJuICIoRU5EIHtlbmR1cmFuY2V9LCBTVFIge3N0cmVuZ3RofSwgQUdJIHthZ2lsaXR5fSwgU1BEIHtzcGVlZH0pIi5mb3JtYXQoKipzdGF0cykKCmRlZiB0ZXN0KHBsYXllcl9lbmR1cmFuY2UsIHBsYXllcl9zdHJlbmd0aCwgcGxheWVyX2FnaWxpdHksIHBsYXllcl9zcGVlZCwKICAgICAgICAgZW5lbXlfZW5kdXJhbmNlLCBlbmVteV9zdHJlbmd0aCwgZW5lbXlfYWdpbGl0eSwgZW5lbXlfc3BlZWQpOgoJcGxheWVyICAgICAgID0gc3RhdHNfZGljdChwbGF5ZXJfZW5kdXJhbmNlLCBwbGF5ZXJfc3RyZW5ndGgsIHBsYXllcl9hZ2lsaXR5LCBwbGF5ZXJfc3BlZWQpCgllbmVteSAgICAgICAgPSBzdGF0c19kaWN0KGVuZW15X2VuZHVyYW5jZSwgZW5lbXlfc3RyZW5ndGgsIGVuZW15X2FnaWxpdHksIGVuZW15X3NwZWVkKQoJYWltZWRfcmVzdWx0LCBicmFuY2hfdGFrZW4gPSBhaW1lZChwbGF5ZXIuY29weSgpLCBlbmVteSkKCXByaW50KCJhaW0gezB9IHRvIHsxfTogezJ9LCBiI3szfSIuZm9ybWF0KHN0YXRzX3RvX3N0cmluZyhwbGF5ZXIpLCBzdGF0c190b19zdHJpbmcoZW5lbXkpLCBzdGF0c190b19zdHJpbmcoYWltZWRfcmVzdWx0KSwgYnJhbmNoX3Rha2VuKSkKCiMg0JLRgtC+0YDQsNGPINCy0LXRgtC60LAg4oCUINGD0LLQtdC70LjRh9C10L3QuNC1IMKr0L3QtdC00L7RgdGC0LDRjtGJ0LXQs9C+wrsg0LDRgtGA0LjQsdGD0YLQsAp0ZXN0KDk5LCAzLCAzLCAzLCA5OSwgOSwgOSwgOSkKdGVzdCg5OSwgOCwgOCwgOCwgOTksIDIwLCAyMCwgMjApCgojINCi0YDQtdGC0YzRjyDQstC10YLQutCwIOKAlCDRg9Cy0LXQu9C40YfQtdC90LjQtSDQsNGC0YDQuNCx0YPRgtCwLCDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC10LPQviDRhdGD0LTRiNC10LzRgyDQsNGC0YDQuNCx0YPRgtGDINCy0YDQsNCz0LAKdGVzdCg5OSwgMywgMywgMywgOTksIDQsIDQsIDQpCnRlc3QoOTksIDgsIDgsIDgsIDk5LCA5LCA5LCA5KQ==
aim (END 99, STR 3, AGI 3, SPD 3) to (END 99, STR 9, AGI 9, SPD 9): (END 99, STR 3, AGI 3, SPD 4), b#2
aim (END 99, STR 8, AGI 8, SPD 8) to (END 99, STR 20, AGI 20, SPD 20): (END 99, STR 8, AGI 8, SPD 9), b#2
aim (END 99, STR 3, AGI 3, SPD 3) to (END 99, STR 4, AGI 4, SPD 4): (END 99, STR 3, AGI 3, SPD 4), b#3
aim (END 99, STR 8, AGI 8, SPD 8) to (END 99, STR 9, AGI 9, SPD 9): (END 99, STR 8, AGI 8, SPD 9), b#3