05AB1E , 175 174 172 171 160 Bytes
¦WΘ1š-1šVтFY`2ô0Kθ4ÖUD2Qi\28X+ë<7%É31α}‹iY¬>0ëY1¾ǝDÅsD12‹i>1ë\1Dǝ¤>2}}ǝVY})DJIJk18+£35.£¬.•4ιõ÷‡o‹ƶ¸•2ôs`UÐ3‹12*+>13*5÷s3‹Xα©т%D4÷®т÷©4÷®·()DćsćsO7%._s€нT‰J«7ô»
Eingabe im Format [day, month, year]
. Ausgabe mit führenden 0
s für einstellige Tage und Kleinbuchstaben mo
bis su
(+1 Byte können hinzugefügt werden, wenn Titelbuchstaben erforderlich sind).
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Holy shit .. Dies könnte mein neuer Rekord für längste 05AB1E Antwort sein, und dann schließe ich einige sehr komplexe ascii-art Herausforderungen habe ich ...>>. EDIT: Hmm ok, fast ..; p
Wichtiger Hinweis: 05AB1E verfügt über keine integrierten Funktionen für Datumsobjekte oder Berechnungen. Das einzige eingebaute Datum ist das heutige Jahr / Monat / Tag / Stunde / Minute / Sekunde / Mikrosekunde.
Aus diesem Grund sind fast alle angezeigten Codes manuelle Berechnungen zur Berechnung des vorherigen und des nächsten Tages (einschließlich des Übergangs über Jahre und unter Berücksichtigung der Schaltjahre) und zur Berechnung des Wochentags unter Verwendung von Zellers Kongruenz .
Riesige Teile des Codes wurden aus meiner früheren 05AB1E-Antwort kopiert , die auch für die folgende Erklärung relevant sein wird.
Erläuterung:
Wir beginnen mit dem ersten Tag des Vormonats:
¦ # Remove the first item (the days) from the (implicit) input
W # Get the minimum (without popping the list itself)
# (since the year is guaranteed to be above 1599, this is the month)
Θ # Check if its exactly 1 (1 if 1, 0 if in the range [2,31])
1š # Prepend a 1 as list (so we now have either [1,1] or [1,0]
- # Subtract this from the month and year
1š # And prepend a 1 for the day
V # Pop and store this first day of the previous month in variable `Y`
Dann verwende ich dieses Datum als Startdatum und berechne die nächsten 100 Tage:
тF # Loop 100 times:
Y`2ô0Kθ4ÖUD2Qi\28X+ë<7%É31α}‹iY¬>0ëY1¾ǝDÅsD12‹i>1ë\1Dǝ¤>2}}ǝV
# Calculate the next day in line
# (see the linked challenge above for a detailed explanation of this)
Y # And leave it on the stack
}) # After the loop: wrap the entire stack into a list, which contains our 100 days
Dann, mit dem Eingabedatum als Mitte, lasse ich nur die 17 vor und 17 nach diesem Eingabedatum aus der Liste:
DJ # Duplicate the 100 dates, and join the day/month/year together to strings
IJ # Push the input, also joined together
k # Get the 0-based index of the input in this list
# (the joins are necessary, because indexing doesn't work for 2D lists)
18+ # Add 18 to this index (18 instead of 17, because the index is 0-based)
£ # Only leave the first index+18 items from the 100 dates
35.£ # Then only leave the last 35 items
Jetzt haben wir unsere 35 Tage. Der nächste Schritt besteht darin, den Wochentag zu berechnen und den Header der Ausgabetabelle zu erstellen:
¬ # Get the first date of the list (without popping the list itself)
.•4ιõ÷‡o‹ƶ¸• # Push compressed string "sasumotuwethfr"
2ô # Split it into chunks of size 2
s # Swap to get the first date again
`UÐ3‹12*+>13*5÷s3‹Xα©т%D4÷®т÷©4÷®·()DćsćsO7%
# Calculate the day of the week (sa=0; su=1; ...; fr=6)
# (see the linked challenge above for a detailed explanation of this)
._ # Rotate the list of strings that many times
Sehen Sie diese 05AB1E Spitze Mine (Abschnitt Wie Kompresse Strings nicht Teil des Wörterbuchs? ) Zu verstehen , warum .•4ιõ÷‡o‹ƶ¸•
ist "sasumotuwethfr"
.
Dann erstellen wir die Tage, um die Tabelle selbst auf der Grundlage unserer zuvor erstellten Datumsliste zu füllen. Welches wir zusammen mit dem Header zusammenführen. Danach können wir das Endergebnis ausdrucken:
s # Swap to get the list of dates again
€н # Only leave the first item of each date (the days)
T‰ # Take the divmod 10 of each
J # Join those divmod results together
# (we now have leading 0s for single-digit days)
« # Merge this list together with the header list
7ô # Split it into chunks of size 7
» # Join each inner list by spaces, and then each string by newlines
# (and output the result implicitly)
JavaScript (ES6),
141126 Byte15 Bytes durch Ausleihen
.toUTCString().slice(0,2)
aus Neils Antwort gespeichertÜbernimmt die Eingabe als Datumsobjekt.
Probieren Sie es online!
quelle
JavaScript (Node.js) ,
205152145 ByteProbieren Sie es online! Übernimmt Eingaben als JavaScript-Datumsobjekt oder Zeitstempel. Bearbeiten: 1 Byte dank @EmbodimentofIgnorance gespeichert, wodurch ich weitere 7 Byte speichern konnte, indem ich der Ausgabe eine abschließende neue Zeile hinzufügte. 52 Bytes gespart, als ich feststellte, dass ich an Verhalten gearbeitet habe, das eigentlich nicht fehlerhaft war ...
quelle
padStart(2)
->padStart(3)
entferne das Leerzeichen in der Verknüpfungszeichenfolge für -1 BytePerl 6 , 87 Bytes
Probieren Sie es online!
Nimmt ein
Date
Objekt und gibt eine Liste von Zeilen zurück.quelle
C # (Visual C # Interactive Compiler) ,
124120 ByteProbieren Sie es online!
quelle
Wolfram Language (Mathematica) , 123 Byte
Probieren Sie es online!
Ich weiß nicht, warum
Grid
TIO nicht funktioniert, aber dieser Code gibt dies aus@DavidC hat 1 Byte gespeichert
quelle
Grid
nicht, weil TIO die Elemente nicht wie auf Ihrem Bild zentrieren kann?MATL ,
343331 BytesProbieren Sie es online!
Erläuterung
quelle
Java (JDK) , 149 Byte
Probieren Sie es online!
Credits
quelle
i
undj
irgendwie zu kombinieren ? Oder etwas kürzeres fürj++%7<1?10:32
etwas bitweise Magie? Aber das überlasse ich dir. Ich gehe zurück zur Arbeit, lol. ;)w
denn? Warum nichth
für Header?w
für "Tag der w eek". Auch Bit Twiddling kann nur dazu führen,(i%7+6)/7*22+10
dass viel länger ist.PHP ,
197189187 BytesProbieren Sie es online!
Die Eingabe erfolgt
STDIN
als Datumszeichenfolge. Laufen Sie mitphp -nF
.Überprüfen Sie alle Testfälle
Oder 174 Bytes mit null aufgefüllten einzelnen Ziffern.
quelle
Excel VBA,
190159 BytesVielen Dank an TaylorScott
Übernimmt die Eingabe in Form einer gültigen Datumszeichenfolge für Excel VBA (z. B. 19. Februar 2020; 19. Februar 2020; 19. Februar 2019) und gibt ein Array mit dem angegebenen Kalender in der Mitte zurück.
quelle
Function z(i)
Dim d(5,6)
v=DateValue(i)-17
For x=1To 5
For y=0To 6
d(0,y)=Left(WeekdayName(Weekday(v+y)),2)
d(x,y)=Day(v+y+(x-1)*7)
Next y,x
z=d()
End Function
Rot ,
153131 BytesProbieren Sie es online!
quelle
T-SQL, 203 Bytes
Die Online-Version ist etwas anders, diese veröffentlichte Version funktioniert in MS-SQL Studio Management. Es spart 1 Byte im Vergleich zur Online-Version, gibt aber online nicht das richtige Ergebnis
Probieren Sie es online aus
quelle
Python 2 , 115 Bytes
Probieren Sie es online!
Ich bin mir nicht sicher, ob dies zulässig ist. Übernimmt Eingaben von STDIN im Formular
date(year, month, day)
. Dies kann auch als dargestellt werden__import__('datetime').date(year, month, day)
. Das sind wirklich__import__('datetime').date
Gegenstände.quelle