Select Git revision
magic_4x4.py
magic_4x4.py 2.57 KiB
from itertools import combinations, permutations, chain
import sys, time
try:
inputs = input()
except EOFError:
pass
#inputs = '1 2 3 4 5 6 7 8 9 10 10 11 13 14 14 15'
if len(inputs.split()) != 16:
print('Error', file=sys.stderr)
exit()
start_time = time.time()
inputs = list(map(int, inputs.split()))
ns = inputs
def get_removed_list(l, removings):
removed = l.copy()
list(map(lambda x: removed.remove(x), removings))
return removed
magic_row_squares = []
for partition1 in combinations(ns, 4):
magic_sum = sum(partition1)
remain_partition1 = get_removed_list(ns, partition1)
for partition2 in combinations(remain_partition1, 4):
if sum(partition2) != magic_sum: continue
remain_partition2 = get_removed_list(remain_partition1, partition2)
for partition3 in combinations(remain_partition2, 4):
if sum(partition3) != magic_sum: continue
remain_partition3 = get_removed_list(remain_partition2, partition3)
for partition4 in combinations(remain_partition3, 4):
if sum(partition4) != magic_sum: continue
magic_row_squares.append([partition1, partition2, partition3, partition4])
c = 0
magic_squares = []
for magic_row_square in magic_row_squares:
for row1 in permutations(magic_row_square[0]):
magic_sum = sum(row1)
for row2 in permutations(magic_row_square[1]):
if not sum(row1[:2] + row2[:2]) == sum(row1[2:] + row2[2:]) == magic_sum: continue
for row3 in permutations(magic_row_square[2]):
for row4 in permutations(magic_row_square[3]):
if not sum(row3[:2] + row4[:2]) == sum(row3[2:] + row4[2:]) == magic_sum: continue
if not (row1[0] + row2[1] + row3[2] + row4[3] == magic_sum and \
row1[3] + row2[2] + row3[1] + row4[0] == magic_sum): continue
end = 0
for i in range(len(magic_row_square)):
if row1[i] + row2[i] + row3[i] + row4[i] != magic_sum:
end = 1
break
if end:
continue
magic_squares.append(row1 + row2 + row3 + row4)
c+=1
for magic_square in magic_squares:
print(' '.join(map(str, magic_square)), file=sys.stdout)
elapsed_time = time.time() - start_time
print(f'총 {len(magic_squares)} 개의 답이 있습니다. 계산시간은 총 {elapsed_time:.2f} 초 입니다. ', file=sys.stderr)