diff options
Diffstat (limited to 'partition.py')
| -rw-r--r-- | partition.py | 38 |
1 files changed, 38 insertions, 0 deletions
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() + |