Étant donné un nombre 1≤n≤365, sortez le nième jour de l'année au format "Day-numberth Month". Par exemple, étant donné 1, vous devez sortir "1er janvier", sans "de".
Le calendrier grégorien sera utilisé et le programme ne devrait pas prendre en compte les années bissextiles, de sorte que votre programme ne devrait jamais afficher "29 février" en aucune circonstance. N'importe quelle méthode peut être utilisée, tant qu'elle suit le format "Day-numberth Month" mentionné précédemment. Votre programme doit également sortir correctement les ordinaux, ce qui signifie qu'il doit toujours sortir les 1er, 2e, 3e, 1, 2 ou 3 respectivement, les nombres de jours pour toute entrée. Les espaces de tête ou autres indentations sont autorisés.
C'est le golf de code, donc la solution la plus courte par les personnages l'emporte.
Cas de test:
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 e Janvier) et21
(21 er Janvier) aux cas de test.123=
faisait partie de la sortie requise. Ou simplement modifier vos cas de test pour lire quelque chose comme:365
donne31st December
Réponses:
PHP ,
38403028 octetsEssayez-le en ligne!
Exécuter avec l'
php -nF
entrée provient deSTDIN
. Exemple (script ci-dessus nomméy.php
):Explication
Construisez un horodatage d'époque pour le jour souhaité en 1970 (ce n'est pas une année bissextile) en multipliant le
day number * number of seconds per day
(86400). Cependant, cela donnerait un jour de plus, alors au lieu de cela, multipliez parnumber of seconds in a day - 1
(86399) qui, pour la plage de numéros d'entrée (1≤n≤365), résultera de l'horodatage de la fin de chaque jour correct. Ensuite, utilisez simplement le formatage de date intégré de PHP pour la sortie.la source
-n
nécessaire?Gelée ,
79 7877 octets-1 correction d'un bug :) (ne doit pas pré-transposer pour trouver l'index, doit post-inverser, mais alors nous pouvons suivre plutôt que head)
-1 en utilisant la réflexion (
⁽©ṅB+30_2¦2
->⁽0ṗb4+28m0
)Un programme complet qui imprime le résultat
Essayez-le en ligne!
Comment?
mettra à jour cela plus tard ...
la source
"thstndrd"
divisée en parties de taille 2 (.•oθ2(w•2ô
), donc merci. :)C # (Visual C # compilateur interactif) ,
11511310998 octetsMerci à @someone pour avoir économisé 9 octets
Essayez-le en ligne!
la source
.code.tio(2,22): error CS0165: Use of unassigned local variable 'p'
Il semble que la chose struct ne fonctionne pas.var g=new DateTime().AddDays(n-1)
fonctionne bienPython 3.8 (version préliminaire) , 112 octets
Essayez-le en ligne!
Curieusement, je n'ai pas à mettre de parenthèses
d:=(t:=gmtime(~-x*86400)
, probablement parce que l'interpréteur vérifie uniquement s'il y a des()
caractères autour de l'expression d'affectation et non pas que l'expression elle-même est entre parenthèses.-2 merci à gwaugh .
-5 grâce à xnor .
la source
Perl 6 ,
166161 octetsEssayez-le en ligne!
Hardcode tous les noms de mois, ce qui occupe la majeure partie de l'espace. Mec, Perl 6 a vraiment besoin d'un bon formateur de date.
la source
Hack,
1155939 octetsDepuis que @gwaugh a obtenu la même solution que la mienne pendant que je jouais au golf, je poste plutôt ceci dans Hack :).
la source
mktime()
appel, sinon il retournera la mauvaise sortie s'il est exécuté sur une année bissextile. (devait faire à ma réponse).JavaScript (ES6),
117113 octets4 octets enregistrés grâce à @tsh
Essayez-le en ligne!
Commenté
Sans date intégrée, 188 octets
Essayez-le en ligne!
la source
0
fonctionnerait comme l'utilisation"en"
. Et changer pourtoLocaleString
économiser 4 octets. 110 octetstoLocaleString
le système utilise les paramètres par défaut du système lorsqu'il reçoit une chaîne non reconnue ou une valeur numérique. Donc ça peut être n'importe quoi. Ce paramètre est fondamentalement inefficace sur une instance TIO, car seuls les paramètres régionaux anglais sont installés de toute façon.Smalltalk, 126 octets
la source
11th,12th,13th
? Si je lis correctement, vous divisez le jour par 10, mais cela signifierait que cela se traduirait par11st,12nd,13rd
, à moins que quelque chose d'autre dans le code ne corrige cela alors que je ne suis pas au courant.C # (Visual C # Compiler Interactive) ,
141139133124122 octetsMerci à Arnauld pour la méthode plus rapide de suppression de 11,12,13e, économisant 4 octets
Essayez-le en ligne!
la source
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
Le compilateur interactif ne semble pas prendre en charge la modification de son niveau de langage en "aperçu" pour le moment, cependant.DataTime s
R ,
158134 octets-24 octets @Nick Kennedy pour avoir joué au golf sur le "st", le "nd", le "rd" et le "th". Merci!
Essayez-le en ligne!
la source
`if`
mieux apprendre . Merci.MySQL,
474542 octets1901 peut être remplacée par toute année qui était / n'est pas une année bissextile.
Edit: enregistré deux octets en supprimant les espaces et trois autres octets en changeant l'année à 1, grâce à @Embodyment of Ignorance .
la source
1901, n
et la chaîne?05AB1E ,
81797876757473717069 octets-9 octets grâce à @Grimy .
-1 octet grâce au tour de @ JonathanAllan
standard the
pourth,st,nd,rd
, qu'il a utilisé dans sa réponse Jelly .Essayez-le en ligne ou vérifiez tous les cas de test possibles .
Explication:
Consultez cette astuce 05AB1E pour comprendre pourquoi:
”……‚應…ä†ï€¿…Ë…ê†Ä…æ…Ì…Í”
est"December January February March April May June July August September October November"
…thŠØ
est"th standards"
•ΘÏF•
est5254545
la source
•EË7Óæ•S₂+
, mais votre golf -3 ne fonctionne malheureusement pas. L'indexation s'enroule automatiquement dans 05AB1E, donc l'5st,6nd,7rd,25st,26nd,27rd,29st
erreur sera erronée. PS: si cela avait fonctionné,<Ā
aurait pu être≠
pour un -1 supplémentaire. :)Á
).•C.ñÒā•
à•ΘÏF•º
, les chiffres supplémentaires n'ont pas d'importance)bash,
8280 octets-2 octets grâce à @ ASCII uniquement
TIO
bash + date GNU, 77 octets
la source
Coquille + coreutils,
11290 octetsEssayez-le en ligne! Le lien inclut des cas de test. Edit: 22 octets enregistrés grâce à @NahuelFouilleul. Explication:
Calculez le nombre de jours après le premier jour précédant une année non bissextile. (Malheureusement, vous ne pouvez pas faire de calculs de date relative à partir de
@-1
.)Sortie le jour du mois (sans zéro devant),
th
et le nom complet du mois.Réparer
1st
,2nd
,3rd
,21st
,22nd
,23rd
et31st
.Restaurer
11th
vers13th
.la source
s
dansdays
peut être supprimé, et19
dans1969
Gelée ,
11511410197 bytesEssayez-le en ligne!
Longtemps selon les normes Jelly, mais fait à partir des premiers principes.
Merci à @JonathanAllan pour avoir économisé 13 octets grâce à une meilleure compréhension de la compression des chaînes.
la source
“£ṢtẒ⁽ẹ½MḊxɲȧėAṅ ɓaṾ¥D¹ṀẏD8÷ṬØ»Ḳ¤
économiserait 13 (Compress.dictionary recherche un espace de tête et a une gestion spéciale pour cela).Google Sheets,
11810386 octetsJe ne peux pas modifier mon commentaire , voici une version de travail du code Google Sheets.
Essayez-le en ligne!
la source
Rouge , 124 octets
Essayez-le en ligne!
Ajoute
n
- 1 jour au 1-1-1 (1er janvier 2001) pour former une date, puis utilise la méthode d'Arnauld pour indexer les suffixes du mois. Dommage que le rouge soit indexé 1, cela nécessite des ajustements supplémentaires. La bonne chose est que Red connaît les noms des mois :)la source
APL (NARS), 235 caractères, 470 octets
13561787 est le nombre qui en base 4 peut être additionné à (12⍴28) pour obtenir la durée de chaque mois ... test:
la source
C (gcc) ,
174155octetsEssayez-le en ligne!
la source
Python 3 , 95 octets
Datetimed it: P
from datetime import *;f=lambda s:(datetime(2019,1,1)+timedelta(days=s-1)).strftime("%d of %B")
Essayez-le en ligne!
la source
of
n'est pas nécessaire non plus