Es ist eine jährliche Aufgabe, okay

22

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
Andrew
quelle
4
Müssen Sie außerdem eine Fehlermeldung für Nummern> 365 erzwingen? Kann das Programm einfach davon ausgehen, dass die Eingabe ungültig ist, und muss es nicht damit umgehen?
13.
5
Da nicht jeder ein englischer Muttersprachler ist, können Sie die Tagesnummern 11, 12 und 13 als "th" hinzufügen, die mit "1" als "st", "2" als "nd", "3" enden. Holen Sie sich "rd", und alle anderen bekommen "th".
Adám
9
Whoa, akzeptiere Antworten nicht so schnell. Vor allem keine falschen Antworten!
Adám
6
Sie sollten mindestens hinzufügen 11(11 th Januar) und 21(21 st Januar) zu den Testfällen.
Arnauld
1
Und während Sie Testfälle bearbeiten, geben Sie möglicherweise das genaue Format Ihres Testfalls an. Einige Antwortende haben gedacht, dies 123=sei Teil der erforderlichen Ausgabe. Oder bearbeiten Sie einfach Ihre Testfälle und lesen Sie so etwas wie: 365gives31st December
Adám

Antworten:

9

PHP ,38 40 30 28 Bytes

<?=date("jS F",86399*$argn);

Probieren Sie es online!

Run with php -nFinput ist von STDIN. Beispiel (oben genanntes Skript y.php):

$ echo 1|php -nF y.php
1st January
$ echo 2| php -nF y.php
2nd January
$ echo 3| php -nF y.php
3rd January
$ echo 11|php -nF y.php
11th January
$ echo 21|php -nF y.php
21st January
$ echo 60|php -nF y.php
1st March
$ echo 365|php -nF y.php
31st December

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 dayZahl (86400) multiplizieren . Dies würde jedoch einen Tag höher number of seconds in a day - 1ausfallen. 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.

640 KB
quelle
Warum ist das -nnotwendig?
Ven
@Ven ist dies möglicherweise nicht in allen Fällen der Fall, deaktiviert jedoch alle Einstellungen in der lokalen php.ini, die zu inkonsistentem Verhalten führen können.
640 KB,
6

Jelly ,  79 78  77 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)

⁽0ṗb4+28m0SRṁRƲœiµṪȮ%30%20«4ị“nḄƲf⁷»s3¤Ṗ,ị“£ṢtẒ⁽ẹ½MḊxɲȧėAṅ ɓaṾ¥D¹ṀẏD8÷ṬØ»Ḳ¤$K

Ein vollständiges Programm, das das Ergebnis druckt

Probieren Sie es online!

Wie?

werde dies später aktualisieren ...

⁽©ṅB+30_2¦2SRṁRƲZœiµḢȮ%30%20«4ị“nḄƲf⁷»s3¤Ṗ,ị“...»Ḳ¤$K - Main Link: integer, n
⁽©ṅB+30_2¦2SRṁRƲZœi - f(n) to get list of integers, [day, month]
⁽©ṅ                 - compressed literal 2741
   B                - to a list of binary digits -> [ 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1]
    +30             - add thirty                    [31,30,31,30,31,30,31,31,30,31,30,31]
         ¦          - sparse application...
        2           - ...to indices: [2]
       _  2         - ...action: subtract two       [31,28,31,30,31,30,31,31,30,31,30,31]
               Ʋ    - last four links as a monad - i.e. f(x):
           S        -   sum x                       365
            R       -   range                       [1..365]
              R     -   range x (vectorises)        [[1..31],[1..28],...]
             ṁ      -   mould like                  [[1..31],[32..59],...]
                Z   - transpose                     [[1,32,...],[2,33,...],...]
                 œi - 1st multi-dimensional index of n  -> [day, month]

µḢȮ%30%20«4ị“nḄƲf⁷»s3¤Ṗ,ị“...»Ḳ¤$K - given [day, month] format and print
µ                                  - start a new monadic chain - i.e. f(x=[day, month])
 Ḣ                                 - head -- get the day leaving x as [month])
  Ȯ                                - print it (with no newline) and yield it
   %30                             - modulo by thirty
      %20                          - modulo by twenty
         «4                        - minimum of that and four
                     ¤             - nilad followed by link(s) as a nilad:
            “nḄƲf⁷»                -   dictionary words "standard"+" the" = "standard the"
                   s3              -   split into threes = ["sta","nda","rd ","the"]
           ị                       - index into
                      Ṗ            - remove rightmost character
                               ¤   - nilad followed by link(s) as a nilad:
                         “...»     -   dictionary words "January"+" February"+...
                              Ḳ    -   split at spaces = ["January","February",...]
                        ị          - index into (vectorises across [month])
                       ,           - pair                  e.g. ["th", ["February"]]
                                K  - join with spaces           ["th ", "February"]
                                   - print (implicitly smashes)   th February
