Dies ähnelt der Vereinfachung von Brüchen, jedoch mit Datumsangaben!
Die Eingabe Ihres Programm muss von der Form mm/dd
zum Beispiel
3/4 //March 4
12/15 //December 15
1/1 // January 1
Wir gehen davon aus, dass die Eingabe so gültig ist, dass die Monate diese Anzahl von Tagen enthalten:
January 31
February 28
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31
Die Aufgabe Ihres Programms besteht darin, die angenommene gültige Eingabe zu übernehmen und das Datum iterativ (oder rekursiv) zu vereinfachen und bei jeder Iteration (einschließlich der 0.) das Datum mit dem vollständigen Namen des Monats wie oben beschrieben auszugeben.
Beispielsweise:
Bei einer Eingabe von:
12/18
Würde ausgeben
December 18
June 9
February 3
Eine bereits vereinfachte Eingabe gibt nur sich selbst aus:
11/17
Ausgänge:
November 17
Die Monatsnamen können nicht von einer Funktion in Ihrer Sprache stammen. Die Zeichenfolgen können verschleiert und berechnet werden, wie Sie möchten, aber Sie können keine Standardfunktion wie GetMonthString (4) oder ähnliches verwenden. Sie müssen entweder diese Funktion schreiben oder einen Weg finden, die Monatsnamen wie beschrieben auszugeben.
Ich kann mir keine Fälle vorstellen, in denen das vereinfachte Datum ein illegales Datum erzeugt, aber wenn Sie jemals ein illegales Datum auf dem Weg produzieren, geben Sie Folgendes aus:
Illegal Date
Wenn Sie jedoch sicher sind, dass dies nicht möglich ist, benötigen Sie keinen Code für diesen Fall. Die ausgegebenen Daten müssen nur immer gemäß den oben beschriebenen Angaben gültig sein (es versteht sich von selbst, dass Monate und Tage bei 1 beginnen).
Der Algorithmus:
Bei jeder Iteration dividieren Sie durch die kleinste Zahl, die Zähler und Nenner teilt.
Das heißt, Sie finden alle Zahlen so, dass durch Teilen des Zählers und des Nenners durch diese Zahl ein neuer Zähler und Nenner erzeugt werden, die beide ganze Zahlen sind (gemeinsame Faktoren). Wählen Sie den kleinsten aus und teilen Sie Zähler und Nenner einzeln, um einen neuen Bruch zu erhalten. Wenn die einzige Zahl, durch die Sie teilen können, 1 ist, haben Sie so viel wie möglich vereinfacht und hören auf.
Ich hoffe das ist klar.
Jede Sprache ist erlaubt. Dies ist Code Golf, der kürzeste Code gewinnt!
12/18
bis 6/9
und nicht 4/6
(ich bekomme nicht das ganze Iterations-Chaos ... wenn ich einen Bruch vereinfache, bekomme ich sofort den resultierenden vereinfachten Wert)?