Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Unfair Dice by Kurush
import itertools
def winning_die(enemy_die):
num = len(enemy_die)
sm = sum(enemy_die)
max_number = min([sm - num + 1, 18])
pos_numbers = range(1, max_number + 1)
for player in itertools.combinations_with_replacement(pos_numbers, num):
if sum(player) == sm:
res = compare(player, enemy_die)
if res == True:
return player
return []
def compare(player, enemy):
res = 0
for p in player:
for e in enemy:
if p > e: res += 1
elif p < e: res -= 1
return (res > 0)
if __name__ == '__main__':
#These are only used for self-checking and not necessary for auto-testing
def check_solution(func, enemy):
player = func(enemy)
print (player, enemy)
total = 0
for p in player:
for e in enemy:
if p > e:
total += 1
elif p < e:
total -= 1
print (total)
return total > 0
assert check_solution(winning_die, [3, 3, 3, 3, 6, 6]), "Threes and Sixes"
assert check_solution(winning_die, [4, 4, 4, 4, 4, 4]), "All Fours"
assert check_solution(winning_die, [1, 1, 1, 4]), "Unities and Four"
assert winning_die([1, 2, 3, 4, 5, 6]) == [], "All in row -- No die"
March 28, 2019