Jonathan Allan
quelle
4
Der "Standard der" Trick ist erstaunlich.
Ven
Ich bin mit @Ven einverstanden , toller Trick! Es hat auch ein Byte in meiner 05AB1E-Antwort im Vergleich zu der komprimierten Zeichenfolge gespeichert , die "thstndrd"in Teile der Größe 2 ( .•oθ2(w•2ô) aufgeteilt wurde. :)
Kevin Cruijssen
1
Dies muss eines der längsten Jelly-Programme sein, die ich je gesehen habe.
JAD
6

C # (Visual C # Interactive Compiler) , 115 113 109 98 Byte

g=>$"{f=(g=p.AddDays(g-1)).Day}{"tsnr"[f=f%30%20<4?f%10:0]}{"htdd"[f]} {g:MMMM}";DateTime p;int f;

Vielen Dank an @someone für das Speichern von 9 Bytes

Probieren Sie es online!

Verkörperung der Ignoranz
quelle
1
@KevinCruijssen Ich habe die Module außer Betrieb gesetzt, sollte jetzt behoben sein.
Verkörperung der Ignoranz
.code.tio(2,22): error CS0165: Use of unassigned local variable 'p'Es scheint, dass das struct Ding nicht funktioniert.
JAD
var g=new DateTime().AddDays(n-1)funktioniert aber
JAD
@ JAD Fehler meinerseits behoben
Verkörperung der Ignoranz
110 Bytes, denke ich
mein Pronomen ist monicareinstate
5

Python 3.8 (Vorabversion) , 112 Byte

lambda x:str(d:=(t:=gmtime(x*86399)).tm_mday)+'tsnrhtdd'[d%5*(d%30%20<4)::4]+strftime(' %B',t)
from time import*

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 .

Erik der Outgolfer
quelle
5

Perl 6 , 166 161 Bytes

{~(.day~(<th st nd rd>[.day%30%20]||'th'),<January February March April May June July August September October November December>[.month-1])}o*+Date.new(1,1,1)-1

Probieren Sie es online!

Hardcodes aller Monatsnamen, die den größten Teil des Platzes einnehmen. Mann, Perl 6 braucht wirklich einen richtigen Datumsformatierer.

Scherzen
quelle
4

Hack, 115 59 39 Bytes

$x==>date("jS F",mktime(0,0,0,1,$x));

Da @gwaugh während des Golfspiels die gleiche Lösung wie ich hatte, poste ich dies stattdessen in Hack :).

Ven
quelle
Wow, große Köpfe denken gleich. :) +1 an Sie, Sir!
640 KB,
@gwaugh haha, ich wusste nicht, dass ich nur ein Top-Level-Programm haben könnte. Ich werde mein bearbeiten , um es zu der obersten Ebene zu machen und einen Weg finden , eine bessere SCOR e ;-) zu bekommen
Ven
1
@gwaugh Machte stattdessen meinen Hack.
Ven
1
Möglicherweise möchten Sie einen Nicht-Schaltjahr-Parameter für Ihren mktime()Aufruf angeben , da er andernfalls die falsche Ausgabe zurückgibt, wenn er in einem Schaltjahr ausgeführt wird. (musste auf meine antwort antworten).
640 KB,
4

JavaScript (ES6),  117  113 Byte

4 Bytes dank @tsh gespeichert

d=>(n=(d=new Date(1,0,d)).getDate())+([,'st','nd','rd'][n%30%20]||'th')+' '+d.toLocaleString('en',{month:'long'})

Probieren Sie es online!

Kommentiert

d =>                     // d = input day
  ( n =                  //
    ( d =                // convert d to
      new Date(1, 0, d)  //   a Date object for the non leap year 1901
    ).getDate()          // save the corresponding day of month into n
  ) + (                  //
    [, 'st', 'nd', 'rd'] // ordinal suffixes
    [n % 30 % 20]        // map { 1, 2, 3, 21, 22, 23, 31 } to { 'st', 'nd', 'rd' }
    || 'th'              // or use 'th' for everything else
  ) + ' ' +              // append a space
  d.toLocaleString(      // convert d to ...
    'en',                // ... the English ...
    { month: 'long' }    // ... month name
  )                      //

