From da81a8f76f56a6b21dda16c8df5f1df5f9b962a3 Mon Sep 17 00:00:00 2001 From: Andrew Guschin Date: Wed, 18 May 2022 23:45:58 +0400 Subject: =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B1=D0=B8=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BC?= =?UTF-8?q?=D0=BD=D0=BE=D0=B6=D0=B5=D1=81=D1=82=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- partition.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 partition.py (limited to 'partition.py') diff --git a/partition.py b/partition.py new file mode 100644 index 0000000..32677a7 --- /dev/null +++ b/partition.py @@ -0,0 +1,38 @@ +def iterate_partition(pi, f): + pi_prime = [] + for part in pi: + d = {part: set() for part in pi} + for elem in part: + b = f(elem) + for part in pi: + if b in part: + d[part].add(elem) + break + for v in d.values(): + if v: + pi_prime.append(frozenset(v)) + return pi_prime, pi != pi_prime + + +def print_partition(pi): + print(list(map(set, pi))) + + +def main(): + n = 20 + b1 = frozenset(range(1, n)) + b2 = frozenset([20]) + pi = [b1, b2] + f = lambda x: x + 1 if x < n else x + + print_partition(pi) + while True: + pi, changed = iterate_partition(pi, f) + if not changed: + break + print_partition(pi) + + +if __name__ == "__main__": + main() + -- cgit v1.2.3