Hat Problem
Example heading with h2 size
Example heading with h3 size
Following is sample java code.
import numpy as np
def createCheatSheet(k=10): # create cheat sheet for the players
lst=[(2,1,1),(1,2,1),(2,3,1),(1,1,2),(2,1,3),(1,2,3),(2,3,5)] #build list of all sets groud up
lstSz = [1,3,7] # how many elements of cheat sheet have been eliminated with each 'I don't know'
lstSz_prev = 4
lstSz_prevprev = 2
for num in range(3,k): #count the number of elements in cheat sheet after each 'I don't know'
newNums = lstSz_prev + lstSz_prevprev
lstSz_prevprev = lstSz_prev
lstSz_prev = newNums
lstSz.append(lstSz[-1]+newNums)
cheatSheet = np.zeros((lstSz[-1],3),dtype=int)
for i in range(7):
cheatSheet[i,:] = lst[i]
for num in range(3,k): # Build all sets - number of I don't know
pos = num % 3
prevSz = lstSz[num-1]
currSz = lstSz[num]
newNums = currSz - prevSz
for i in range(newNums): # each I dont know adds new sets = previous 2 turns
prevtp = cheatSheet[prevSz-newNums+i,:]
newtp = [prevtp[0],prevtp[1],prevtp[2]]
newtp[pos] = newtp[(pos+1)%3] + newtp[(pos+2)%3]
cheatSheet[prevSz+i,:] = newtp
print("CheatSheet Size (i,sz) "+str(num)+","+str(newNums))
return (cheatSheet,lstSz)
def player(num1,num2,k,refData):
if k==0:
if num1==1 and num2==1:
return 2
else:
return 0
#create Tuple
pos = (k % 3)
newtp = [num1,num1,num2]
newtp[pos] = num1+num2
if pos==2:
newtp[1]=num2
cheatSheet = refData[0]
newSetIdx = refData[1]
tempSheet = cheatSheet[newSetIdx[k-1]:newSetIdx[k],:]
if np.any(np.all(tempSheet == newtp,axis=1)):
return newtp[pos]
return 0
def arbitor(num1,num2,num3):
refData = createCheatSheet(20) #create cheat sheet before starting the game
tp = tuple([num1,num2,num3])
for i in range(max(tp)+3):
pos1 = min((i+1)%3,(i+2)%3)
pos2 = max((i+1)%3,(i+2)%3)
out = player(tp[pos1],tp[pos2],i,refData)
if out:
print("Player"+str(i%3)+" declares:"+str(out))
return 0
else:
print("Player"+str(i%3)+": Dont Know (i):" + str(i+1))
ValueError("should have finished")
arbitor(17,7,10)