Schreiben Sie eine Funktion, die ein Datum annimmt und den Wochentag des nächsten 29. Februar nach diesem Datum zurückgibt.
Die Eingabe ist eine Zeichenfolge im erweiterten ISO-Format: JJJJ-MM-TT (z. B. 27. Mai 2010 wäre "2010-05-27").
Die Ausgabe ist eine Zeichenfolge, die den Namen des Wochentags enthält (z. B. "Montag"). Die Groß- und Kleinschreibung spielt keine Rolle, aber geben Sie den vollständigen Namen auf Englisch an.
Wenn das angegebene Datum der 29. Februar ist, geben Sie den Wochentag des nächsten 29. Februar zurück.
Verwenden Sie die Berechnungen für den proleptischen Gregorianischen Kalender (also verwendet er die Gregorianischen Schaltjahrberechnungen für die gesamte Länge). Machen Sie sich keine Sorgen um den Julianischen Kalender oder wann der Wechsel von Julianisch zu Gregorisch stattgefunden hat. Nehmen Sie einfach Gregorian für alles an.
Die Funktion sollte für mindestens den Bereich "0001-01-01" - "2100-01-01" funktionieren.
Sie können alle Standardbibliotheken verwenden, die in der Sprache Ihrer Wahl verfügbar sind. Verwenden Sie jedoch keine Bibliotheken von Drittanbietern, es sei denn, Sie möchten diesen Code als Teil Ihrer Lösung verwenden.
Kürzester Code (wenigste Zeichen) gewinnt.
Beispiele:
func("0001-01-01")
->"Sunday"
func("1899-12-03")
->"Monday"
func("1970-01-01")
->"Tuesday"
func("1999-07-06")
->"Tuesday"
func("2003-05-22")
->"Sunday"
func("2011-02-17")
->"Wednesday"
func("2100-01-01")
->"Friday"
(und nein, Sie müssen die Funktion nicht benennen func
)
Hinweise:
- Denken Sie daran, dass Jahre, die mit 00 enden und nicht durch 400 teilbar sind, keine Schaltjahre sind.
- Der 1. Januar 0001 ist ein Montag.
date
. Entfernen Sie einfach GNUWin32 aus dem PATH und es sollte funktionieren. Oder ändern Siedate
zuGet-Date
(diese Art von Fallback-Verhalten funktioniert nur, wenn kein Befehl gefunden wird - zum Überprüfen einfach verwendengcm date
). Wie auch immer, ich denke nicht, dass dieses Skript ein besonderes Problem darstellt, da GNUWin32 nicht Teil einer Windows-Standardinstallation ist.get-date
und die Fehlermeldung erhaltenMethod invocation failed because [System.Management.Automation.PSObject] doesn't contain a method named 'op_Addition'.
habe.Get-Date
sondern einSystem.DateTime
.$d=Get-Date "0400-01-01"; $d++
gibt eine Fehlermeldung darüber aus++
, dass sie bei DateTime nicht definiert wurde. Das gleiche Ersetzen++
mit+=1
oder+="1"
oder+='1'
gibt die Fehlermeldung über PSObject. Und+"1"
funktioniert einfach .Ruby 1.9, 85 Zeichen
Einfache Lösung. Rufen Sie die Funktion mit auf
f[args]
.0001-01-01
Testfall wurde behoben.quelle
def*
definiert nur eine aufgerufene Funktion*
. Auf diese Weise brauche ich kein Leerzeichen zwischendef
und dem Funktionsnamen.T-SQL
166185 ZeichenIch habe bereits mit T-SQL-Datumsfunktionen rumgespielt und mir überlegt, warum nicht ...
Die ursprüngliche Lösung war falsch ...
Folgendes muss ich tatsächlich tun, damit diese Strategie funktioniert:
quelle
C #, 176
quelle
string f(string d){...}
.ToString("dddd")
gibt das Datum in der aktuellen Ländereinstellung aus, jedoch nicht in Englisch.string f(string d){var n=DateTime.Parse(d).AddDays(1);return DateTime.IsLeapYear(n.Year)&&n.DayOfYear==60?n.DayOfWeek+"":f(n+"");}
Bash, 96 Bytes
Danke Peter ... Sehr gute Version, 96 Bytes:
Alte Version, 229 Bytes
BEISPIEL E / A
quelle
i=0;d=;until [ `date -d"$1 $i days" +%m-%d` = "02-29" ];do((i++));done
Perl, keine Datumsbibliothek:
160 159155Der eigentliche Vorteil dieser Datumsbibliotheken besteht darin, dass die Länge der Namen der Tage an andere weitergegeben wird.
Andererseits denke ich, dass dies die einzige Lösung ist, die bisher funktioniert, unabhängig vom Gebietsschema.
quelle
DATUM und etwas BASHY-Kleber (90)
Die Funktion:
Testen:
quelle
D: 175 Zeichen
Mehr leserlich:
Es ist sehr einfach, in D zu schreiben, aber es wird definitiv keinen Code-Golfwettbewerb gewinnen. Abgesehen vom Code-Golfen wäre es mir viel lieber, wenn ich es einfach schreiben und verstehen könnte, aber lange nicht knapp, aber schwer zu schreiben und zu verstehen.
quelle
Java 8 - 252 Zeichen
Golf gespielt:
Ungolfed:
quelle
Rebol - 78
Ungolfed:
Anwendungsbeispiel (in der Rebol-Konsole):
quelle
PHP, 104 Bytes
Nervenzusammenbruch
date(L)
:1
für Schaltjahr,0
sonstdate(l)
: vollständige Textdarstellung des Wochentagsquelle
GNU Coreutils, 71 Bytes
Lineare Suche der nächsten 8 Jahre (schlimmster Fall, gegeben am 29.02.2096). Sed findet und gibt die erste Zeile aus, die dem 29. Februar entspricht.
Ich war überrascht festzustellen, dass dies
t;d;:;q
kürzer war als das Testen, um festzustellen, ob die Ziffern (/[01]/d;q
) blieben , obwohl es doppelt so viele Befehle gab.Tests
Ich habe eine zusätzliche Reihe von Tests für schwierige Eckfälle hinzugefügt:
quelle