Isso é semelhante à simplificação de frações, mas com Datas!
A entrada do seu programa deve estar no formato mm/dd
Por exemplo
3/4 //March 4
12/15 //December 15
1/1 // January 1
Assumimos que a entrada será válida de modo que os meses tenham esses números de dias:
January 31
February 28
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31
O trabalho do seu programa é pegar a entrada válida assumida e, iterativamente (ou recursivamente), simplificar a data e, a cada iteração (incluindo a 0ª), gerar a data com o nome completo do mês, conforme escrito acima.
Por exemplo:
Dada uma contribuição de:
12/18
Saída
December 18
June 9
February 3
Uma entrada que já é simplificada apenas gera em si mesma:
11/17
Saídas:
November 17
Os nomes dos meses não podem vir de uma função no seu idioma. As strings podem ser ofuscadas, calculadas da maneira que você quiser, mas você não pode usar uma função padrão como GetMonthString (4) ou algo assim; você precisa escrever essa função ou encontrar uma maneira de exibir os nomes dos meses, conforme descrito.
Não consigo pensar em nenhum caso em que a data simplificada produza uma data ilegal, mas, se alguma vez você produzir uma data ilegal ao longo do caminho, produza:
Illegal Date
Mas se você tem certeza de que isso não pode acontecer, não precisa ter um código que cubra esse caso. As datas exibidas sempre precisam ser válidas de acordo com o que foi descrito acima (não é preciso dizer que meses e dias começam em 1).
O algoritmo:
Em cada iteração, você divide pelo menor número que divide numerador e denominador.
Ou seja, você encontra todos os números que, ao dividir o numerador e o denominador por esse número, produz um novo numerador e denominador que são números inteiros (fatores comuns). Selecione o menor e divida individualmente o numerador e o denominador para produzir uma nova fração. Se o único número que você pode dividir for 1, você simplificou o máximo possível e para.
Espero que isso esteja claro.
Qualquer idioma é permitido. Este é o Code Golf, o código mais curto vence!
12/18
para 6/9
não 4/6
(não recebo toda a bagunça da iteração ... quando simplifico uma fração, obtive imediatamente o valor simplificado resultante)?