Die Formatierungsreihenfolge von Datumsangaben ist eines der komplexesten und umstrittensten Probleme, mit denen die Welt heute konfrontiert ist. Einige von uns argumentieren vehement, dass Monat / Tag / Jahr angemessen ist, wenn man bedenkt, wie wir sagen, dass Daten laut sind. Andere proklamieren lautstark, dass Tag / Monat / Jahr am besten ist, da die Begriffe in aufsteigender Reihenfolge der Dauer aufgeführt werden, die sie darstellen.
Genug ist genug. Computer können diesen Streit einfach und fair lösen. Ihr Code, eine vollständige Funktion oder ein Programm, enthält eine durch Schrägstriche begrenzte Datumszeichenfolge, z 12/1/2015
. Beachten Sie, dass dies das genaue Format ist, ohne führende Nullen und mit einem vierstelligen Jahr am Ende.
- Wenn es sich definitiv um Monat / Tag / Jahr handelt, geben Sie beispielsweise
10/31/1998
eine Textdarstellung dieses Datums in genau diesem Format mit dem vollständigen Monatsnamen, Tag und Jahr aus:October 31, 1998
- Wenn es definitiv Tag / Monat / Jahr, zum Beispiel
25/12/1989
, Ausgabe der gleiche Art von Textdarstellung:December 25, 1989
. - Wenn es nicht eindeutig ist, ob es sich um Monat / Tag / Jahr oder Tag / Monat / Jahr handelt, geben Sie ein Datum aus, mit dem die Mehrdeutigkeit behoben wird, indem Sie die beiden möglichen Daten wie folgt kombinieren:
- Erstellen Sie einen neuen Monatsnamen, indem Sie die erste Hälfte des Namens des vorherigen Monats übernehmen und die zweite Hälfte des späteren Monats anhängen . Für Monate mit ungerader Länge erhält die erste Hälfte den zusätzlichen Buchstaben. Um explizit, sind die ersten Hälften der Monate
Janu
,Febr
,Mar
,Apr
,Ma
,Ju
,Ju
,Aug
,Septe
,Octo
,Nove
, undDece
und die zweiten Hälften sind daherary
,uary
,ch
,il
,y
,ne
,ly
,ust
,mber
,ber
,mber
, undmber
. - Berechnen Sie den Tag, indem Sie den Durchschnitt der zwei möglichen Tage bilden und dabei das Wort ergreifen, wenn der Durchschnitt keine ganze Zahl ist.
- Die Textdarstellung dieses Datums
10/8/2011
ausgeben , zB für AusgabeAugber 9, 2011
.
- Erstellen Sie einen neuen Monatsnamen, indem Sie die erste Hälfte des Namens des vorherigen Monats übernehmen und die zweite Hälfte des späteren Monats anhängen . Für Monate mit ungerader Länge erhält die erste Hälfte den zusätzlichen Buchstaben. Um explizit, sind die ersten Hälften der Monate
Wenn das Eingabedatum nicht Monat / Tag / Jahr oder Tag / Monat / Jahr sein kann (z. B. 13/13/2013
oder sogar 2/30/2002
), ist jedes Verhalten akzeptabel. Dieser Code Golf, der kürzeste Code gewinnt!
Testfälle:
10/31/1998
gibt October 31, 1998
25/12/1989
gibt December 25, 1989
10/8/2011
gibt Augber 9, 2011
8/5/1957
gibt Maust 6, 1957
9/12/2012
(seltsamerweise) gibt September 10, 2012
1/1/2000
gibt January 1, 2000
without leading zeroes and with a four-digit year at the end
impliziertyear >= 1000
Antworten:
Pyth - 156 Bytes
Wirklich schlechter Code, und muss gepackte Zeichenfolgen verwenden, aber es ist etwas.
Test Suite .
quelle
Mathematica
341 304 298 288293 BytesHierbei wird eine reine oder anonyme Funktion verwendet, dh eine Funktion ohne eigenen Namen.
DateString
Gibt eine Fehlermeldung zurück, wenn das Datum nicht eindeutig ist.Check
Fängt die Mehrdeutigkeit ab und sendet das beleidigende Datum anDateList
, wodurch es in eine Liste von 3 ganzen Zahlen umgewandelt wird (von denen es glaubt, dass sie es sind{year, month, day}
). Die Ganzzahlen für Monat und Tag werden nach Größe sortiert und zur Bestimmung von Monat und Tag gemäß den Anweisungen des OP verwendet.Quiet
Bringt den Fehler beim Drucken zum Schweigen.quelle
Javascript (ES6),
311295282274246238 BytesBearbeiten: Verwendet
toLocaleString
, um Monatsnamen zu generieren. Ändern Sie das Gebietsschema, um Ergebnisse mit Monatsnamen in verschiedenen Gebietsschemas zu erhalten!Edit 2: Generiert jetzt zwei Monatsnamen anstatt aller 12!
Ungolfed:
Beispiel:
Dank an:
@ user81655 , 274 => 246 Bytes
@ edc65 , 246 => 238 Bytes
quelle
Math.ceil(e[c].length/2)
zu(r=e[c].length/2)+r%1
,Array(2).fill().map((_,f)=>...)
zuf=>...
und jedene[n]
zue(n)
,i=+(g>h)
zui=g>h
unde[i]
zue[+i]
, entfernen Sie die unnötigen Klammern in dem letzten ternären Operator, auchnewDate
solltenew Date
.Math.ceil
mitb=c=>e(c).length+1>>1
JavaScript ES6, 204
Testschnipsel:
quelle
Python 3 (290 Bytes)
Ähnlich wie die Antwort von Ashwin Gupta, jedoch unter Ausnutzung von Pythons Kalendermodul, um nicht alle Monatsnamen auszuschreiben.
Python 2 sollte ein paar Bytes mit einer Ganzzahldivision abschneiden und die Klammern für verlieren
print
.quelle
Python,
558554 BytesEin wirklich, wirklich, wirklich schrecklich gelungenes Beispiel, wie man das in Python macht. Entschuldigung, ich bin super schlecht in diesem Golfspielzeug
D:
. Es funktioniert aber. Ich bin mir sicher, dass es viele Möglichkeiten gibt, dies zu vereinfachen. Lassen Sie es mich in den Kommentaren wissen. Golf gespielt:Ungolfed
Bildschirmfoto:
quelle
S=" "
oben drauf und ersetze dann jede Instanz von" "
mitS
- das spart ein paar Bytese= int[...
,o = o...
) stehen einige unnötige Leerzeichen . Es könnte sich auch als abenteuerlich erweisen, häufig verwendete Anrufeint
auf Großbuchstaben zu setzenfrom math import* I=int S=" " C="," L=len P=print def d(i): l=["","January","February","March","April","May","June","July","August","September","October","November","December"];w=i.split('/');f=I(w[0]);s=I(w[1]);y=w[2] if f>12:e=I(w[1]);P(l[e]+S+w[0]+C+S+y) elif f<13and s>12:e=I(w[0]);P(l[e]+S+w[0]+C+S+y) else: if f<s:o=l[f];t=l[s] else:o=l[s];t=l[f];o=o[0:I(ceil(L(o)/2))];t=t[I(ceil(L(t)/2)):L(t)] P(o+t+S+str(floor((f+s)/2))+C+S+y)
PHP,
301294 BytesIch dachte, ich könnte mit der Javascript-Antwort mithalten. Naja.
Ich glaube, ich könnte es verkleinern und ich mag den Code, den ich für die mehrdeutigen Daten verwendet habe, nicht. Ich denke, es gibt einen besseren Weg, dies zu tun.
Ungolfed:
quelle