summaryrefslogtreecommitdiff
path: root/partition.py
diff options
context:
space:
mode:
Diffstat (limited to 'partition.py')
-rw-r--r--partition.py38
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()
+