Questo è simile alla semplificazione delle frazioni, ma con Date!
L'input del programma deve essere nel formato mm/dd
Ad esempio
3/4 //March 4
12/15 //December 15
1/1 // January 1
Partiamo dal presupposto che l'input sarà valido in modo che i mesi contengano questi numeri di giorni:
January 31
February 28
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31
Il lavoro del tuo programma è quello di prendere l'input valido assunto e semplificare iterativamente (o ricorsivamente) la data e ad ogni iterazione (incluso il 0), produrre la data con il nome completo del mese come scritto sopra.
Per esempio:
Dato un input di:
12/18
Uscirebbe
December 18
June 9
February 3
Un input che è già semplificato genera solo se stesso:
11/17
Uscite:
November 17
I nomi dei mesi non possono provenire da una funzione nella tua lingua. Le stringhe possono essere offuscate, calcolate, come preferisci, ma non puoi usare una funzione standard come GetMonthString (4) o qualcosa del genere, o devi scrivere quella funzione o trovare un modo per generare i nomi dei mesi come descritto.
Non riesco a pensare a nessun caso in cui la data semplificata produca una data illegale, ma se mai produci una data illegale lungo la strada, produci:
Illegal Date
Ma se sei sicuro che ciò non possa accadere, non è necessario disporre di codice che copra questo caso. Le date emesse devono sempre essere valide secondo quanto sopra descritto (è ovvio che mesi e giorni iniziano a 1).
L'algoritmo:
Ad ogni iterazione dividi per il numero più piccolo che divide numeratore e denominatore.
Cioè, trovi tutti i numeri in modo tale che, dividendo sia il numeratore che il denominatore per questo numero produca un nuovo numeratore e denominatore che sono entrambi numeri interi (fattori comuni). Seleziona il più piccolo e dividi individualmente il numeratore e il denominatore per produrre una nuova frazione. Se l'unico numero che puoi dividere è 1, allora hai semplificato il più possibile e ti fermi.
Spero che questo sia chiaro.
È consentita qualsiasi lingua Questo è Code Golf, vince il codice più corto!
12/18
a 6/9
e non 4/6
(non ho ricevuto tutto il casino di iterazione ... quando ho semplificare una frazione ho avuto immedialtely il valore risultante semplificato)?