barcode

Python으로 60갑자 뽑기

Coding/Python

참고로 60갑자가 뭔지 궁금하면 달력을 보자. 올해는 임인년이라 인월 인일 인시에 사인검 하나 나온다. (인년 인월 인일 인시 해서 사인이라 사인검이다)


60갑자는 천간 10개와 지지 12개로 이루어지는데... 어? 뭐임? 하나 할인해요? ㄴㄴ 10과 12의 최소공배수가 60임다.

천간: 갑을병정무기경신임계
지지: 자축인묘진사오미신유술해

이렇게 된다. 뒤에 있는 지지가 여러분의 띠이기도 하다. 내가 태어나는 해에도 당연히 갑자가 있고 이게 60년마다 한번씩 돌아오기 때문에 환갑 = 61세(만 60세)에 치른다. 또한 지지가 12개이기때문에 띠동갑은 12살이다.

 

cheongan = ['갑','을','병','정','무','기','경','신','임','계'] * 12
gigi = ['자','축','인','묘','진','사','오','미','신','유','술','해'] * 10
gabja_list = list()

for i in range(len(cheongan)):
  gabja = '{}{}'.format(cheongan[i],gigi[i])
  gabja_list.append(gabja)

print(gabja_list)

천간과 지지가 10개, 12개니까 120으로 잡고 각 배열을 곱했다. 이게 최선임...

['갑자', '을축', '병인', '정묘', '무진', '기사', '경오', '신미', '임신', '계유', '갑술', '을해', '병자', '정축', '무인', '기묘', '경진', '신사', '임오', '계미', '갑신', '을유', '병술', '정해', '무자', '기축', '경인', '신묘', '임진', '계사', '갑오', '을미', '병신', '정유', '무술', '기해', '경자', '신축', '임인', '계묘', '갑진', '을사', '병오', '정미', '무신', '기유', '경술', '신해', '임자', '계축', '갑인', '을묘', '병진', '정사', '무오', '기미', '경신', '신유', '임술', '계해', '갑자', '을축', '병인', '정묘', '무진', '기사', '경오', '신미', '임신', '계유', '갑술', '을해', '병자', '정축', '무인', '기묘', '경진', '신사', '임오', '계미', '갑신', '을유', '병술', '정해', '무자', '기축', '경인', '신묘', '임진', '계사', '갑오', '을미', '병신', '정유', '무술', '기해', '경자', '신축', '임인', '계묘', '갑진', '을사', '병오', '정미', '무신', '기유', '경술', '신해', '임자', '계축', '갑인', '을묘', '병진', '정사', '무오', '기미', '경신', '신유', '임술', '계해']

그러면 이렇게 나온다. 에이 60갑자라면서요?

['갑자', '을축', '병인', '정묘', '무진', '기사', '경오', '신미', '임신', '계유', '갑술', '을해', '병자', '정축', '무인', '기묘', '경진', '신사', '임오', '계미', '갑신', '을유', '병술', '정해', '무자', '기축', '경인', '신묘', '임진', '계사', '갑오', '을미', '병신', '정유', '무술', '기해', '경자', '신축', '임인', '계묘', '갑진', '을사', '병오', '정미', '무신', '기유', '경술', '신해', '임자', '계축', '갑인', '을묘', '병진', '정사', '무오', '기미', '경신', '신유', '임술', '계해'
'갑자', '을축', '병인', '정묘', '무진', '기사', '경오', '신미', '임신', '계유', '갑술', '을해', '병자', '정축', '무인', '기묘', '경진', '신사', '임오', '계미', '갑신', '을유', '병술', '정해', '무자', '기축', '경인', '신묘', '임진', '계사', '갑오', '을미', '병신', '정유', '무술', '기해', '경자', '신축', '임인', '계묘', '갑진', '을사', '병오', '정미', '무신', '기유', '경술', '신해', '임자', '계축', '갑인', '을묘', '병진', '정사', '무오', '기미', '경신', '신유', '임술', '계해']

1+1됐다. 

cheongan = ['갑','을','병','정','무','기','경','신','임','계'] * 12
gigi = ['자','축','인','묘','진','사','오','미','신','유','술','해'] * 10
gabja_list = list()

for i in range(len(cheongan)):
  gabja = '{}{}'.format(cheongan[i],gigi[i])
  gabja_list.append(gabja)

gabja_list = set(gabja_list)
gabja_list = list(gabja_list)
print(gabja_list)

그래서 이렇게 만들고 set->list로 변환하는 과정을 거치면

['신유', '기미', '무신', '병인', '기묘', '신묘', '갑진', '신사', '계사', '을해', '을묘', '경진', '경신', '갑술', '무자', '경자', '임오', '병신', '신축', '기사', '병진', '기해', '임진', '계해', '갑자', '신해', '임자', '경인', '을축', '정사', '계묘', '갑신', '계유', '을사', '갑인', '정유', '무인', '임술', '경오', '을미', '계미', '병술', '임신', '기축', '병자', '임인', '계축', '무오', '을유', '갑오', '경술', '신미', '정미', '정축', '정묘', '무진', '기유', '병오', '정해', '무술']

순서는 개판이지만 길이라 1/2로 줄어드는 기적을 볼 수 있다.

 

cheongan = ['갑','을','병','정','무','기','경','신','임','계'] * 6
gigi = ['자','축','인','묘','진','사','오','미','신','유','술','해'] * 5
gabja_list = list()

for i in range(len(cheongan)):
  gabja = '{}{}'.format(cheongan[i],gigi[i])
  gabja_list.append(gabja)

print(gabja_list)

근데 저렇게 하면 코드도 복잡하고 애초에 반으로 줄여서 하면 그럴 필요가 없잖음? set 만들었다가 하면 순서도 개판이고. 그럼 최소공배수가 60이니까 천간 배열은 6번, 지지 배열은 길이가 12니까 5번 곱하면 되잖음.

['갑자', '을축', '병인', '정묘', '무진', '기사', '경오', '신미', '임신', '계유', '갑술', '을해', '병자', '정축', '무인', '기묘', '경진', '신사', '임오', '계미', '갑신', '을유', '병술', '정해', '무자', '기축', '경인', '신묘', '임진', '계사', '갑오', '을미', '병신', '정유', '무술', '기해', '경자', '신축', '임인', '계묘', '갑진', '을사', '병오', '정미', '무신', '기유', '경술', '신해', '임자', '계축', '갑인', '을묘', '병진', '정사', '무오', '기미', '경신', '신유', '임술', '계해']

깔끔하죠?