본문 바로가기
  • Top Genius in the world
알고리듬

[알고리듬] #81 만년 달력

by Mr.Algo 2024. 5. 16.
728x90
반응형

[key word] 

파이썬 실습창을 열 수 있습니다.실습창 열기

 

만년설

만년 달력

만년달력(Perpetual Calendar)은 임의의 연도에 대한 달력을 만들 수 있는 달력 프로그램을 일컫는 말입니다.

다음의 코드는 #72의 확장으로서 1년치 달력을 12*42 table에 만들어 다단 출력한 것입니다.

코드를 분석하여 이해하세요.

#Perpetual Calendar
#------------------------------------------------------------------------preparation
month='Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split()
week='Sun Mon Tue Wed Thu Fri Sat'
day=[31,28,31,30,31,30,31,31,30,31,30,31]
table=[['.']*42 for i in range(12)]
#-----------------------------------------------------------------------------input
year,dan=2024,3  # year & output_type(type이 12의 약수가 아닌 경우 조정생략하였음)
#---------------------------------------------------------------------------process
day[1]+=year%4==0 or (year%100==0 and year%400!=0)
y=year-1
wd=(y+y//4-y//100+y//400+1)%7
for i in range(12):
    for j in range(day[i]):
        table[i][j+wd]=j+1
    wd=(j+wd+1)%7   
#----------------------------------------------------------------------------output
print(f'{year} calendar')
for i in range(0,12,dan):
    for m in range(i,i+dan):
        print(f'{month[m]:28s}    ',end='')
    print()    
    print((week+' '*5)*dan)
    print(('-'*27+' '*5)*dan)
    for j in range(0,42,7):
        for k in range(i,i+dan):
            if k>=12:break
            for l in range(j,j+7):
                w=f'{table[k][l]:>3}'
                print(w,end=' ')
            print(' '*4,end='')    
        print()
    print('\n'*2)

 

 

출력입니다.

 

코드를 분석하여 이해할 수 있으면 상당한 수준에 도달한 것을 의미합니다.

축하합니다.

안녕!

728x90
반응형

'알고리듬' 카테고리의 다른 글

[알고리듬] #83 라이프 게임  (0) 2024.06.05
[알고리듬] #82 방향 검사  (0) 2024.06.04
[알고리듬] #80 다단 출력  (0) 2024.05.16
[알고리듬] #79 파스칼의 삼각형  (0) 2024.05.07
[알고리듬] #78 4N 마방진  (2) 2024.05.01