Files
School/Anul 1/Semestrul 1/Algebra/Project 2/main.py
T
2024-08-31 12:07:21 +03:00

115 lines
3.0 KiB
Python

import itertools
import time
def operation(x,y,R):
"""
:params:
x: int
y: int
R: list of tuples
:return:
int
This function returns the result of the operation R on x and y
"""
for relation in R:
if relation[0]==x and relation[1]==y:
return relation[2]
def associativity_checker(n,R):
"""
:params:
n: int
R: list of tuples
:return:
bool
This function checks if the operation R is associative or not. It returns True if it is associative and False otherwise.
"""
for i in range(n):
for j in range(n):
for k in range(n):
if operation(operation(i,j,R),k,R)!=operation(i,operation(j,k,R),R):
return False
return True
def generate_all_operations(n):
"""
:params:
n: int
:return:
list of lists of tuples
This function generates all possible operations on a set of n elements. It returns a list of all possible operations.
"""
R=[]
values = set(range(n))
operations_results = itertools.product(values,repeat=n**2)
f = open(f"output_n_{n}.txt","w")
for operation_result in operations_results:
op=[]
for i in values:
for j in values:
op.append((i,j,operation_result[i*n+j]))
if associativity_checker(n,op):
R.append(op)
f.write("\n\n")
f.write(' |')
for i in range(n):
f.write(str(i)+"|")
for i in range(n):
f.write("\n"+"-+"*(n+1)+"\n")
f.write(str(i)+"|")
for j in range(n):
f.write(str(operation(i,j,op))+"|")
f.close()
return R
def main():
print("Enter the number of elements in the set. Number must be smaller than 4")
n=int(input())
data = generate_all_operations(n)
print(len(data))
count=0
for i in data:
if associativity_checker(n,i):
print(i)
count+=1
print(count)
def file_handle(n):
"""
:params:
n: int
:return:
None
This function generates all possible operations on a set of n elements and writes the results to a file. It also writes the number of associative operations.
"""
semi_groups = generate_all_operations(n)
f = open(f"output_n_{n}.txt","w")
f.write("Number of elements in the set: "+str(n)+"\n")
f.write("Number of associative operations: "+str(len(semi_groups))+"\n")
for op in semi_groups:
f.write("\n\n")
f.write(' |')
for i in range(n):
f.write(str(i)+"|")
for i in range(n):
f.write("\n"+"-+"*(n+1)+"\n")
f.write(str(i)+"|")
for j in range(n):
f.write(str(operation(i,j,op))+"|")
f.close()
if __name__=="__main__":
# file_handle(1)
# file_handle(2)
# file_handle(3)
# file_handle(4)
main()