Vinor Vernge 의 훌륭하고 매혹적인 책 A Deepness in the Sky ( 1을 강력히 추천합니다 )에서 다양한 스타 시스템에 걸친 문화 인 Qeng Ho 는 "일", "달"이라는 개념이 없습니다. 년 등 "으로 표시되므로 시간을 초 단위로 측정하는 고유 한 시간 관리 시스템이 있습니다. 가장 일반적으로 사용되는 단위는 Ksec (킬로 초), Msec (메가 초) 및 Gsec (기가 초)입니다. 온라인에서 찾을 수 없으므로 내 책의 편리한 차트가 있습니다.
당신은 현재 팜 누웬 (Pham Nuwen)을 비행하고 있으며 , " 지구 " 라는 이상한, 알려지지 않은 행성으로부터 메시지를 받았습니다 . 2 그들은 당신과 다른 시간 단위를 사용하며, 컴퓨터는 그들의 시간 단위를 인식하지 못합니다. 선박의 상주 프로그래머-고고학자 인 여러분의 임무는 지구 시간 단위를 인식 할 수 있도록 시간 처리 코드를 패치하는 것 입니다.
당연히, 몇 Ksec 동안 만 잠자기 때문에 코드를 가능한 빨리 짧게 작성하여 빠르게 작성할 수 있습니다. 운 좋게도 성간 거래 문화 인 Qeng Ho는 발명 된 모든 프로그래밍 언어에 액세스 할 수 있습니다.
입력
입력은 하나 이상의 공백으로 분리 된 구성 요소를 포함하는 단일 문자열
입니다. 성분을 다음 정수> 0 ≤ 255, 공간으로서 정의되며, 다음의 하나이며 second
, minute
, hour
, day
, week
, month
,
year
, decade
, 또는 century
, 가능 (AN 추가와 복수 s
또는
centuries
지난 경우에).
유효한 입력 예는 다음과 같습니다.
10 days 12 hours
1 year
184 centuries 1 second
9 weeks 6 days 2 hours 1 minute 20 seconds
입력에 대해 다음을 가정 할 수 있습니다.
단위의 복수화는 항상 관련 번호와 일치합니다.
입력에 여러 구성 요소가 있는 경우 항상 길이가 내림차순입니다.
이 도전의 목적을 위해 다양한 입력 단위의 의미는 다음과 같습니다.
unit relative absolute
---------------------------------------
second 1 second 1 second
minute 60 seconds 60 seconds
hour 60 minutes 3600 seconds
day 24 hours 86400 seconds
week 7 days 604800 seconds
month 30 days 2592000 seconds
year 365 days 31536000 seconds
decade 10 years 315360000 seconds
century 10 decades 3153600000 seconds
산출
코드에서 지원해야하는 Qeng Ho 장치는 다음과 같습니다.
unit relative absolute
----------------------------------------
second 1 second 1 second
Ksec 1000 seconds 1000 seconds
Msec 1000 Ksecs 1000000 seconds
Gsec 1000 Msecs 1000000000 seconds
다음 알고리즘을 사용하여 코드 출력을 결정하십시오.
먼저 입력이 나타내는 총 시간을 합산하십시오.
입력 시간보다 짧거나 같은 시간에 가장 큰 Qeng Ho 장치를 찾으십시오. 본질적으로 적어도 하나가있는 가장 큰 장치를 찾으십시오.
입력에 주어진 총 시간을이 단위로 변환하고 결과를 소수점 3 자리로 반올림합니다.
반올림, 반올림, 0에서 반올림 또는 ∞ 또는 -∞로 반올림하는 방법 중에서 선택할 수 있습니다. 반올림 결과가로 끝나는 경우 0
후행 0을 제거하거나 원하는만큼 유지하거나 입력에 따라 둘 다 수행 할 수 있습니다.
둥근 결과가 정확히 경우 1.000
, 당신은 단수 양식을 사용한다 ( second
, Ksec
, Msec
, Gsec
); 그렇지 않으면, 복수의 양식을 사용 ( seconds
,
Ksecs
, Msecs
, Gsecs
).
어떤 경우에는 Ksec와 같은 단위를 사용하고 있지만 반올림 한 결과는 1000.000Ksec입니다. 이 경우 단순히 1000.000 Ksecs
대신 출력 할 수 있습니다
1 Msec
.
입력 값이 단위 (세기, 10 년, 연도 등)의 내림차순이라고 항상 가정 할 수 있습니다. 또한, 주어진 단위 다음에 오는 구성 요소는 항상 더 짧습니다 (즉, 1 decade 20 years
유효하지 않은 입력입니다).
테스트 사례
참고 : 별표 ( *
) 로 표시된 결과는 반올림 차이로 인해 무시할만한 양으로 달라질 수 있습니다.
input output
-------------------------------------------------------------
1 hour 3.600 Ksecs
1 day 86.400 Ksecs
2 weeks 1.210 Msecs
1 year 31.536 Msecs
32 years 1.009 Gsecs *
1 second 1.000 second
1 century 6 decades 5.046 Gsecs *
255 centuries 804.168 Gsecs
2 weeks 6 days 1 hour 19 minutes 4 seconds 1.733 Msecs
1 week 3 days 3 hours 7 minutes 875.220 Ksecs
1 week 4 days 13 hours 46 minutes 40 seconds 1.000 Msec
2 months 2 hours 5.191 Msecs *
16 minutes 39 seconds 999.000 seconds
규칙
- 이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.
1 : 물론 당신이 하드 공상 과학을 좋아하는 경우에만. 어떤 경우에는 먼저 A Fire Upon the Deep을 읽는 것이 좋습니다 .
2 : 기술적으로 "오래된 지구"는 하늘의 깊은 곳에서 여러 번 언급 되었지만 ...
2 months 2 hours
"2 개월 * 2 시간"으로 해석 합니다.