El día de la semana y el mes del año parecen llamar mucho la atención, pero a nadie parece importarle la semana del año. Creo que es hora de cambiar eso, por lo que su trabajo es escribir un programa o función que, cuando se le da una fecha, genera un número entero entre 1 y 53 correspondiente a la semana actual del año.
Para los propósitos de este desafío, diremos que el primer domingo del año marca el comienzo del año, por lo que el único caso cuando el 1 de enero se considera la semana 1 es cuando cae en domingo.
- La entrada puede ser cualquier formato de fecha que no incluya explícitamente el número de semana (solo especifique el formato en su respuesta) para las fechas entre
1JAN1900
y31DEC2100
. - La salida es un número entero entre 1 y 53
- Puede usar cualquier método estándar para proporcionar entrada / salida.
Casos de prueba
17MAY2017 -> 20
3JAN2013 -> 53
1JAN2017 -> 1
17MAY1901 -> 19
31DEC2100 -> 52
7JUL2015 -> 27
- Este es el código de golf, por lo que se aplican todas las reglas estándar de golf, y gana el código más corto (en bytes).
07/07/2015
)? Puede7JUL2015
ser07JUL2015
?7/7/2015
,2015-07-07
también son válidos.%U
: Como señala @J_Lard, debe tener cuidado de si la semana 0 es la semana 52 o 53 del año anterior. Es la semana 53 en 2001, 2007, 2013, 2018, 2024, 2029 y se repite en un ciclo de 28 años. Otros años es la semana 52.Respuestas:
Ohm ,
1233 bytesEDITAR : se corrigieron los casos límite para "% U".
Asume que la entrada puede ser una marca de tiempo. Explicación por venir.
Pruébalo en línea!
fuente
MATL , 50 bytes
Gracias a @Neil y @NickClifford por señalar un error, ahora corregido
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
Utiliza las tres funciones de conversión de fecha / hora que hay en MATL:
XO
: convierte la fecha y la hora al formato de cadena;YO
: convierte la fecha y hora en número de serie;ZO
: convierte fecha y hora a vector de componentes.Determinar si la semana "0" debería convertirse en 52 o 53 fue costoso, porque MATL no puede definir funciones invocables para reutilizar la
8XO!s310=s
parte. La reutilización por medio de un bucle con una rama solo guarda un byte y complica la explicación, por lo que probablemente no valga la pena.Además, se podría obtener algo ingresando la fecha como una matriz [año, mes, día]; pero no usaría las tres funciones de fecha :-)
Considere la entrada
'17MAY2017'
como un ejemplo.fuente
%U
, pero solo quiero asegurarme.JavaScript (ES6),
8280 bytesToma entrada como
(year,month,day)
.fuente
JavaScript (Firefox 34+), 70 bytes
Funciona encontrando el primer día de la semana que contiene la fecha dada, luego buscando el número de la semana de ese día (que nunca es cero).
fuente
with
. Siempre +1 parawith
!Python 2,
7064 bytesEntrada =>
(year,month,day)
-6 bytes, gracias a @ovs
fuente
JavaScript (solo Firefox), 77 bytes
Toma la fecha como cadena: es decir
Jan 1, 2017
fuente
PHP, 125 bytes
Pruébalo en línea!
PHP, 28 bytes
Versión para lunes en lugar de domingo
Pruébalo en línea!
fuente
C #,
138123121 bytesResulta que hay un incorporado para eso, aunque es bastante grande ...
fuente
Powershell, 260 + 8 = 268 bytes
+8 bytes debido a la
-DateTime
banderaAcepta argumentos como
"day month year"
formato.No es experto en Powershell, no puede jugar golf
Caso de prueba
fuente