Esto es similar a simplificar fracciones, ¡pero con Fechas!
La entrada de su programa debe ser de la forma mm/dd
Por ejemplo
3/4 //March 4
12/15 //December 15
1/1 // January 1
Suponemos que la entrada será válida de modo que los meses tengan estos números de días:
January 31
February 28
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31
El trabajo de su programa es tomar la entrada válida supuesta y simplificar iterativamente (o recursivamente) la fecha, y en cada iteración (incluida la 0), generar la fecha con el nombre completo del mes como se escribió anteriormente.
Por ejemplo:
Dado un aporte de:
12/18
Saldría
December 18
June 9
February 3
Una entrada que ya está simplificada solo se genera a sí misma:
11/17
Salidas:
November 17
Los nombres de los meses no pueden provenir de una función en su idioma. Las cadenas se pueden ofuscar, calcular, como quiera, pero no puede usar una función estándar como GetMonthString (4) o algo así, ya sea que tenga que escribir esa función o encontrar una forma de generar los nombres de los meses como se describe.
No puedo pensar en ningún caso en que la fecha simplificada produzca una fecha ilegal, pero si alguna vez produce una fecha ilegal en el camino, salida:
Illegal Date
Pero si está seguro de que esto no puede suceder, no necesita tener un código que cubra este caso. Las fechas de salida siempre deben ser válidas de acuerdo con lo descrito anteriormente (no hace falta decir que los meses y días comienzan en 1).
El algoritmo:
En cada iteración se divide por el número más pequeño que divide el numerador y el denominador.
Es decir, encuentra todos los números de tal manera que, dividiendo tanto el numerador como el denominador por este número, produce un nuevo numerador y denominador que son ambos enteros (factores comunes). Seleccione el más pequeño y divida individualmente el numerador y el denominador para producir una nueva fracción. Si el único número por el que puede dividir es 1, entonces ha simplificado lo más posible y se detiene.
Espero que esto quede claro.
Cualquier idioma está permitido. Este es Code Golf, ¡el código más corto gana!
12/18
hacia (no obtengo todo el desorden de iteración ... cuando simplifico una fracción obtuve inmediatamente el valor simplificado resultante)? 6/9
4/6