import os import sys def make_unique(starting_seq): if len(starting_seq) == 1: yield starting_seq else: cur_seq = starting_seq for i in range(len(starting_seq)): cur_seq = cur_seq[1:] + [cur_seq[0]] for sub_seq in make_unique(cur_seq[1:]): yield [cur_seq[0]] + sub_seq def specific_sequence(starting): for x in make_unique(starting[1:]): yield [starting[0]] + x def calculate_magic_str(seq, verbose=False): magic_sets = {} for i in range(len(seq) - 1)[::2]: last_idx = i + 3 if last_idx > len(seq) - 1: last_idx = last_idx - len(seq) magic_sets[seq[i]] = "%d%d%d" % (seq[i],seq[i+1],seq[last_idx]) if seq[i] + seq[i+1] + seq[last_idx] != 14: return "0" all_ext = [seq[0],seq[2],seq[4],seq[6],seq[8]] first_key = min(magic_sets.keys()) first_idx = all_ext.index(first_key) keys_ordered = all_ext[first_idx:] + all_ext[:first_idx] magic_str = "" for i in keys_ordered: if verbose: print i magic_str += magic_sets[i] return magic_str def main(): max = 0 max_string = "" max_seq = None for idx,s in enumerate(specific_sequence(range(1,11)[::-1])): #ring_sum = calculate_magic_ring(s) #ring_str = "".join([str(x) for x in s]) ring_str = calculate_magic_str(s) ring_sum = int(ring_str) if ring_sum > max: max = ring_sum max_string = ring_str max_seq = s calculate_magic_str(max_seq, verbose=True) print max, max_string if __name__ == "__main__": sys.exit(main())