#!/usr/bin/env python3 from random import choice, choices, randint, sample, seed, shuffle import sys P = int(sys.argv[1]) ISPOS = int(sys.argv[2]) MX = 100000 seed(int(sys.argv[3])) ISTRANSPOSE = int(sys.argv[4]) # on one side all the points, on the other side all the lines perxy = [[] for i in range(P*P)] cnt=0 if ISPOS: MX-=2 def gen(): global cnt at=1 for a in range(P): for b in range(P): for x in range(P): cnt+=1 perxy[x + P*((a*x+b)%P)].append(at) if cnt==MX: return at+=1 # vertical lines! x = b for b in range(P): for y in range(P): cnt+=1 perxy[b+P*y].append(at) if cnt==MX: return at+=1 gen() hi,hj = [[0,P*P-1], [0,1],[P*P-2,P*P-1]][int(sys.argv[5])] shuffle(perxy) if ISPOS: xy = [MX,MX+1] for i in [hi,hj]: gone = min(2,len(perxy[i])) tolose = set(sample(perxy[i],gone)) perxy[i] = list(sorted( (set(perxy[i]) | set(xy)) - tolose ) ) lab = set() while len(lab)1] print(len(perxy)) for es in perxy: es = [lab[i] for i in es] shuffle(es) print(len(es),*es)