Bei einer Zahl von 1 ≤ n ≤ 365 wird der n-te Tag des Jahres im Format "Tag-Anzahl-Monat" ausgegeben. Beispiel: Bei 1 sollten Sie "1. Januar" ohne "von" ausgeben.
Der gregorianische Kalender wird verwendet und das Programm sollte keine Schaltjahre berücksichtigen, daher sollte Ihr Programm unter keinen Umständen "29. Februar" ausgeben. Es kann eine beliebige Methode verwendet werden, sofern sie dem zuvor genannten Format "Tag-Anzahl-Monat" folgt. Ihr Programm sollte auch Ordnungszahlen korrekt ausgeben, dh es sollte immer 1., 2., 3., 1., 2. oder 3. Tag für jede Eingabe sein. Führende Leerzeichen oder andere Einrückungen sind zulässig.
Dies ist Codegolf, daher gewinnt die kürzeste Lösung nach Zeichen.
Testfälle:
1 gives 1st January
2 gives 2nd January
3 gives 3rd January
365 gives 31st December
60 gives 1st March
11 gives 11th January
11
(11 th Januar) und21
(21 st Januar) zu den Testfällen.123=
sei Teil der erforderlichen Ausgabe. Oder bearbeiten Sie einfach Ihre Testfälle und lesen Sie so etwas wie:365
gives31st December
Antworten:
PHP ,
38403028 BytesProbieren Sie es online!
Run with
php -nF
input ist vonSTDIN
. Beispiel (oben genanntes Skripty.php
):Erläuterung
Erstellen Sie einen Epochen-Zeitstempel für den gewünschten Tag im Jahr 1970 (günstigerweise kein Schaltjahr), indem Sie die
day number * number of seconds per day
Zahl (86400) multiplizieren . Dies würde jedoch einen Tag höhernumber of seconds in a day - 1
ausfallen. Multiplizieren Sie dies stattdessen mit (86399). Dies ergibt für den Bereich der eingegebenen Zahlen (1 ≤ n ≤ 365) den Zeitstempel des Endes jedes richtigen Tages. Verwenden Sie dann einfach die in PHP integrierte Datumsformatierung für die Ausgabe.quelle
-n
notwendig?Jelly ,
79 7877 Bytes-1 Behebung eines Fehlers :) (sollte nicht vor der Transponierung liegen, um den Index zu finden, sollte nachträglich rückgängig gemacht werden, aber dann können wir eher den Schwanz als den Kopf ziehen)
-1 mit Reflektion (
⁽©ṅB+30_2¦2
->⁽0ṗb4+28m0
)Ein vollständiges Programm, das das Ergebnis druckt
Probieren Sie es online!
Wie?
werde dies später aktualisieren ...
quelle
"thstndrd"
in Teile der Größe 2 (.•oθ2(w•2ô
) aufgeteilt wurde. :)C # (Visual C # Interactive Compiler) ,
11511310998 ByteVielen Dank an @someone für das Speichern von 9 Bytes
Probieren Sie es online!
quelle
.code.tio(2,22): error CS0165: Use of unassigned local variable 'p'
Es scheint, dass das struct Ding nicht funktioniert.var g=new DateTime().AddDays(n-1)
funktioniert aberPython 3.8 (Vorabversion) , 112 Byte
Probieren Sie es online!
Komischerweise muss ich keine Klammern setzen
d:=(t:=gmtime(~-x*86400)
, wahrscheinlich, weil der Interpreter nur prüft, ob()
der Zuweisungsausdruck Zeichen enthält und nicht, ob der Ausdruck selbst in Klammern steht.-2 danke an gwaugh .
-5 danke an xnor .
quelle
Perl 6 ,
166161 BytesProbieren Sie es online!
Hardcodes aller Monatsnamen, die den größten Teil des Platzes einnehmen. Mann, Perl 6 braucht wirklich einen richtigen Datumsformatierer.
quelle
Hack,
1155939 BytesDa @gwaugh während des Golfspiels die gleiche Lösung wie ich hatte, poste ich dies stattdessen in Hack :).
quelle
mktime()
Aufruf angeben , da er andernfalls die falsche Ausgabe zurückgibt, wenn er in einem Schaltjahr ausgeführt wird. (musste auf meine antwort antworten).JavaScript (ES6),
117113 Byte4 Bytes dank @tsh gespeichert
Probieren Sie es online!
Kommentiert
Ohne Datumseinbauten 188 Bytes
Probieren Sie es online!
quelle
0
würde using funktionieren"en"
. Und das Ändern auftoLocaleString
würde 4 Bytes sparen. 110 BytestoLocaleString
die Standardeinstellungen des Systems verwendet werden, wenn eine nicht erkannte Zeichenfolge oder ein numerischer Wert übergeben wird. Es kann also alles sein. Dieser Parameter ist auf einer TIO-Instanz grundsätzlich wirkungslos, da ohnehin nur englische Ländereinstellungen installiert sind .Smalltalk, 126 Bytes
quelle
11th,12th,13th
? Wenn ich richtig lese, dividieren Sie den Tag durch 10, aber das würde bedeuten, dass dies dazu führen würde11st,12nd,13rd
, es sei denn, etwas anderes im Code behebt dies, obwohl ich es nicht weiß.C # (Visual C # Interactive Compiler) ,
141139133124122 ByteVielen Dank an Arnauld für die schnellere Methode zum Entfernen von 11,12,13
Probieren Sie es online!
quelle
a=>{var d=s.AddDays(a-1);int x=d.Day,m=x%30%20;return x+"thstndrd"[(m<4?m*2:0)..2]+$" {d:MMMM}";};DateTime s
Der interaktive Compiler scheint es derzeit nicht zu unterstützen, sein Sprachniveau in "Vorschau" zu ändern.DataTime s
R ,
158134 Bytes-24 Bytes @Nick Kennedy für das Golfen der "st", "nd", "rd" und "th". Vielen Dank!
Probieren Sie es online!
quelle
`if`
besser lernen . Vielen Dank.MySQL,
474542 Bytes1901 kann durch jedes Jahr ersetzt werden, das kein Schaltjahr war / ist.
Bearbeiten: Dank @Embodyment of Ignorance wurden zwei Bytes durch Entfernen von Leerzeichen und weitere drei Bytes durch Ändern des Jahres auf 1 gespeichert .
quelle
1901, n
und der Zeichenfolge entfernen ?05AB1E ,
81797876757473717069 Byte-9 Bytes dank @Grimy .
-1 Byte dank @ JonathanAllans
standard the
Trick fürth,st,nd,rd
den er in seiner Jelly-Antwort verwendet hat .Probieren Sie es online aus oder überprüfen Sie alle möglichen Testfälle .
Erläuterung:
Sehen Sie sich meinen Tipp 05AB1E an, um zu verstehen, warum:
”……‚應…ä†ï€¿…Ë…ê†Ä…æ…Ì…Í”
ist"December January February March April May June July August September October November"
…thŠØ
ist"th standards"
•ΘÏF•
ist5254545
quelle
•EË7Óæ•S₂+
, aber dein -3 Golf funktioniert leider nicht. Die Indizierung läuft in 05AB1E automatisch um, sodass das5st,6nd,7rd,25st,26nd,27rd,29st
falsch ist. PS: Wenn es geklappt hätte,<Ā
hätte es≠
für eine zusätzliche -1 sein können. :)Á
).•C.ñÒā•
bis•ΘÏF•º
, die zusätzlichen Ziffern spielen keine Rolle)Bash,
82 bis80 Bytes-2 Bytes dank nur @ ASCII
TIO
Bash + GNU-Datum, 77 Bytes
quelle
Shell + Coreutils,
11290 BytesProbieren Sie es online! Link enthält Testfälle. Bearbeiten: 22 Bytes dank @NahuelFouilleul gespeichert. Erläuterung:
Berechnen Sie die Anzahl der Tage nach dem ersten Tag, der einem Jahr ohne Schaltjahr vorausgeht. (Leider können Sie keine relativen Datumsberechnungen von ausführen
@-1
.)Geben Sie den Tag des Monats (ohne führende Null)
th
und den vollständigen Monatsnamen aus.Fix up
1st
,2nd
,3rd
,21st
,22nd
,23rd
und31st
.Wiederherstellen
11th
auf13th
.quelle
s
indays
entfernt werden und19
in1969
Jelly ,
11511410197 BytesProbieren Sie es online!
Nach Jelly-Maßstäben lang, aber nach den ersten Grundsätzen.
Vielen Dank an @JonathanAllan für die Einsparung von 13 Bytes durch ein besseres Verständnis der String-Komprimierung.
quelle
“£ṢtẒ⁽ẹ½MḊxɲȧėAṅ ɓaṾ¥D¹ṀẏD8÷ṬØ»Ḳ¤
würde 13 sparen (Compress.dictionary sucht nach einem führenden Platz und hat eine spezielle Behandlung dafür).Google Sheets,
11810386 BytesIch kann meinen Kommentar nicht bearbeiten . Hier ist eine funktionsfähige Version des Google Sheets-Codes.
Probieren Sie es online!
quelle
Rot , 124 Bytes
Probieren Sie es online!
Fügt
n
- 1 Tage zu 1-1-1 (1. Januar 2001) hinzu, um ein Datum zu bilden, und verwendet dann die Arnauld-Methode, um Monatssuffixe zu indizieren. Schade, dass Red 1-indiziert ist. Dies erfordert zusätzliche Optimierungen. Das Gute ist, dass Red die Namen der Monate kennt :)quelle
APL (NARS), 235 Zeichen, 470 Byte
13561787 ist die Zahl, die in Basis 4 zu (12⍴28) summiert werden kann, um die Länge eines jeden Monats zu erhalten ... Test:
quelle
C (gcc) ,
174.155BytesProbieren Sie es online!
quelle
Python 3 , 95 Bytes
Datetimed es: P
from datetime import *;f=lambda s:(datetime(2019,1,1)+timedelta(days=s-1)).strftime("%d of %B")
Probieren Sie es online!
quelle
of
ist auch unnötig