#!/usr/bin/env python3 from sys import argv if len(argv) == 1: NUM = 1 if len(argv) == 2: NUM = int(argv[1]) def is_connected(capset0, capset1): count = 0 for card in capset0: if card in capset1: continue count += 1 return count <= NUM def next_connected(disconnected): newly_connected = [disconnected.pop()] connected = [] while newly_connected: check_capsets = iter(newly_connected[:]) connected.extend(newly_connected) newly_connected = [] for con_capset in check_capsets: for index, dis_capset in reversed(list(enumerate(disconnected[:]))): if is_connected(con_capset, dis_capset): newly_connected.append(disconnected.pop(index)) return connected def main(): capsets = [] capset_file = open("capset.out", "r") for line in capset_file: capsets.append(tuple(line[1:-2].split(" "))) capset_file.close() connecteds = [] while capsets: connecteds.append(next_connected(capsets)) #for connected in connecteds: # print("\nThe following are connected:") # for capset in connected: # print(capset) print("\nThere are", len(connecteds), "partitions.") lengths = list(map(len, connecteds)) for length in sorted(set(lengths)): print("There are", lengths.count(length), "with length", length) if __name__ == "__main__": main()