Ohne Datumseinbauten 188 Bytes

f=(d,m=0)=>d>(k=31-(1115212>>m*2&3))?f(d-k,m+1):d+([,'st','nd','rd'][d%30%20]||'th')+' '+`JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember`.match(/.[a-z]*/g)[m]

Probieren Sie es online!

Arnauld
quelle
Scheitert am 11., 12. und 13. eines jeden Monats
Daten
1
@ExpiredData Vielen Dank für den Hinweis. Jetzt behoben.
Arnauld
Ignoriere meinen Kommentar, ich habe einen ID10T Fehler gemacht.
Asgallant
Ich bin nicht sicher, wie nodejs mit Sprach-Tags umgehen, aber es scheint, als 0würde using funktionieren "en". Und das Ändern auf toLocaleStringwürde 4 Bytes sparen. 110 Bytes
tsh
@tsh Es scheint, dass toLocaleStringdie 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 .
Arnauld
4

Smalltalk, 126 Bytes

d:=Date year:1day:n.k:=m:=d dayOfMonth.10<k&(k<14)and:[k:=0].o:={#st.#nd.#rd}at:k\\10ifAbsent:#th.m asString,o,' ',d monthName
Leandro Caniglia
quelle
1
Ich kenne Smalltalk nicht, aber ist das richtig 11th,12th,13th? Wenn ich richtig lese, dividieren Sie den Tag durch 10, aber das würde bedeuten, dass dies dazu führen würde 11st,12nd,13rd, es sei denn, etwas anderes im Code behebt dies, obwohl ich es nicht weiß.
Kevin Cruijssen
@ KevinCruijssen Sie haben Recht. Vielen Dank, dass Sie mich darauf aufmerksam gemacht haben. Ich muss noch ein paar Bytes mehr ausgeben, um das zu beheben.
Leandro Caniglia
1
@ KevinCruijssen, Fertig. Danke noch einmal.
Leandro Caniglia
3

C # (Visual C # Interactive Compiler) , 141 139 133 124 122 Byte

a=>{var d=s.AddDays(a-1);int x=d.Day,m=x%30%20;return x+"thstndrd".Substring(m<4?m*2:0,2)+d.ToString(" MMMM");};DateTime s

Vielen Dank an Arnauld für die schnellere Methode zum Entfernen von 11,12,13

Probieren Sie es online!

Abgelaufene Daten
quelle
Unter Verwendung von C # 8 kann dies auf Folgendes reduziert werden: 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.
Arcanox
116 Bytes
Verkörperung der Ignoranz
Ich bin ziemlich sicher , dass Sie ein Semikolon nach dem hinzufügen müssenDataTime s
Verkörperung der Ignoranz
3

R , 158 134 Bytes

-24 Bytes @Nick Kennedy für das Golfen der "st", "nd", "rd" und "th". Vielen Dank!

f=format;paste0(a<-as.double(f(d<-as.Date(scan(,''),'%j'),'%e')),`if`((a-1)%%10>2|a%/%10==1,'th',c("st","nd","rd")[a%%10]),f(d,' %B'))

Probieren Sie es online!

CT Hall
quelle
1
Wie wäre es mit tio.run/##HYxBCsIwEEWvIoEwMzDVRldi40K8hQgdmwQV20oSd949xm4e/… für 134 Bytes
Nick Kennedy
Ja, ich muss `if`besser lernen . Vielen Dank.
CT Hall
3

MySQL, 47 45 42 Bytes

SELECT DATE_FORMAT(MAKEDATE(1,n),"%D %M")

1901 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 .

NicolasB
quelle
Können Sie die Leerzeichen zwischen 1901, nund der Zeichenfolge entfernen ?
Verkörperung der Ignoranz
@EmbodimentofIgnorance ja ich kann, danke!
NicolasB
Warum also nicht 1901 durch ein Jahr wie 1 ersetzen? 1 ist kein Schaltjahr und 3 Bytes kürzer
Verkörperung der Ignoranz
@EmbodimentofIgnorance getan und getan :-)
NicolasB
3

05AB1E , 81 79 78 76 75 74 73 71 70 69 Byte

•ΘÏF•ºS₂+.¥-D0›©ÏθDT‰ć≠*4šß„—ÊØ3ôsè¨ð”……‚應…ä†ï€¿…Ë…ê†Ä…æ…Ì…Í”#®OèJ

