Étant donné une représentation textuelle (nom complet insensible à la casse ou abréviation à 3 caractères) d'un mois, renvoyer le nombre de jours du mois.
Par exemple, december
, DEC
et dec
devraient tous revenir 31.
Février peut avoir 28 ou 29 jours.
Supposons que l'entrée est un mois sous l'une des formes correctes.
code-golf
date
code-challenge
polyglot
hello-world
unicode
rosetta-stone
code-golf
ascii-art
kolmogorov-complexity
code-golf
math
approximation
code-golf
array-manipulation
code-golf
math
sequence
code-golf
array-manipulation
decision-problem
code-golf
ascii-art
random
card-games
code-golf
number
integer
base-conversion
code-golf
quine
binary
code-golf
graph-theory
classification
code-golf
math
number
code-golf
math
geometry
code-golf
tips
ruby
qw3n
la source
la source
december
,DEC
etdec
devrait tout retour 31 » - Est - ce que l'intention?Réponses:
Pyke , 9 octets
Essayez-le ici!
Ou 15 octets si tous les formats d'entrée sont requis
Essayez-le ici!
la source
FEB
.Apr
,Jun
,Sep
etNov
) , mais pense aussi qu'il faut une petite précision dans l'OP (voir ma question ).JavaScript (ES6),
48 47 44 4342 octetsDémo
Afficher l'extrait de code
Comment?
Ces opérations conduisent à une table de correspondance de 8 entrées, ce qui ne serait pas très intéressant si les valeurs étaient réparties aléatoirement. Mais tout résultat supérieur à 2 est mappé à 31 jours. Par conséquent, seules les 3 premières entrées doivent être stockées explicitement.
la source
.substr(0,3)
n'était pas nécessaire. Donc, après réflexion, ce n'est peut-être pas la meilleure approche.substr
?slice
!Javascript (ES6),
3633 octets-3 octets grâce à @JustinMariner et @Neil
Désolé @Arnauld, abuser de la bizarrerie JavaScript est plus court que vos conversions de base fantaisistes.
Comment ça marche
Pour une raison quelconque, JavaScript permet de saisir des dates en dehors du mois spécifié. Le code compte le nombre de jours en dehors du mois de la date pour déterminer le nombre de jours dans le mois. Exemples:
"FEB31"
→Thu Mar 02 2000
→31 - 2 % 31
→29
"October31"
→Tue Oct 31 2000
→31 - 31 % 31
→31
Cas de test
Afficher l'extrait de code
la source
31
. Il semble fonctionner dans Chrome commenew Date("feb31")
par exemple.+31
sauvegarde globale de trois octets. Cependant, rien de tout cela ne fonctionne dans Firefox.Python 2 ,
464538 octets-1 octet grâce à @totallyhuman
Essayez-le en ligne!
la source
Bash , 21 octets
Essayez-le en ligne!
Prend l'entrée comme argument de ligne de commande et sort avec un retour à la ligne de fin. Le nombre de jours pour février dépend de celui de l'année en cours
Nécessite la version util-linux 2.29 de
cal
, qui est celle disponible sur TIO . Dépend également des paramètres régionaux, LC_TIME doit donc être modifié sur les systèmes non anglais (merci @Dennis pour la clarification).L'idée de la canalisation à travers la sortie de
xargs
trimcal
provient de cette réponse SO .la source
Proton , 50 octets
Essayez-le en ligne!
-14 octets grâce à Jonathan Frech
Trente jours ont septembre, avril, juin et novembre. Tout le reste avait du beurre d'arachide. Tous sauf ma grand-mère; elle avait un petit tricycle rouge, mais je l'ai volé. muahahahahaha
(J'attendais de raconter cette blague (source: mon professeur de mathématiques) depuis des lustres sur ce site: D: D: D)
la source
'sepaprjunnov'
au lieu d'une liste de chaînes.C # (.NET Core) ,
52 + 13 = 6538 + 24 = 62 octetsEssayez-le en ligne!
+24 pour
using D=System.DateTime;
Remerciements
-3 octets grâce à Grzegorz Puławski.
la source
using System;
? Ou pouvez-vous exclure cela du nombre d'octets?using D=System.DateTime;
etm=>D.DaysInMonth(1,D.Parse(1+m).Month)
comme ici: tio.run/##jc5BSwMxEAXgs/…Python 3 , 60 octets
Essayez-le en ligne!
Portage de ma solution Proton
-10 octets grâce à totalement humain
la source
Shell / GNU Date ,
39, 26 octetsOù
$1
est le nom du mois.Essayez-le en ligne!
edit: Merci Dennis d' avoir sauvé beaucoup d'octets!
la source
AWK ,
4544 octetsEssayez-le en ligne!
la source
Python 3 -
93868482 octetsVariantes de réponse (montrant la progression du temps et des octets pour chacune, avec des liens TIO):
Réponse originale (93 octets)
-7 octets grâce à Jonathan Frech.(86 octets)
-2 octets de plus grâce à mes propres tests supplémentaires des
monthrange
résultats, la deuxième valeur étant toujours la valeur la plus élevée. (84 octets) 1-2 de plus en l'utilisant
import calendar as c
et en le référençant avecc.monthrange
. (82 octets, révision en cours )Évidemment, pas aussi agréable que la réponse d'HyperNeutrino qui n'utilise pas de fonctionnalités intégrées, mais cela fonctionne toujours.
Notes de bas de page
1 : Cas de test via TIO.run montrant la preuve de la façon dont je gère ces
monthrange
valeurs, pour un nombre variable de cas de test de mois.la source
import ...,calendar as c
pour ne pas avoir à taper "calendrier" deux fois.Perl 5 , 47 + 1 (
-p
) = 48 octetsEssayez-le en ligne!
la source
($_)=/.(..)/;
au lieu de$_=substr$_,1,2;
et()
autour"eprunov"=~/$_/i
peuvent être supprimés.Haskell ,
656362 octetsEssayez-le en ligne!
Approche d'appariement de motifs. La première ligne consiste à gérer l'insensibilité à la casse. Ensuite, nous revenons
28
si la troisième lettre est plus petite que C (numéro 3),30
si la deuxième lettre est plus grande que C et la troisième plus grande que M, ou31
autrement.Edit: -1 octet grâce à Leo
Alternative (
6564 octets)Essayez-le en ligne!
la source
c<3
lieu dea==6
(février est le premier mois si vous les commandez par leur troisième lettre, suivie de décembre)APL (Dyalog) , 32 octets *
Fonction de préfixe tacite. Suppose
⎕IO
( I ndex O rigin)0
, qui est par défaut sur de nombreux systèmes.Essayez-le en ligne!
⍠1
cas insensible1
retourner la longueur du⎕S
PCRE S Earch pour'.p|un|no|f'
any-char, "p" ou "un" ou "no" ou "f"⊃⍨∘⊃
et utiliser le premier élément de celui-ci (0 si aucun) pour choisir parmi31 28 30
cette listeAinsi:
Ap r, S ep , J un et No v sélectionneront le nombre à l'index 2, à savoir 30
F eb sélectionnera le nombre à l'indice 1, soit 28
toute autre chose sélectionnera le nombre à l'index 0, à savoir 31
* Utiliser Classic et compter
⍠
comme⎕OPT
.la source
Modèle Mediawiki, 19 octets
la source
MATL , 22 octets
Essayez-le en ligne!
Explication
la source
Wolfram Language (Mathematica) ,
4630 octetsEssayez-le en ligne!
Donnera soit
28
ou29
pour février selon que l'année en cours est une année bissextile.Comment ça marche
Toutes les commandes de date dans Mathematica interpréteront entrée tels
April
,APR
,ApRiL
et ainsi de suite que le premier jour du mois correspondant de l'année en cours. (En prime, des entrées telles que"February 2016"
ou{2016,2}
fonctionne également comme prévu.)#~NextDate~"Month"
donne le premier jour du mois suivant, etDayCount
donne le nombre de jours entre ses deux arguments. Le nombre de jours entre le 1er avril et le 1er mai est de 30, le nombre de jours en avril.la source
Java 8 , 47 octets
Essayez-le en ligne!
J'ai fini par utiliser la même idée que la réponse JS d'Herman Lauenstein , où le fait de fixer la date au 31 a été repoussé au mois suivant. Java nécessite un an, ce qui a été défini sur
1
.la source
Rétine ,
323128 octetsEssayez-le en ligne! Edit: 1 octet enregistré grâce à @RobertBenson. Sauvegardé 3 octets grâce à @ovs.
la source
q / kdb +, 36 octets
Solution:
Exemples:
Explication:
Il existe un million de façons d'écorcher un chat. Je pense que c'est légèrement différent des autres. Prenez les 2e et 3e lettres de l'entrée, mettez-les en minuscules, puis recherchez-les dans la chaîne
"ebeprunov"
. S'ils sont à l'emplacement 0, alors c'est février, s'ils sont à un emplacement> 0, ils sont 30 jours, s'ils ne sont pas dans la chaîne, ils sont 31 jours.la source
Excel VBA,
4743 octetsFonction de fenêtre immédiate VBE anonyme qui prend l'entrée, comme nom de mois, abréviation ou numéro, de la plage
[A1]
et renvoie la longueur de ce mois de l'année 2001 à la fonction de fenêtre immédiate VBE.Ancienne version
la source
PHP,
3833 + 132 + 1 octets5 octets enregistrés grâce à Titus
Exécuter en tant que tuyau avec
-nF
Essayez-le en ligne!
la source
.' 1'
, il semble fonctionner sur TIO sans lui!<?=date(t,strtotime($argn));
(exécuté en tant que pipe avec-nF
).' 1'
, mais cela ne fonctionnait pas. Après avoir vu votre commentaire, j'ai essayé de comprendre ce que j'avais fait de mal. Parce que je l'exécutais le 31 du mois, il prenait le 31e jour (actuel) pour tout mois que je mettais, ce qui le mettrait au-delà du mois en cours. Le 31 février se transforme en 3 mars, le code renvoie donc 31 (le nombre de jours en mars). Pour cette raison, chaque mois revenait à 31. Donc, cela fonctionne sans.' 1'
n'importe quel jour <= 28 du mois.'t'
->t
. De plus, j'ai dû faire un tas de recherches pour trouver comment "fonctionner comme une pipe avec-nF
" mais je l'ai compris (je pense). :)Java (OpenJDK 8) , 126 octets
Essayez-le en ligne!
la source
false
en une expression booléenne comme1<0
pour économiser quelques octets.QBIC ,
4935 octetsSignificativement plus court avec quelques ruses.
Explication
la source
Perl 5 , 24 octets
Code 23 octets + 1 pour
-p
.Essayez-le en ligne!
la source
Rubis , 45 octets
Essayez-le en ligne!
Ruby's
Date.parse
accepte seul un nom de mois. Ce qui serait normalement un décalage à droite (>>
) ajoute en fait au mois de l'Date
objet. La soustraction affecte le jour du mois, qui revient en arrière au dernier jour du mois précédent.la source
Kotlin , 92 octets
Essayez-le en ligne!
la source