728x90
반응형
[key word] 뒬러, 짝수 마방진
파이썬 실습창을 열 수 있습니다.실습창 열기
4N 마방진
짝수 마방진은 4N 마방진 (차수가 4의 배수인 마방진)을 만드는 방법은 연구되어 있지만 그 외는 방법을 못찾고 있습니다. 아마도 당신이 찾아주기를 기다리고 있는 것 같습니다.
4N 마방진을 연구한 몇 사람 중에서 뒬러의 방법을 소개합니다.
1. 뒬러((Durer)의 방법
1부터 n*n 까지의 숫자를 한줄한줄씩 순서대로 기록하는데 기록하는 곳이 대각선이면 대칭되는 곳에 기록합니다.
이것이 뒬러가 얘기한 방법입니다. 코딩은 우리의 몫입니다.
2. 문제 분석
코딩을 하기 위해서 대각선 판단과 대각선이면 대칭되는 곳 또 그곳에 넣을 값을 찾아야 합니다.
- i행, j열의 대각선 판단은 다음과 같이 할 수 있습니다.
주 대각선(\): i%4 = j%4
부 대각선(/): (i%4+j%4)%4==3 - i행, j열에 넣을 숫자는 다음과 같이 구할 수 있습니다.
대각선이 아닌 경우: i*n+j+1
대각선인 경우 : (n-i)*n-j
수식을 이해할 수 있을때까지 분석하여 보세요. 글로써 설명하기에 너무 길어집니다.
3. 코딩하기
n=8
a=[[0]*n for i in range(n)]
for i in range(n):
for j in range(n):
dia=i%4==j%4 or (i%4+j%4)%4==3 # 대각선 판단
v1=(n-i)*n-j # 대각선일때 넣을 값
v2=i*n+j+1 # 대각선이 아닝때 넣을 값
a[i][j]=v1 if dia else v2 # dia(diagonal:대각선)이면 v1, 아니면 v2
for i in a:
for j in i:
print(f'{j:4}',end='')
print()
'''
결과입니다.
64 2 3 61 60 6 7 57
9 55 54 12 13 51 50 16
17 47 46 20 21 43 42 24
40 26 27 37 36 30 31 33
32 34 35 29 28 38 39 25
41 23 22 44 45 19 18 48
49 15 14 52 53 11 10 56
8 58 59 5 4 62 63 1
8번 줄을 다음과 같이 할 수 있습니다.
a[i][j]=v2
if dia:a[i][j]=v1
5번부터 8번 줄까지를 다음과 같이 한 줄로 할 수도 있습니다.
a[i][j]=(n-i)*n-j if i%4==j%4 or (i%4+j%4)%4==3 else i*n+j+1
원본의 코드는 긴 코드를 나누어 적은 것입니다.
실습창이면 출력부분을 다음과 같이 코딩하세요.
for i in a:
s=''
for j in i:
s+='{0:>4}'.format(j)
print(s)
'''
우리 인류는 매우 다양하고 재미있는 마방진들을 만들어 왔습니다.
특히 우리 나라 조선시대 때 최석정이 만든 지수귀문도는 더욱 재미있습니다.
1부터 30까지의 숫자를 6각형으로 배치하여 숫자합이 93이 되도록 했습니다.
결과만 적어놓고 방법을 설명하지 않아서 아직도 원리를 찾고있습니다.
다양한 마방진을 즐기시기 바랍니다.
지수귀문도 원리도 규명하여 주시고요.
안녕!
728x90
반응형
'알고리듬' 카테고리의 다른 글
[알고리듬] #80 다단 출력 (0) | 2024.05.16 |
---|---|
[알고리듬] #79 파스칼의 삼각형 (0) | 2024.05.07 |
[알고리듬] #77 홀수 마방진 (2) | 2024.05.01 |
[알고리듬] #76 리스트 핸들링 (0) | 2024.04.30 |
[알고리듬] #75 순위 구하기 (1) | 2024.04.28 |