There are 70 coins and out of which there is one fake coin. Need to detect the fake coin in minimum number of weighing. You have only a weighing scale and you know that the fake coin is lighter.
I am not sure if the below simulation of the problem is right or wrong i.e. representing it in a array and doing the comparison as i have done in my code. I am trying to simulate it with a array with all one's except one zero which is considered as fake coin. Below is my code. Please let me know if i have got it wrong.
It would be really be helpful if someone can prove/explain why 3 way division is better in simple maths.
Pseudo code for the below code:
INPUT    : integer n
if n = 1 then
   the coin is fake
else
   divide the coins into piles of A = ceiling(n/3), B = ceiling(n/3),
       and C = n-2*ceiling(n/3)
   weigh A and B
   if the scale balances then
      iterate with C
   else
      iterate with the lighter of A and B
Code:
import random
def getmin(data, start, end, total_items):
    if total_items == 1:
        #for sure we have a fake coin
        return (0, start)
    elif total_items == 2:
        if data[start] > data[end]:
            return (1, end)
        elif data[start] < data[end]:
            return (1, start)
    else:
        partition = total_items/3
        a_weight = sum(data[start:start+partition])
        b_weight = sum(data[start+partition:start+2*partition])
        c_weight = sum(data[start+2*partition:end])
        if a_weight == b_weight:
            result = getmin(data, start+2*partition, end, end-(start+2*partition))
            return (1+result[0], result[1])
        else:   
            if a_weight > b_weight:
                result = getmin(data, start+partition, start+2*partition, partition)
                return (1+result[0], result[1])
            else:
                result = getmin(data, start, start+partition, partition)
                return (1+result[0], result[1])
n = int(raw_input())
data = [1]*n
data[random.randint(0, n-1)] = 0
total_weighing, position = getmin(data, 0, len(data), len(data))
print(total_weighing, position)
 
     
    