나는 시간 여행자이며, 시간의 흐름에 사로 잡혀 있습니다. 나는 특히 시계 바늘이 12 개를지나거나 내 달력의 다음 페이지로 넘어가거나 모든 사람이 "새해 복 많이 받으세요!"라고 소리 치는 순간을 좋아합니다.
마지막 순간부터 다음 순간까지의 진행률 표시 줄 형태로 보여주는 프로그램을 작성하십시오. 예를 들어, 시간이 09:12라고하면 다음과 같이 인쇄해야합니다.
09:00 ####---------------- 10:00
1982 년 5 월이라고 말하면 다음과 같이 인쇄해야합니다.
1982-01 #######------------- 1983-01
내가 시간 여행 자라고 언급 했습니까? 0 AD의 첫 번째 밀리 초에서 9999 AD의 마지막 밀리 초까지 어디에서나 여행하므로 프로그램은 해당 범위의 모든 날짜와 시간을 처리해야합니다.
입력
입력은 다음 형식 중 하나입니다.
YYYY-MM-DDThh:mm:ss.sss
YYYY-MM-DDThh:mm:ss
YYYY-MM-DDThh:mm
YYYY-MM-DDThh
YYYY-MM-DD
YYYY-MM
이들은 처리해야하는 유일한 형식입니다. 각 부분은 정확하게 표시되는 자릿수를 갖습니다. 이는 소수 초에 후행 0이있을 수 있음을 의미합니다 (예 :
.120
never.12
). 는T
시간에서 날짜를 구분 리터럴 문자 "T"입니다. 시간은 24 시간제입니다.월과 일은 1을 기준으로합니다 (자세한 내용은 아래 참조).
유효하지 않은 범위를 벗어난 입력은 처리 할 필요가 없습니다.
프로그래머의 재량에 따라 입력에 단일 줄 바꿈 개행이있을 수 있습니다.
진행률 표시 줄 수학
이 프로그램은 주어진 입력에서 최소 및 두 번째 중요 단위와 관련이 있습니다. 예를 들어 입력에 일 수준의 정밀도가있는 경우 (예 :2016-12-14
:)가있는 경우 진행률 표시 줄에 입력 월의 일 비율과 남은 일 비율이 표시됩니다.
진행률 표시 줄에는 20 단위 (문자)가 있으며 표시되는 비율은 1 ⁄ 20 의 가장 가까운 단위로 반올림됩니다 . 예를 들어, 2016-12-14T12:28
진행률 표시 줄에 Round ( 28 ⁄ 60 × 20) = 20 개 중 9 개가 "filled"로 표시됩니다.
1 기반 월 및 일
년 12 월 1 일 (예를 들어)하지만 01
의 2016-12-01
계산의 목적을 위해, 절단 단위 오늘의 0 번째 시간의 0 번째 분의 0 번째 밀리 초를 의미 있기 때문에, 달의 0 번째 날입니다. 즉, 2016-12-01
인 0 / 31 에서 December까지 방해하고 2016-12-02
있다 1 / 31 , 등등.
마찬가지로, 2016-01
이렇게 계산에서는 월의 제 0 일의 제 0 밀리 초 0 / 12 하는 수단 2016-12
인 11 / 12 .
그렇습니다. 달과 일이 진행률 표시 줄을 완전히 채우지 않을 것입니다.
다른 달 기간과 윤년
달마다 다른 일수가 있으며 윤년을 포함하여 출력에이를 반영해야합니다. 2017 년 2 월 6 일 진행률 표시 줄은 2016 년 2 월 6 일 (또는 두 해의 1 월 6 일) 진행률 표시 줄과 다릅니다.
여러 가지 잡다한
- 시간 여행자는 그레고리력 달력을 사용합니다 . TL; DR : 1752 년 누락 된 날 과 같은 특별한 경우는 없습니다 . AD 0 년의 날짜를 입력합니다
- 시간 여행자는 일광 절약 시간을 무시합니다.
- 이 프로그램은 윤초를 설명 할 필요는 없지만 가능할 수 있습니다.
산출
프로그램 (또는 함수)은 시간이 경과하면 "채우고"남은 시간은 "열림"으로 표시되는 가로 방향의 20 자 진행률 표시 줄을 인쇄하거나 문자열로 반환해야합니다. 왼쪽에서 오른쪽으로 "채워야"합니다.
진행률 표시 줄에는 왼쪽에 계산되는 기간의 시작을 나타내는 레이블과 오른쪽에 다음과 같은 기간의 시작을 나타내는 레이블이 입력과 같은 형식으로 있어야합니다 (단, 정밀도의 두 단위 만 표시됨). 이 예에서 2016-12-14
유효한 출력은 다음과 같습니다.
12-01 #########----------- 01-01
가능한 각 기간에 유효한 레이블 형식은 다음과 같습니다.
- 개월 :
YYYY-MM
- 일 :
MM-DD
- 시간:
DDThh
- 의사록:
hh:mm
- 초 :
mm:ss
- 밀리 초 :
ss.sss
레이블에 추가 장치가 포함되어 있지 않으며 생략 될 수 없습니다.
출력 노트
- 진행률 표시 줄의 "채워진"단위는
#
문자 로 표시됩니다 . "열기"단위는로 표시됩니다-
. - 진행률 표시 줄과 각 레이블 사이에 정확히 하나의 공백이 있어야합니다.
- 선행 또는 후행 공백 및 / 또는 단일 후행 줄 바꿈이 허용됩니다.
승리
이것은 코드 골프입니다 입니다. 바이트 단위의 최단 코드가 이깁니다. 표준 규칙이 적용됩니다. 표준 허점은 금지되어 있습니다.
예
Input Output
----------------------- -------------------------------------
2016-12-12T12:17 12:00 ######-------------- 13:00
2016-12-12 12-01 #######------------- 01-01
0000-01-01T00:00:00.000 00.000 -------------------- 01.000
0000-01-01T00:00 00:00 -------------------- 01:00
1899-12-31T23 31T00 ###################- 01T00
1899-12-31 12-01 ###################- 01-01
1899-12 1899-01 ##################-- 1900-01
1982-05-15T17:15 17:00 #####--------------- 18:00
1982-05-15T17 15T00 ##############------ 16T00
1982-05 1982-01 #######------------- 1983-01
9999-12-31T23:59:59.999 59.000 #################### 00.000
9999-12 9999-01 ##################-- 10000-01
2000-01-06 01-01 ###----------------- 02-01
2000-02-06 02-01 ###----------------- 03-01
2001-02-06 02-01 ####---------------- 03-01
1742-09-10 09-01 ######-------------- 10-01