## DEV Community is a community of 615,123 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

# Discussion on: Daily Challenge #221 - The Merchant of York

Vidit Sarkar • Edited

Hope I have got the problem right.
Here is a possible Python solution,

``````# amount : amount of pennies
# pigs : dict according to the structure of specs
#       Example:
#       pigs = {
#           'boar': { 'price': 10, 'qty': 1 },
#           'sow': { 'price': 5, 'qty': 1 },
#           'piglet': { 'price': 1, 'qty': 2}
#       }
def buyPigs(amount: int, pigs: dict) -> dict:
oneBoarPrice = pigs['boar']['price'] / pigs['boar']['qty']
oneSowPrice = pigs['sow']['price'] / pigs['sow']['qty']
onePigletPrice = pigs['piglet']['price'] / pigs['piglet']['qty']

# i : number of boar he can buy
# j : number of sow he can buy
# k : number of piglet he can buy
for i in range(1, int(min(amount-1, amount/oneBoarPrice))):
for j in range(1, int(min(amount-1, amount/oneSowPrice))):
for k in range(1, int(min(amount-1, amount/onePigletPrice))):
# Given that, the amount of pigs equals the amount of pennies
# so (i+j+k) == amount
# And, calculated total price == amount
if i+j+k == amount == (oneBoarPrice*i + oneSowPrice*j + onePigletPrice*k):
return {'boar': i, 'sow': j, 'piglet': k}

# if no case found then return this
return {'error': 'Purchase not possible'}
``````

Output,

``````pigs = {
'boar': { 'price': 10, 'qty': 1 },
'sow': { 'price': 5, 'qty': 1 },
'piglet': { 'price': 1, 'qty': 2}
}

pigs2 = {
'boar': { 'price': 5, 'qty': 1 },
'sow': { 'price': 1, 'qty': 1 },
'piglet': { 'price': 1, 'qty': 8 }
}

print(buyPigs(100, pigs)) # output -> {'boar': 1, 'sow': 9, 'piglet': 90}
print(buyPigs(150, pigs)) # output -> {'boar': 6, 'sow': 4, 'piglet': 140}
print(buyPigs(300, pigs)) # output -> {'boar': 3, 'sow': 27, 'piglet': 270}

print(buyPigs(100, pigs2)) # output -> {'boar': 7, 'sow': 61, 'piglet': 32}
print(buyPigs(41, pigs2)) # output -> {'boar': 7, 'sow': 2, 'piglet': 32}
``````

Is the output of `print(buyPigs(150, pigs))` right?

SavagePixie

Yes, my bad. I made a mistake when I submitted the challenge.

Shashank Mistry

yes , even I got the same output for print(buyPigs(150, pigs)) .