Hintergrund
Sie sind ein attraktiver Code-Golfer und einige Leute fragen Sie.
Sie haben keine Zeit darüber nachzudenken, welche Tage genau verfügbar sind. Sie entscheiden sich daher, eine Funktion zu erstellen, die ein Datum akzeptiert und die Wochentage zurückgibt.
Nehmen Sie dann diese Wochentage und fügen Sie sie in Ihr Kalenderprogramm ein, um festzustellen, ob Sie bereits von jemand anderem gefragt wurden.
Regeln
- Akzeptiert ein Datum im Format JJJJ-MM-TT
- Gibt ein Array / eine Liste der Daten dieser Woche zurück. (Sonntag ist der erste Tag)
- Die Daten können als Millisekunden zwischen dem 1. Januar 1970 und diesem Datum in einem "allgemeinen" Datumsformat 1 oder als Datumsobjekte angezeigt werden.
- Die Reihenfolge der Daten muss aufsteigend sein.
- (Obwohl Sie klug genug sind, eine absteigende Liste zu unterstützen, kann das Programm am schnellsten mit einer aufsteigenden Liste arbeiten, und wer hat ein paar Millisekunden Zeit?)
- Muss seit 1993 an jedem Tag arbeiten. (Ja, Sie sind zum Zeitpunkt des Schreibens 24 Jahre alt!)
- Jede Javascript-Antwort erhält eine hohe Fünf!
Technische Daten
Beispieleingabe: whichDates(2017-08-29)
Ausgabe: (das Äquivalent von)
console.log([
Date.parse('2017-08-27'),
Date.parse('2017-08-28'),
Date.parse('2017-08-29'),
Date.parse('2017-08-30'),
Date.parse('2017-08-31'),
Date.parse('2017-09-01'),
Date.parse('2017-09-02'),
]);
1 Ein Format, das ziemlich bekannt ist. Wie JJJJ-MM-TT.
2 Das ist Code-Golf ! Der kürzeste Code pro Sprache gewinnt, aber der kürzeste Code insgesamt erhält das Smaragd-Häkchen!
YYYY-MM-DD
(ich sehe keinen guten Grund, warum dies streng sein sollte).Date.parse(2017-08-27)
?? sollte dies seinDate.parse('2017-08-27')
?Antworten:
Japt , 15 Bytes
Probier es aus
Erläuterung
Implizite Eingabe einer Zeichenfolge
U
.In ein Datumsobjekt konvertieren
U
und neu zuweisenU
.Erstellen Sie ein Array von Ganzzahlen von
0
bis6
, die jeweils eine Funktion durchlaufen, in derX
sich das aktuelle Element befindet.Stellen Sie das Datum von ein
U
.Fügen Sie das aktuelle Datum von
U
bis hinzuX
.Subtrahieren Sie den aktuellen Wochentag von
U
.Das resultierende Array implizit ausgeben.
quelle
Perl 6 , 47 Bytes
Probieren Sie es online aus!
Der Code ist fast selbsterklärend. Zuerst
$d
erstellen wir aus der Zeichenfolge ein Date-Objekt , das zufällig das schöne ISO-Format hat. Wir können mit den Datumsangaben rechnen (Hinzufügen einer Ganzzahl = Hinzufügen so vieler Tage, das gleiche gilt für das Subtrahieren). So$d-$d.day-of-week
ist dasletzteDiese Woche (oh mein Gott, die Woche hat für mich immer mit Montag begonnen: D). (.day-of-week
ist 1 für Montag bis 7 für Sonntag.) Wir ordnen dann 0 bis 6 (^7
) zu und addieren dies zum Sonntag, wobei alle Tage in der Woche abgerufen werden. Die Nummer, über die wir eine Zuordnung vornehmen, wird anstelle des Sterns angezeigt*
. Diese Liste wird dann zurückgegeben.quelle
JavaScript (ES6),
736362 BytesIch dachte, ich würde es auch in JavaScript versuchen.
Bearbeiten: Mit dem Millisekunden-Ansatz, den die Eingabeaufforderung zulässt, habe ich ihn auf 62 Byte reduziert.
Sie können ein
.map(x=>new Date(x))
für das zurückgegebene Array ausführen, wenn Sie es konvertieren möchten.Beibehaltung des Datumsansatzes ( 72 Bytes )
In meiner ersten Einreichung war ein Fehler aufgetreten, der behoben wurde. Dank einer Beobachtung durch Milch konnte ich den Fehler beseitigen und die Anzahl der Bytes noch senken.
quelle
s=>[..."0123456"].map(i=>(x=new Date(s))-(x.getDay()-i)*8e7)
keys
den Index fallen und verwenden Sie den Index anstelle des Elements, wenn Sie das Array zuordnen . Tipp 2: Für ein so kleines Array ist es kürzer, es so zu generieren, wie ich es getan habe.MATL ,
2221 BytesDie Ausgabe erfolgt im
dd-mm-yyyy
Format.Probieren Sie es bei MATL Online aus!
Erläuterung
quelle
JavaScript (ES6), 76 Byte
Ich denke, ich habe endlich die Umgebung gefunden, die für effizientes Golfen am wenigsten förderlich ist: hinter meiner Bar, während ich mit der anderen Hand Pints serviere!
Probieren Sie es online aus (Snippet folgt)
Erläuterung
Anonyme Funktion, die den String (vom Format
yyyy-(m)m-(d)d
) als Argument über einen Parameter verwendets
.Erstellen Sie ein Array mit 7 Elementen, indem Sie es
8000000
in wissenschaftlicher Notation in eine Zeichenfolge konvertieren und diese strukturieren, die kürzer als ist[...Array(7)]
.Ordnen Sie das Array zu und übergeben Sie jedes Element durch eine Funktion, wobei
_
das aktuelle Element, das nicht verwendet wird, undx
der aktuelle Index auf 0 basieren.In
s
einDate
Objekt konvertieren und einer Variablen zuweisend
Stellen Sie das Datum von ein
d
.Holen Sie sich das aktuelle Datum von
d
.Subtrahieren Sie die aktuelle Wochentagsnummer (0-indiziert), um den Sonntag zu erhalten.
Hinzufügen
x
.quelle
Bash + Common Utilities, 53
Probieren Sie es online aus .
Dies setzt voraus, dass die Ausgabe des GNU-Datums ein "allgemeines" Datumsformat ist, z
Fri Sep 1 00:00:00 UTC 2017
.Erläuterung
quelle
Python 3,
133124126112 Bytes-9 Bytes dank Mr. Xcoder
+2 Bytes, da die Woche mit Sonntag beginnt
-14 Bytes dank Notjagan
Das lief nicht so gut, wie ich gehofft hatte.
quelle
raw_input()
anstelle voninput()
oben tun . (+4 Bytes).range
funktioniert auch in Python2 auch für diese kleine Sache. Ohne dassraw_input
Sie Fehler bekommen.Mathematica 20 Bytes?
Mathematica drückt die Liste der Tage als einzelnes Datumsobjekt aus. Wenn ein solches Datumsobjekt eine akzeptable Ausgabe ist, funktioniert die folgende reine 20-Byte-Funktion:
Beispiel
quelle
Java 8 (
161154123122102 +1936 Byte)Probieren Sie es online aus!
quelle
l
indem Sie Referenzen entfernen und durch ersetzenLocalDate.parse(e)
.i
den Schleifenkörper erhöhen, um 1 Byte zu sparen. Oh, und derjava.util.function.*
Import wird vom Lambda nicht verwendet, sodass Sie ihn nicht als Teil der Lösung zählen müssen.Python 2, 115 Bytes oder 111 Bytes, je nach Eingabeformat.
Grundsätzlich ist dies fast derselbe Code in der Antwort für Python3, die von Sobsz geschrieben wurde , aber in Python 2 funktioniert.
Wenn die Eingabe in der Form erfolgt
YYYY-MM-DD
:(Dies setzt voraus, dass die Eingabe nicht in einfache Anführungszeichen gesetzt wird, um eine Zeichenfolge als Eingabe zu kennzeichnen.)
Der Hauptunterschied besteht darin, dass wir
raw_input
stattdesseninput
das Datum in'YYYY-MM-DD'
den Apostrophen explizit angeben müssen , um es als Zeichenfolgenliteral zu identifizieren. Ohne die Eingabe des String-Literal erhalten wir einen Syntaxfehler, daher die Verwendung vonraw_input
, um DatumsangabenYYYY-MM-DD
direkt zu akzeptieren, ohne sie in String-Literale einzufügen.Dies setzt natürlich voraus, dass die Eingabe wie folgt eingegeben wird :
2017-08-29
.+4 aus Sobsz 'Antwort, dann -1, weil wir keine Klammern für die
print
Anweisung benötigen und ein Byte aus der schließenden Klammer speichern, die nicht vorhanden ist; Insgesamt +3 Byte Differenz.Probieren Sie es online aus!
Wenn die Eingabe in der Form erfolgt
'YYYY-MM-DD'
:(Beachten Sie, dass das Datum in Anführungszeichen angegeben werden muss, damit diese Antwort funktioniert.)
Wir können 4 Bytes speichern, weil wir das nicht benötigen,
raw_
und dies ist praktisch die gleiche Antwort wie Sobsz, abzüglich eines Bytes, weil wir die Klammern um denprint
Befehl nicht benötigen .Vielen Dank an Herrn Xcoder für diesen Hinweis, obwohl dies technisch gesehen ein genaues Duplikat von Sobsz 'Antwort ist, abzüglich eines Bytes .
quelle
raw_input()
Eingabe ersetzen und die Eingabe mit Anführungszeichen umgeben, um 4 Bytes zu sparen. Das macht Ihre Lösung natürlich zu einem Duplikat: P