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
1JAN1900y31DEC2100. - 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)? Puede7JUL2015ser07JUL2015?7/7/2015,2015-07-07tambié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=sparte. 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, 2017fuente
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
-DateTimebanderaAcepta argumentos como
"day month year"formato.No es experto en Powershell, no puede jugar golf
Caso de prueba
fuente