# 1206.py # ly ... lista degli y. def iniettiva (f,dom): ly=[] for x in dom: y=f(x) if y in ly: return 0 ly.append(y) return 1 def suriettiva (f,dom,cod): return int(set(cod)<=set([f(x) for x in dom])) def biiettiva (f,dom,cod): return iniettiva(f,dom) and suriettiva(f,dom,cod) dom=xrange(10) def f (x): return (x*x+2)%6 for x in dom: print x, print for x in dom: 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,dom), suriettiva(f,dom,xrange(6)) # 0 0 print suriettiva(f,dom,[0,2,3,5]) # 1 print iniettiva(f,[0,1,2,3]) # 1 ####################################### # sx ... sequenza degli x. def associativa (f,sx): for a in sx: for b in sx: for c in sx: 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