Forum Posts

Teva
Apr 13, 2019
In General Discussions
חידת המרובע הקסום הראשוני היא חידה שבה צריך להציב תשעה מן המספרים הראשוניים בין אחד למאה(1 נכלל במספרים הראשוניים) כדי ליצור ריבוע(3x3) שבו הסכום המספרים בכל שורה, טור ואלכסון הוא 111. בתוכנה השתמשתי בשיטת הבקטרייסינג בכדי לקבל את התוצאה. הקוד: def print_board(l): print(f'{l[0]} | {l[1]} | {l[2]}') print("------------") print(f'{l[3]} | {l[4]} | {l[5]}') print("------------") print(f'{l[6]} | {l[7]} | {l[8]}') def is_prime(num): if num == 2 or num == 1: return True else: pl = [i for i in range(2,num)] for item in pl: if num%item != 0: pass else: return False return True primes = list(filter(is_prime, [i for i in range(1, 100)])) board = [0 for i in range(9)] o1 = primes[::] for item1 in o1: board[0] = item1 o2 = primes[::] o2.remove(board[0]) ro2 = [] for item in o2: if item+board[0]>13 and item+board[0] < 111: ro2.append(item) for item2 in ro2: board[1] = item2 o3 = primes[::] o3.remove(board[0]), o3.remove(board[1]) ro3 = [] if (111-(board[0]+board[1])) in o3: ro3.append(111-(board[0]+board[1])) for item3 in ro3: board[2] = item3 o4 = primes[::] o4.remove(board[0]), o4.remove(board[1]), o4.remove(board[2]) ro4 = [] for item in o4: if item+board[0] > 13 and item+board[0] < 111: ro4.append(item) for item4 in ro4: board[3] = item4 o5 = primes[::] o5.remove(board[0]), o5.remove(board[1]), o5.remove(board[2]), o5.remove(board[3]) ro5 = [] for item in o5: if item+board[0] > 13 and item+board[0] < 111 and item+board[1] > 13 and item+board[1] < 111 and item+board[2] > 13 and item+board[2] < 111 and item+board[3] > 13 and item+board[3] < 111: ro5.append(item) for item5 in ro5: board[4] = item5 o6 = primes[::] o6.remove(board[0]), o6.remove(board[1]), o6.remove(board[2]), o6.remove(board[3]), o6.remove(board[4]) ro6 = [] if (111-(board[3]+board[4])) in o6 and ((111-(board[3]+board[4]))+board[2]) > 13 and ((111-(board[3]+board[4]))+board[2]) < 111: ro6.append(111-(board[3]+board[4])) for item6 in ro6: board[5] = item6 o7 = primes[::] o7.remove(board[0]), o7.remove(board[1]), o7.remove(board[2]), o7.remove(board[3]), o7.remove(board[4]), o7.remove(board[5]) ro7 = [] if (111-(board[0]+board[3])) in o7 and ((111-(board[0]+board[3]))+board[2]+board[4]) == 111: ro7.append(111-(board[0]+board[3])) for item7 in ro7: board[6] = item7 o8 = primes[::] o8.remove(board[0]), o8.remove(board[1]), o8.remove(board[2]), o8.remove(board[3]), o8.remove(board[4]), o8.remove(board[5]), o8.remove(board[6]) ro8 = [] if (111-(board[1]+board[4])) in o8 and (111-(board[1]+board[4]))+board[6] > 13 and (111-(board[1]+board[4]))+board[6] < 111: ro8.append(111-(board[1]+board[4])) for item8 in ro8: board[7] = item8 o9 = primes[::] o9.remove(board[0]), o9.remove(board[1]), o9.remove(board[2]), o9.remove(board[3]), o9.remove(board[4]), o9.remove(board[5]), o9.remove(board[6]), o9.remove(board[7]) ro9 = [] if (111-(board[6]+board[7])) in o9 and (111-(board[6]+board[7]))+board[2]+board[5] == 111 and (111-(board[6]+board[7]))+board[0]+board[4] == 111: ro9.append(111-(board[6]+board[7])) for item9 in ro9: board[8] = item9 print_board(board) print("--------------------------------------------") board[8] = item9 board[7] = 0 board[6] = 0 board[5] = 0 board[4] = 0 board[3] = 0 board[2] = 0 board[1] = 0 board[0] = 0 אחרי כל צעד אני מחזיר את התא למצב הראשוני שלו-0. אני מוריד את האפשרויות הלא הגיוניות ובכך נשאר עם מעט אפשרויות... התוכנה עובדת מהר מאוד(פחות משנייה) ומביאה 8 תוצאות(שהם בעצם אותה התוצאה רק מסובבת ומראה). Answer: 7 | 61 | 43 ------------ 73 | 37 | 1 ------------ 31 | 13 | 67 -------------------------------------------- 7 | 73 | 31 ------------ 61 | 37 | 13 ------------ 43 | 1 | 67 -------------------------------------------- 31 | 13 | 67 ------------ 73 | 37 | 1 ------------ 7 | 61 | 43 -------------------------------------------- 31 | 73 | 7 ------------ 13 | 37 | 61 ------------ 67 | 1 | 43 -------------------------------------------- 43 | 1 | 67 ------------ 61 | 37 | 13 ------------ 7 | 73 | 31 -------------------------------------------- 43 | 61 | 7 ------------ 1 | 37 | 73 ------------ 67 | 13 | 31 -------------------------------------------- 67 | 1 | 43 ------------ 13 | 37 | 61 ------------ 31 | 73 | 7 -------------------------------------------- 67 | 13 | 31 ------------ 1 | 37 | 73 ------------ 43 | 61 | 7 --------------------------------------------
2
1
75
Teva
More actions