import random
def aimed(player_attributes, enemy_attributes):
if player_attributes['endurance'] < enemy_attributes['endurance'] // 10 * 10:
player_attributes['endurance'] += 1
else:
underleveled_attrs = list(attr for attr in player_attributes if player_attributes[attr] <= enemy_attributes[attr] // 2)
if underleveled_attrs:
player_attributes[random.choice(underleveled_attrs)] += 1
else:
worst_enemy_attr_value = min(enemy_attributes.values())
worst_enemy_attrs = list(attr for attr in enemy_attributes if enemy_attributes[attr] == worst_enemy_attr_value)
player_attributes[random.choice(worst_enemy_attrs)] += 1
return player_attributes
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 = aimed(player.copy(), enemy)
print("aim {0} to {1}: {2}".format(stats_to_string(player), stats_to_string(enemy), stats_to_string(aimed_result)))
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)
aW1wb3J0IHJhbmRvbQoKZGVmIGFpbWVkKHBsYXllcl9hdHRyaWJ1dGVzLCBlbmVteV9hdHRyaWJ1dGVzKToKCWlmIHBsYXllcl9hdHRyaWJ1dGVzWydlbmR1cmFuY2UnXSA8IGVuZW15X2F0dHJpYnV0ZXNbJ2VuZHVyYW5jZSddIC8vIDEwICogMTA6CgkJcGxheWVyX2F0dHJpYnV0ZXNbJ2VuZHVyYW5jZSddICs9IDEKCWVsc2U6CgkJdW5kZXJsZXZlbGVkX2F0dHJzID0gbGlzdChhdHRyIGZvciBhdHRyIGluIHBsYXllcl9hdHRyaWJ1dGVzIGlmIHBsYXllcl9hdHRyaWJ1dGVzW2F0dHJdIDw9IGVuZW15X2F0dHJpYnV0ZXNbYXR0cl0gLy8gMikKCQlpZiB1bmRlcmxldmVsZWRfYXR0cnM6CgkJCXBsYXllcl9hdHRyaWJ1dGVzW3JhbmRvbS5jaG9pY2UodW5kZXJsZXZlbGVkX2F0dHJzKV0gKz0gMQoJCWVsc2U6CgkJCXdvcnN0X2VuZW15X2F0dHJfdmFsdWUgPSBtaW4oZW5lbXlfYXR0cmlidXRlcy52YWx1ZXMoKSkKCQkJd29yc3RfZW5lbXlfYXR0cnMgPSBsaXN0KGF0dHIgZm9yIGF0dHIgaW4gZW5lbXlfYXR0cmlidXRlcyBpZiBlbmVteV9hdHRyaWJ1dGVzW2F0dHJdID09IHdvcnN0X2VuZW15X2F0dHJfdmFsdWUpCgkJCXBsYXllcl9hdHRyaWJ1dGVzW3JhbmRvbS5jaG9pY2Uod29yc3RfZW5lbXlfYXR0cnMpXSArPSAxCgoJcmV0dXJuIHBsYXllcl9hdHRyaWJ1dGVzCgpkZWYgc3RhdHNfZGljdChlbmR1cmFuY2UsIHN0cmVuZ3RoLCBhZ2lsaXR5LCBzcGVlZCk6CglyZXR1cm4geydlbmR1cmFuY2UnOiBlbmR1cmFuY2UsICdzdHJlbmd0aCc6IHN0cmVuZ3RoLCAnYWdpbGl0eSc6IGFnaWxpdHksICdzcGVlZCc6IHNwZWVkfQoKZGVmIHN0YXRzX3RvX3N0cmluZyhzdGF0cyk6CglyZXR1cm4gIihFTkQge2VuZHVyYW5jZX0sIFNUUiB7c3RyZW5ndGh9LCBBR0kge2FnaWxpdHl9LCBTUEQge3NwZWVkfSkiLmZvcm1hdCgqKnN0YXRzKQoKZGVmIHRlc3QocGxheWVyX2VuZHVyYW5jZSwgcGxheWVyX3N0cmVuZ3RoLCBwbGF5ZXJfYWdpbGl0eSwgcGxheWVyX3NwZWVkLAogICAgICAgICBlbmVteV9lbmR1cmFuY2UsIGVuZW15X3N0cmVuZ3RoLCBlbmVteV9hZ2lsaXR5LCBlbmVteV9zcGVlZCk6CglwbGF5ZXIgICAgICAgPSBzdGF0c19kaWN0KHBsYXllcl9lbmR1cmFuY2UsIHBsYXllcl9zdHJlbmd0aCwgcGxheWVyX2FnaWxpdHksIHBsYXllcl9zcGVlZCkKCWVuZW15ICAgICAgICA9IHN0YXRzX2RpY3QoZW5lbXlfZW5kdXJhbmNlLCBlbmVteV9zdHJlbmd0aCwgZW5lbXlfYWdpbGl0eSwgZW5lbXlfc3BlZWQpCglhaW1lZF9yZXN1bHQgPSBhaW1lZChwbGF5ZXIuY29weSgpLCBlbmVteSkKCXByaW50KCJhaW0gezB9IHRvIHsxfTogezJ9Ii5mb3JtYXQoc3RhdHNfdG9fc3RyaW5nKHBsYXllciksIHN0YXRzX3RvX3N0cmluZyhlbmVteSksIHN0YXRzX3RvX3N0cmluZyhhaW1lZF9yZXN1bHQpKSkKCnRlc3QoOTksIDMsIDMsIDMsIDk5LCA5LCA5LCA5KQp0ZXN0KDk5LCA4LCA4LCA4LCA5OSwgMjAsIDIwLCAyMCkKdGVzdCg5OSwgMywgMywgMywgOTksIDQsIDQsIDQpCnRlc3QoOTksIDgsIDgsIDgsIDk5LCA5LCA5LCA5KQ==
aim (END 99, STR 3, AGI 3, SPD 3) to (END 99, STR 9, AGI 9, SPD 9): (END 99, STR 4, AGI 3, SPD 3)
aim (END 99, STR 8, AGI 8, SPD 8) to (END 99, STR 20, AGI 20, SPD 20): (END 99, STR 8, AGI 9, SPD 8)
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)
aim (END 99, STR 8, AGI 8, SPD 8) to (END 99, STR 9, AGI 9, SPD 9): (END 99, STR 9, AGI 8, SPD 8)