-9 Bytes dank @Grimy .
-1 Byte dank @ JonathanAllans standard theTrick für th,st,nd,rdden er in seiner Jelly-Antwort verwendet hat .

Probieren Sie es online aus oder überprüfen Sie alle möglichen Testfälle .

Erläuterung:

•ΘÏF        # Push compressed integer 5254545
     º       # Mirror it vertically: 52545455454525
      S      # Converted to a list of digits: [5,2,5,4,5,4,5,5,4,5,4,5,2,5]
       ₂+    # And 26 to each: [31,28,31,30,31,30,31,31,30,31,30,31,28,31]
             # (the additional trailing 28,31 won't cause any issues)
           # Undelta this list (with automatic leading 0):
             #  [0,31,59,90,120,151,181,212,243,273,304,334,365,393,424]
  -          # Subtract each from the (implicit) input-integer
   D0       # Duplicate the list, and check for each if it's positive (> 0)
      ©      # Store the resulting list in the register (without popping)
       Ï     # Only leave the values at those truthy indices
        θ    # And get the last value from the list, which is our day
D            # Duplicate this day
 T          # Take the divmod-10 of this day: [day//10, day%10]
   ć         # Extract the head; pop and push the remainder-list and head: [day%10], day//10
            # Check whether the day//10 is NOT 1 (0 if day//10 == 1; 1 otherwise)
     *       # Multiply that by the [day%10] value
      4š     # Prepend a 4 to this list
        ß    # Pop and push the minimum of the two (so the result is one of [0,1,2,3,4],
             # where the values are mapped like this: 1..3→1..3; 4..9→4; 10..19→0; 20..23→0..3; 24..29→4; 30,31→0,1)
 thŠØ       # Push dictionary string "th standards"
      3ô     # Split it into parts of size 3: ["th ","sta","nda","rds"]
        sè   # Swap and index the integer into this list (4 wraps around to index 0)
          ¨  # And remove the trailing character from this string
ð            # Push a space " "
”……‚應…ä†ï€¿…Ë…ê†Ä…æ…Ì…Í”
             # Push dictionary string "December January February March April May June July August September October November"
 #           # Split on spaces
  ®          # Push the list of truthy/falsey values from the register again
   O         # Get the amount of truthy values by taking the sum
    è        # Use that to index into the string-list of months (12 wraps around to index 0)
J            # Join everything on the stack together to a single string
             # (and output the result implicitly)

Sehen Sie sich meinen Tipp 05AB1E an, um zu verstehen, warum:

  • (Abschnitt Wie benutzt man das Wörterbuch? ) ”……‚應…ä†ï€¿…Ë…ê†Ä…æ…Ì…Í”ist"December January February March April May June July August September October November"
  • (Abschnitt Wie benutzt man das Wörterbuch? ) …thŠØist"th standards"
  • (Abschnitt Wie werden große ganze Zahlen komprimiert? ) •ΘÏF•ist5254545
Kevin Cruijssen
quelle
1
-2 Bytes mit 5 × 28 + für die Komprimierung: TIO
Grimmy
1
Die Verwendung von S ist eine gute Idee, wieder -1 Byte: TIO
Grimmy
1
@Grimy Danke für das -1 Byte •EË7Óæ•S₂+, aber dein -3 Golf funktioniert leider nicht. Die Indizierung läuft in 05AB1E automatisch um, sodass das 5st,6nd,7rd,25st,26nd,27rd,29stfalsch ist. PS: Wenn es geklappt hätte, hätte es für eine zusätzliche -1 sein können. :)
Kevin Cruijssen
1
Wieder -1 (bei Verwendung von "th standards" anstelle von "standard the" entfällt die Notwendigkeit für Á).
Grimmy
1
-1 ( •C.ñÒā•bis •ΘÏF•º, die zusätzlichen Ziffern spielen keine Rolle)
Grimmy
2

Bash, 82 bis 80 Bytes

-2 Bytes dank nur @ ASCII

a=(th st nd rd);set `printf "%(%e %B)T" $[$1*86399]`;echo $1${a[$1%30%20]-th} $2

TIO

Bash + GNU-Datum, 77 Bytes

a=(th st nd rd);set `date -d@$[$1*86399] +%e\ %B`;echo $1${a[$1%30%20]-th} $2
Nahuel Fouilleul
quelle
80?
Nur ASCII
@ Nur ASCII, ja 100s pro Tag abziehen, 100 * 365 = 36500s, was weniger als ein Tag ist (86400), funktioniert auch mit 86399 (1s pro Tag abziehen)
Nahuel Fouilleul
: / sieht immer noch sehr lang aus, hat aber noch keinen besseren Weg gefunden
ASCII
2

