Apr-24-2019, 12:49 PM
(This post was last modified: Apr-24-2019, 01:48 PM by Escribblings.)
Thank you. I will take another look.
OK, thank you. It does now seem to be working.
I have changed the
Also added some print statements for clarity.
I now need to work through the output (thankfully it's down to 493 combinations from 3,189 - although this still feels excessive!)
This is the new, edited, code (I'll work on the functions later).
I can't see how to edit, there is a typo in my output (copied manually)
It should be:
OK, thank you. It does now seem to be working.
I have changed the
!= 25
lines and the .intersection <=1
lines.Also added some print statements for clarity.
I now need to work through the output (thankfully it's down to 493 combinations from 3,189 - although this still feels excessive!)
This is the new, edited, code (I'll work on the functions later).
def combinations(iterable,r = None): pool = tuple(iterable) n = len(pool) if r > n: return indices = list(range(r)) yield tuple(pool[i] for i in indices) while True: for i in reversed(range(r)): if indices[i] != i + n - r: break else: return indices[i] += 1 for j in range(i + 1,r): indices[j] = indices[j - 1] + 1 yield tuple(pool[i] for i in indices) corner_combinations = 0 side_combinations = 0 side_numbers_all = list(range(1,25)) corner_numbers_all = list(range(1,25)) for corner_a in combinations((corner_numbers_all[1:24]), 2): if 36 < corner_numbers_all[0] + sum(corner_a) < 39: corner1 = (corner_numbers_all[0], corner_a[0], corner_a[1]) if 25 not in (corner1[0] + corner1[1], corner1[0] + corner1[2], corner1[1] + corner1[2]): corner8 = (25 - corner1[0], 25 - corner1[1], 25 - corner1[2]) corner_numbers_remaining = list(set(corner_numbers_all) - set(corner1) - set(corner8)) for corner_b in combinations((corner_numbers_remaining[1:18]), 2): if 36 < corner_numbers_remaining[0] + sum(corner_b) < 39: corner2 = (corner_numbers_remaining[0], corner_b[0], corner_b[1]) if sum(corner1) + sum(corner2) == 75: if 25 not in (corner2[0] + corner2[1], corner2[0] + corner2[2], corner2[1] + corner2[2]): corner7 = (25 - corner2[0], 25 - corner2[1], 25 - corner2[2]) corner_numbers_remaining2 = list(set(corner_numbers_remaining) - set(corner2) - set(corner7)) for corner_c in combinations((corner_numbers_remaining2[1:12]), 2): if 36 < corner_numbers_remaining2[0] + sum(corner_c) < 39: corner3 = (corner_numbers_remaining2[0], corner_c[0], corner_c[1]) if sum(corner3) == sum(corner1): if (corner3[0] + corner3[1] and corner3[0] + corner3[2] and corner3[1] + corner3[2]) != 25: corner6 = (25 - corner3[0], 25 - corner3[1], 25 - corner3[2]) corner_numbers_remaining3 = list(set(corner_numbers_remaining2) - set(corner3) - set(corner6)) for corner_d in combinations((corner_numbers_remaining3[1:6]), 2): if 36 < corner_numbers_remaining3[0] + sum(corner_d) < 39: corner4 = (corner_numbers_remaining3[0], corner_d[0], corner_d[1]) if sum(corner1) + sum(corner4) ==75: if (corner4[0] + corner4[1] and corner4[0] + corner4[1] and corner4[1] + corner4[2]) != 25: corner5 = (25 - corner4[0], 25 - corner4[1], 25 - corner4[2]) corner_combinations += 1 for side_a in combinations((side_numbers_all[1:24]),3): if side_numbers_all[0] + sum(side_a) == 50: if 25 not in (side_numbers_all[0] + side_a[0], side_numbers_all[0] + side_a[1], side_numbers_all[0] + side_a[2], side_a[0] + side_a[1], side_a[0] + side_a[2], side_a[1] + side_a[2]): side1 = (side_numbers_all[0], side_a[0], side_a[1], side_a[2]) if len(set(side1).intersection(corner1)) <= 1 and len(set(side1).intersection(corner2)) <= 1 and len(set(side1).intersection(corner3)) <= 1 and len(set(side1).intersection(corner4)) <= 1 and len(set(side1).intersection(corner5)) <= 1 and len(set(side1).intersection(corner6)) <= 1 and len(set(side1).intersection(corner7)) <= 1 and len(set(side1).intersection(corner8)) <= 1: side6 = (25-side1[0], 25-side1[1], 25-side1[2], 25-side1[3]) side_numbers_remaining = list(set(side_numbers_all) - set(side1) - set(side6)) for side_b in combinations(side_numbers_remaining[1:16],3): if side_numbers_remaining[0] + sum(side_b) == 50: if 25 not in (side_numbers_remaining[0] + side_b[0], side_numbers_remaining[0] + side_b[1], side_numbers_remaining[0] + side_b[2], side_b[0] + side_b[1], side_b[0] + side_b[2], side_b[1] + side_b[2]): side2 = (side_numbers_remaining[0], side_b[0], side_b[1], side_b[2]) if len(set(side2).intersection(corner1)) <= 1 and len(set(side2).intersection(corner2)) <= 1 and len(set(side2).intersection(corner3)) <= 1 and len(set(side2).intersection(corner4)) <= 1 and len(set(side2).intersection(corner5)) <= 1 and len(set(side2).intersection(corner6)) <= 1 and len(set(side2).intersection(corner7)) <= 1 and len(set(side2).intersection(corner8)) <= 1: side5 = (25-side2[0], 25-side2[1], 25-side2[2], 25-side2[3]) side_numbers_remaining2 = list(set(side_numbers_remaining) - set(side2) - set(side5)) for side_c in combinations(side_numbers_remaining2[1:8],3): if side_numbers_remaining2[0] + sum(side_c) == 50: if 25 not in (side_numbers_remaining2[0] + side_c[0], side_numbers_remaining2[0] + side_c[1], side_numbers_remaining2[0] + side_c[2], side_c[0] + side_c[1], side_c[0] + side_c[2], side_c[1] + side_c[2]): side3 = (side_numbers_remaining2[0], side_c[0], side_c[1], side_c[2]) if len(set(side3).intersection(corner1)) <= 1 and len(set(side3).intersection(corner2)) <= 1 and len(set(side3).intersection(corner3)) <= 1 and len(set(side3).intersection(corner4)) <= 1 and len(set(side3).intersection(corner5)) <= 1 and len(set(side3).intersection(corner6)) <= 1 and len(set(side3).intersection(corner7)) <= 1 and len(set(side3).intersection(corner8)) <= 1: side4 = (25-side3[0], 25-side3[1], 25-side3[2], 25-side3[3]) side_combinations += 1 print ("corner combinations:", corner_combinations) print (corner1,"=", sum(corner1), corner2,"=", sum(corner2), corner3,"=", sum(corner3), corner4,"=", sum(corner4), corner5,"=", sum(corner5), corner6,"=", sum(corner6), corner7,"=", sum(corner7), corner8,"=", sum(corner8)) print ("side combinations:", side_combinations) print (side1,"=", sum(side1), side2,"=", sum(side2), side3,"=", sum(side3), side4,"=", sum(side4), side5,"=", sum(side5), side6,"=", sum(side6))
Output:corner combinations: 1
(1, 13, 23) = 37 (3, 15, 20) = 38 (4, 16, 17) = 37 (6, 14, 18) = 38 (19, 11, 7) = 37(21, 9, 8) = 38 (22, 10, 5) = 37 (24, 12, 2) = 38
side combinations: 1
(1, 6, 21, 22) = 50 (2, 10, 18, 20) = 50 (8, 12, 14, 16) = 50 (17, 13, 11, 9) = 50 (23, 5, 7, 5) = 50 (24, 19, 4, 3)
...
corner combinations: 33
(1, 18, 19) = 38 (2, 15, 20) = 37 (3, 14, 21) = 38 (8, 13, 16) = 37 (17, 12, 9) = 38 (22, 11, 4) = 37 (23, 10, 5) = 38 (24, 7, 6) = 37
side combinations: 493
(1, 13, 15, 21) = 50 (2, 14, 16, 18) = 50 (3, 8, 19, 20) = 50 (22, 17, 6, 5) = 50 (23, 11, 9, 7) = 50 (24, 12, 10, 4) = 50
I can't see how to edit, there is a typo in my output (copied manually)
It should be:
Output:Output:
corner combinations: 1
(1, 13, 23) = 37 (3, 15, 20) = 38 (4, 16, 17) = 37 (6, 14, 18) = 38 (19, 11, 7) = 37(21, 9, 8) = 38 (22, 10, 5) = 37 (24, 12, 2) = 38
side combinations: 1
(1, 6, 21, 22) = 50 (2, 10, 18, 20) = 50 (8, 12, 14, 16) = 50 (17, 13, 11, 9) = 50 (23, 15, 7, 5) = 50 (24, 19, 4, 3)
...
corner combinations: 33
(1, 18, 19) = 38 (2, 15, 20) = 37 (3, 14, 21) = 38 (8, 13, 16) = 37 (17, 12, 9) = 38 (22, 11, 4) = 37 (23, 10, 5) = 38 (24, 7, 6) = 37
side combinations: 493
(1, 13, 15, 21) = 50 (2, 14, 16, 18) = 50 (3, 8, 19, 20) = 50 (22, 17, 6, 5) = 50 (23, 11, 9, 7) = 50 (24, 12, 10, 4) = 50