Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Uncategorized category for How Much Gold by Moff
from fractions import Fraction
METALS = ('gold', 'tin', 'iron', 'copper')
def det(m):
if len(m) == 1:
return m[0][0]
result, sign = 0, 1
for k, v in enumerate(m[0]):
result += sign * v * det([row[:k] + row[k+1:] for row in m[1:]])
sign *= -1
return result
def checkio(proportions):
metalls = ('gold', 'tin', 'iron', 'copper')
a = [[0] * 4 for _ in range(3)]
a.append([1] * 4)
b = [1] * 4
for i, (p, f) in enumerate(proportions.items()):
for metall in p.split('-'):
a[i][metalls.index(metall)] = f.denominator
b[i] = f.numerator
d = det(a)
for i in range(4):
a[i][0] = b[i]
dg = det(a)
return Fraction(dg, d)
Aug. 13, 2015