Python Forum
Output not following rules set in code.
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Output not following rules set in code.
#5
Thank you. I will take another look.

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
Reply


Messages In This Thread
RE: Output not following rules set in code. - by Escribblings - Apr-24-2019, 12:49 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  problem in output of a snippet code akbarza 2 420 Feb-28-2024, 07:15 PM
Last Post: deanhystad
  I cannot able to see output of this code ted 1 785 Feb-22-2023, 09:43 PM
Last Post: deanhystad
  why I dont get any output from this code William369 2 1,164 Jun-23-2022, 09:18 PM
Last Post: William369
  How can I organize my code according to output that I want ilknurg 1 1,203 Mar-11-2022, 09:24 AM
Last Post: perfringo
  Why this code not getting desired output ? MDRI 2 2,582 Sep-18-2020, 02:11 AM
Last Post: MDRI
  Read excel file to determine the rules abc12345 4 2,715 May-13-2020, 12:59 PM
Last Post: abc12345
  I couldn't understand the output of the below code ravich129 1 1,953 Dec-12-2019, 06:24 AM
Last Post: sandeep_ganga
  Output of Python code hemal07yc 5 4,025 Sep-13-2019, 11:33 AM
Last Post: perfringo
  What will the following code output? dukoolsharma 5 3,304 Dec-15-2018, 06:05 AM
Last Post: HarshaliPatel
  No output for the code to read emails avani9659 6 4,269 Aug-14-2018, 08:30 AM
Last Post: avani9659

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020