Dada una representación textual (nombre completo que no distingue entre mayúsculas y minúsculas o abreviatura de 3 caracteres) de un mes, devuelve el número de días del mes.
Por ejemplo, december
, DEC
, y dec
todos deben volver 31.
Febrero puede tener 28 o 29 días.
Suponga que la entrada es un mes en una de las formas correctas.
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
fuente
fuente
december
,DEC
, ydec
debe todo retorno 31" - ¿Es esa la intención?Respuestas:
Pyke , 9 bytes
Pruébalo aquí!
O 15 bytes si se requieren todos los formatos de entrada
Pruébalo aquí!
fuente
FEB
.Apr
,Jun
,Sep
, yNov
), pero también creo que se necesita una pequeña aclaración en el PO (véase mi pregunta ).JavaScript (ES6),
48 47 44 4342 bytesManifestación
Mostrar fragmento de código
¿Cómo?
Estas operaciones conducen a una tabla de búsqueda de 8 entradas, que no sería muy interesante si los valores se distribuyeran aleatoriamente. Pero cualquier resultado mayor que 2 se asigna a 31 días. Por lo tanto, solo las primeras 3 entradas deben almacenarse explícitamente.
fuente
.substr(0,3)
no era necesario. Entonces, pensándolo bien, este puede no ser el mejor enfoque.substr
?slice
!Javascript (ES6),
3633 bytes-3 bytes gracias a @JustinMariner y @Neil
Lo siento @Arnauld, abusar de la rareza de JavaScript es más corto que tus sofisticadas conversiones de base.
Cómo funciona
Por alguna razón, JavaScript permite ingresar fechas fuera del mes especificado. El código cuenta cuántos días fuera del mes es la fecha para determinar cuántos días hay en el mes. Ejemplos:
"FEB31"
→Thu Mar 02 2000
→31 - 2 % 31
→29
"October31"
→Tue Oct 31 2000
→31 - 31 % 31
→31
Casos de prueba
Mostrar fragmento de código
fuente
31
. Parece funcionar en Chrome comonew Date("feb31")
por ejemplo.+31
guardar tres bytes en general. Sin embargo, nada de esto funciona en Firefox.Python 2 ,
464538 bytes-1 byte gracias a @totallyhuman
Pruébalo en línea!
fuente
Bash , 21 bytes
Pruébalo en línea!
Toma la entrada como argumento de línea de comando y las salidas con una nueva línea final. El recuento de días para febrero depende del año actual
Requiere la versión util-linux 2.29 de
cal
, que es la que está disponible en TIO . También depende de la configuración regional, por lo que LC_TIME debe cambiarse en sistemas que no están en inglés (gracias @Dennis por su aclaración).La idea de pasar
xargs
acal
la salida del recorte es de esta respuesta SO .fuente
Protón , 50 bytes
Pruébalo en línea!
-14 bytes gracias a Jonathan Frech
Treinta días tiene septiembre, abril, junio y noviembre. Todo lo demás tenía mantequilla de maní. Todos excepto mi abuela; ella tenía un pequeño triciclo rojo, pero lo robé. muahahahahaha
(He estado esperando contar esa broma (fuente: mi profesor de matemáticas) durante siglos en este sitio: D: D: D)
fuente
'sepaprjunnov'
lugar de una lista de cadenas.C # (.NET Core) ,
52 + 13 = 6538 + 24 = 62 bytesPruébalo en línea!
+24 para
using D=System.DateTime;
Expresiones de gratitud
-3 bytes gracias a Grzegorz Puławski.
fuente
using System;
? ¿O puedes excluir eso del conteo de bytes?using D=System.DateTime;
ym=>D.DaysInMonth(1,D.Parse(1+m).Month)
como aquí: tio.run/##jc5BSwMxEAXgs/…Python 3 , 60 bytes
Pruébalo en línea!
Portar mi solución de protones
-10 bytes gracias a totalmente humano
fuente
Fecha de shell / GNU ,
39, 26 bytes¿Dónde
$1
está el nombre del mes?Pruébalo en línea!
editar: ¡Gracias Dennis por guardar muchos bytes!
fuente
AWK ,
4544 bytesPruébalo en línea!
fuente
Python 3 -
93868482 bytesVariantes de respuesta (que muestran la progresión del tiempo y bytes para cada una, con enlaces TIO):
Respuesta original (93 bytes)
-7 bytes gracias a Jonathan Frech. (86 bytes)
-2 bytes más gracias a mis propias pruebas adicionales de los
monthrange
resultados, con el segundo valor siempre siendo el valor más alto. (84 bytes) 1-2 más al usarlo
import calendar as c
y hacer referencia a él conc.monthrange
. (82 bytes, revisión actual )Obviamente, no es tan bueno como la respuesta de HyperNeutrino, que no utiliza elementos integrados, pero todavía funciona.
Notas al pie
1 : Casos de prueba a través de TIO.run que muestra la prueba de cómo estoy manejando esos
monthrange
valores, para un número variable de casos de prueba mensuales.fuente
import ...,calendar as c
para no tener que escribir 'calendario' dos veces.Perl 5 , 47 + 1 (
-p
) = 48 bytesPruébalo en línea!
fuente
($_)=/.(..)/;
lugar de$_=substr$_,1,2;
y()
alrededor"eprunov"=~/$_/i
se pueden eliminar.Haskell ,
656362 bytesPruébalo en línea!
Enfoque de coincidencia de patrones. La primera línea es manejar la insensibilidad a mayúsculas y minúsculas. Luego volvemos
28
si la tercera letra es más pequeña que C (número 3),30
si la segunda letra es más grande que C y la tercera más grande que M, o de lo31
contrario.Editar: -1 byte gracias a Leo
Alternativa (
6564 bytes)Pruébalo en línea!
fuente
c<3
lugar dea==6
(febrero es el primer mes si los ordena por su tercera carta, seguido de diciembre)APL (Dyalog) , 32 bytes *
Función de prefijo tácito. Asume
⎕IO
( I ndex O rigin)0
, que es por defecto en muchos sistemas.Pruébalo en línea!
⍠1
caso insensible1
devolver la longitud de la⎕S
PCRE S earch para'.p|un|no|f'
any-char, "p" o "un" o "no" o "f"⊃⍨∘⊃
y use el primer elemento de eso (0 si no hay) para elegir31 28 30
esta listaAsí:
Ap r, S ep , J un y No v seleccionarán el número en el índice 2, es decir, 30
F eb seleccionará el número en el índice 1, es decir, 28
cualquier otra cosa seleccionará el número en el índice 0, es decir, 31
* Usando Classic y contando
⍠
como⎕OPT
.fuente
Plantilla Mediawiki, 19 bytes
fuente
MATL , 22 bytes
Pruébalo en línea!
Explicación
fuente
Wolfram Language (Mathematica) ,
4630 bytesPruébalo en línea!
Dará cualquiera
28
o29
para febrero, dependiendo de si el año actual es bisiesto.Cómo funciona
Todos los comandos de fecha en Mathematica interpretarán entrada tal
April
,APR
,ApRiL
, y así sucesivamente como el primer día del mes correspondiente en el año en curso. (Como beneficio adicional, las entradas como"February 2016"
o{2016,2}
también funcionan como se esperaba).#~NextDate~"Month"
da el primer día del mes después de eso, yDayCount
da el número de días entre sus dos argumentos. El número de días entre el 1 de abril y el 1 de mayo es 30, el número de días en abril.fuente
Java 8 , 47 bytes
Pruébalo en línea!
Terminé usando la misma idea que la respuesta JS de Herman Lauenstein , donde establecer la fecha en el 31 empujó al próximo mes. Java requiere un año, por lo que se ha establecido en
1
.fuente
Retina ,
323128 bytesPruébalo en línea! Editar: Guardado 1 byte gracias a @RobertBenson. Guardado 3 bytes gracias a @ovs.
fuente
q / kdb +, 36 bytes
Solución:
Ejemplos:
Explicación:
Hay un millón de formas de pelar un gato. Creo que es un poco diferente a los demás. Tome las letras segunda y tercera de la entrada, en minúsculas, luego búsquelas en la cadena
"ebeprunov"
. Si están en la ubicación 0, entonces es febrero, si están en una ubicación> 0 son 30 días, si no están en la cadena, son 31 días.fuente
Excel VBA,
4743 BytesFunción de ventana inmediata anónima VBE que toma datos, como nombre de mes, abreviatura o número, del rango
[A1]
y emite la duración de ese mes en el año 2001 a la función de ventana inmediata de VBE.Versión antigua
fuente
PHP,
3833 + 132 + 1 bytesGuardado 5 bytes gracias a Titus
Corre como tubería con
-nF
Pruébalo en línea!
fuente
.' 1'
, ¡parece funcionar en TIO sin él!<?=date(t,strtotime($argn));
(ejecutar como tubería con-nF
).' 1'
, pero no estaba funcionando. Después de ver tu comentario, traté de averiguar qué había hecho mal. Debido a que lo estaba ejecutando el día 31 del mes, estaba tomando el día 31 (actual) para cualquier mes que ingresé, lo que lo pondría más allá del mes actual. El 31 de febrero se convierte en el 3 de marzo, por lo que el código devuelve 31 (el número de días en marzo). Debido a esto, cada mes regresaba 31. Por lo tanto, funciona sin el.' 1'
día <= 28 del mes.'t'
->t
. Además, tuve que hacer un montón de búsquedas para descubrir cómo "correr como una tubería-nF
", pero lo resolví (creo). :)Java (OpenJDK 8) , 126 bytes
Pruébalo en línea!
fuente
false
a una expresión booleana como1<0
guardar un par de bytes.QBIC ,
4935 bytesSignificativamente más corto con algunos trucos.
Explicación
fuente
Perl 5 , 24 bytes
Código de 23 bytes + 1 para
-p
.Pruébalo en línea!
fuente
Ruby , 45 bytes
Pruébalo en línea!
Ruby's
Date.parse
acepta un nombre de mes solo. Lo que normalmente sería un desplazamiento a la derecha (>>
) en realidad se agrega al mes delDate
objeto. La resta afecta el día del mes, que se remontará al último día del mes anterior.fuente
Kotlin , 92 bytes
Pruébalo en línea!
fuente