C'est similaire à la simplification des fractions, mais avec les dates!
L'entrée de votre programme doit être de la forme mm/dd
Par exemple
3/4 //March 4
12/15 //December 15
1/1 // January 1
Nous supposons que l'entrée sera valide de telle sorte que les mois contiennent ces nombres de jours:
January 31
February 28
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31
Le travail de votre programme consiste à prendre l'entrée valide supposée et à simplifier de manière itérative (ou récursive) la date, et à chaque itération (y compris la 0e), sortir la date avec le nom complet du mois comme écrit ci-dessus.
Par exemple:
Étant donné une entrée de:
12/18
Serait sortie
December 18
June 9
February 3
Une entrée déjà simplifiée ne sort que d'elle-même:
11/17
Les sorties:
November 17
Les noms de mois ne peuvent pas provenir d'une fonction dans votre langue. Les chaînes peuvent être obscurcies, calculées, comme vous le souhaitez, mais vous ne pouvez pas utiliser une fonction standard comme GetMonthString (4) ou quelque chose, vous devez soit écrire cette fonction, soit trouver un moyen de sortir les noms de mois comme décrit.
Je ne peux penser à aucun cas où la date simplifiée produit une date illégale, mais si jamais vous produisez une date illégale en cours de route, affichez:
Illegal Date
Mais si vous êtes sûr que cela ne peut pas se produire, vous n'avez pas besoin de code couvrant ce cas. Les dates produites doivent toujours être valides conformément à ce qui a été décrit ci-dessus (il va sans dire que les mois et les jours commencent à 1).
L'algorithme:
À chaque itération, vous divisez par le plus petit nombre qui divise le numérateur et le dénominateur.
Autrement dit, vous trouvez tous les nombres tels que, en divisant le numérateur et le dénominateur par ce nombre, vous obtenez un nouveau numérateur et dénominateur qui sont tous deux des entiers (facteurs communs). Sélectionnez le plus petit et divisez individuellement le numérateur et le dénominateur pour produire une nouvelle fraction. Si le seul nombre que vous pouvez diviser est 1, alors vous avez simplifié autant que possible et vous vous arrêtez.
J'espère que cela est clair.
N'importe quelle langue est autorisée. C'est Code Golf, le code le plus court gagne!
12/18
à 6/9
et non 4/6
(je ne comprends pas tout le désordre d'itération ... quand je simplifie une fraction je suis arrivé immedialtely la valeur simplifiée résultant)?