이것은 분수를 단순화하는 것과 비슷하지만 날짜가 있습니다!
프로그램의 입력은 형식이어야합니다 mm/dd
예를 들어,
3/4 //March 4
12/15 //December 15
1/1 // January 1
우리는 입력이 유효 할 것으로 가정합니다.
January 31
February 28
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31
프로그램의 작업은 가정 된 유효한 입력을 취하고 날짜를 반복적으로 (또는 재귀 적으로) 단순화하고 반복 할 때마다 (0을 포함하여) 위에 작성된 달의 전체 이름으로 날짜를 출력하는 것입니다.
예를 들면 다음과 같습니다.
다음과 같은 입력이 주어집니다.
12/18
출력 할 것이다
December 18
June 9
February 3
이미 단순화 된 입력은 자체 출력 만합니다.
11/17
출력 :
November 17
월 이름은 해당 언어의 함수에서 올 수 없습니다. 문자열을 난독 처리하고 계산할 수 있지만 원하는대로 GetMonthString (4)과 같은 표준 함수를 사용할 수 없으며 해당 함수를 작성하거나 설명 된대로 월 이름을 출력 할 방법을 찾아야합니다.
단순화 된 날짜가 불법 날짜를 생성하는 경우는 생각할 수 없지만 그 과정에서 불법 날짜를 생성하는 경우 출력 :
Illegal Date
그러나 이것이 일어날 수 없다고 확신한다면,이 경우를 다루는 코드가 필요하지 않습니다. 출력 날짜는 항상 위에서 설명한 내용에 따라 항상 유효해야합니다 (달과 일이 1에서 시작한다는 것은 말할 것도 없습니다).
알고리즘 :
각 반복에서 분자와 분모를 나누는 가장 작은 숫자로 나눕니다.
즉, 분자와 분모를이 숫자로 나누면 정수 (공통 요소) 인 새로운 분자와 분모가 생성됩니다. 가장 작은 것을 선택하고 분자와 분모를 개별적으로 나눠서 새로운 분수를 만듭니다. 나눌 수있는 유일한 숫자가 1이면 가능한 한 단순화 한 다음 중지합니다.
이것이 분명하기를 바랍니다.
모든 언어가 허용됩니다. 이것은 코드 골프, 가장 짧은 코드 승리입니다!
12/18
로 6/9
가 아니라 4/6
(내가 immedialtely있어 일부 결과 단순화 된 값을 간단하게 때 나는 ... 모든 반복 혼란을하지 않음)?