Shell + Coreutils, 112 90 Bytes

date -d0-12-31\ $1day +%-dth\ %B|sed 's/1th/1st/;s/2th/2nd/;s/3th/3rd/;s/\(1.\).. /\1th /'

Probieren Sie es online! Link enthält Testfälle. Bearbeiten: 22 Bytes dank @NahuelFouilleul gespeichert. Erläuterung:

date -d0-12-31\ $1day

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.)

+%-dth\ %B|sed

Geben Sie den Tag des Monats (ohne führende Null) thund den vollständigen Monatsnamen aus.

's/1th/1st/;s/2th/2nd/;s/3th/3rd/;

Fix up 1st, 2nd, 3rd, 21st, 22nd, 23rdund 31st.

s/\(1.\).. /\1th /'

Wiederherstellen 11thauf 13th.

Neil
quelle
ich habe diese antwort nach meiner gesehen, konnte mit einem sed befehl 18 bytes einsparen , kann auch sin daysentfernt werden und 19in1969
Nahuel Fouilleul
@NahuelFouilleul Dieser letzte benutzt einen Bash-ismus, sollte also als separate Antwort gepostet werden, aber danke für die anderen Tipps!
Neil
2

Jelly , 115 114 101 97 Bytes

%30%20¹0<?4Ḥ+ؽị“thstndrd”ṭ
“5<Ḟ’b4+28ÄŻ_@µ>0T,>0$ƇZṪµ1ịị“£ṢtẒ⁽ẹ½MḊxɲȧėAṅ ɓaṾ¥D¹ṀẏD8÷ṬØ»Ḳ¤,2ịÇƊṚK

Probieren 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.

Nick Kennedy
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).
Jonathan Allan
2

Google Sheets, 118 103 86 Bytes

=day(A1+1)&mid("stndrdth",min(7,1+2*mod(mod(day(A1+1)-1,30),20)),2)&text(A1+1," mmmm")

Ich kann meinen Kommentar nicht bearbeiten . Hier ist eine funktionsfähige Version des Google Sheets-Codes.

Probieren Sie es online!

Zylviij
quelle
1

Rot , 124 Bytes

func[n][d: 1-1-1 + n - 1[rejoin[d/4 either 5 > t: d/4 % 30 % 20[pick[th st nd rd]t + 1]['th]]pick system/locale/months d/3]]

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 :)

Galen Ivanov
quelle
1

APL (NARS), 235 Zeichen, 470 Byte

{k←↑⍸0<w←+\v←(1-⍵),(12⍴28)+13561787⊤⍨12⍴4⋄k<2:¯1⋄d←1+v[k]-w[k]⋄(⍕d),({d∊11..13:'th'⋄1=10∣d:'st'⋄2=10∣d:'nd'⋄3=10∣d:'rd'⋄'th'}),' ',(k-1)⊃(m≠' ')⊂m←'January February March April May June July August September October November December'}

13561787 ist die Zahl, die in Basis 4 zu (12⍴28) summiert werden kann, um die Länge eines jeden Monats zu erhalten ... Test:

  f←{k←↑⍸0<w←+\v←(1-⍵),(12⍴28)+13561787⊤⍨12⍴4⋄k<2:¯1⋄d←1+v[k]-w[k]⋄(⍕d),({d∊11..13:'th'⋄1=10∣d:'st'⋄2=10∣d:'nd'⋄3=10∣d:'rd'⋄'th'}),' ',(k-1)⊃(m≠' ')⊂m←'January February March April May June July August September October November December'}     
  ⊃f¨1 2 3 365 60 11
1st January  
2nd January  
3rd January  
31st December
1st March    
11th January 
RosLuP
quelle
0

C (gcc) , 174.155 Bytes

i;char a[99],*b="thstndrd";f(long x){x--;x*=86400;strftime(a,98,"%d   %B\0",gmtime(&x));i=*a==49?0:a[1]-48;a[2]=b[i=i>3?0:i*2];a[3]=b[++i];x=*a==48?a+1:a;}

Probieren Sie es online!

GPS
quelle
-2

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!

Kerosen
quelle
2
Dies erzeugt keine Ordnungssuffixe und hat führende Nullen in der Tageszahl. Das ofist auch unnötig
Jo King