# 1206.py def iniettiva (f,lx): ly=[] for x in lx: y=f(x) if y in ly: return 0 ly.append(y) return 1 def suriettiva (f,lx,ly): return int(set(ly)<=set([f(x) for x in lx])) def biiettiva (f,lx,ly): return iniettiva(f,lx) and suriettiva(f,lx,ly) lx=xrange(10) def f (x): return (x*x+2)%6 for x in lx: print x, print for x in lx: print f(x), print # 0 1 2 3 4 5 6 7 8 9 # 2 3 0 5 0 3 2 3 0 5 print iniettiva(f,lx), suriettiva(f,lx,xrange(6)) # 0 0 print suriettiva(f,lx,[0,2,3,5]) # 1 print iniettiva(f,[0,1,2,3]) # 1 ####################################### def associativa (f,lx): for a in lx: for b in lx: for c in lx: if f(f(a,b),c)!=f(a,f(b,c)): return 0 return 1 def f (x,y): return (x+y)%4 def g (x,y): return (x+y*x)%4 print associativa(f,xrange(4)) # 1 print associativa(g,xrange(4)) # 0