Antecedentes
Eres un golfista de código atractivo y muchas personas te invitan a salir.
No tiene tiempo para pensar qué días exactamente está disponible, por lo que decide crear una función que acepte una fecha y devuelva los días de esa semana.
Luego toma esos días de la semana, insértelo en su programa de calendario para ver si alguien más ya lo invitó a salir.
Reglas
- Acepta una fecha en formato AAAA-MM-DD
- Devuelve una matriz / lista de fechas de esa semana. (El domingo es el primer día)
- Las fechas se pueden mostrar como los milisegundos entre enero 1 de 1970 y de esa fecha, en un formato de "común" fecha 1 , o los objetos de fecha.
- El orden de las fechas debe ser ascendente.
- (Aunque eres lo suficientemente inteligente como para incluir soporte para una lista descendente, el programa puede trabajar más rápido con una lista ascendente y ¿quién tiene unos pocos milisegundos de sobra?)
- Debe trabajar con cualquier día desde 1993. (Sí, ¡tienes 24 años al momento de escribir!)
- ¡Cada respuesta de Javascript obtiene un máximo de cinco!
Especificaciones
Entrada de muestra: whichDates(2017-08-29)
Salida: (el equivalente de)
console.log([
Date.parse('2017-08-27'),
Date.parse('2017-08-28'),
Date.parse('2017-08-29'),
Date.parse('2017-08-30'),
Date.parse('2017-08-31'),
Date.parse('2017-09-01'),
Date.parse('2017-09-02'),
]);
1 Un formato que es bastante conocido. Tales como AAAA-MM-DD.
2 ¡ Esto es código-golf ! El código más corto por idioma gana, ¡pero el código más corto en general obtiene la marca de verificación esmeralda!
YYYY-MM-DD
(no veo una buena razón por la que debería ser estricto).Date.parse(2017-08-27)
?? debería ser estoDate.parse('2017-08-27')
?Respuestas:
Japt , 15 bytes
Pruébalo
Explicación
Entrada implícita de cadena
U
.Convierta
U
a un objeto de fecha y reasigne aU
.Cree una matriz de enteros de
0
a6
, pasando cada uno a través de una función dondeX
está el elemento actual.Establecer la fecha de
U
.Agregar la fecha actual de
U
aX
.Resta el día actual de la semana de
U
.Salida implícita de la matriz resultante.
fuente
Perl 6 , 47 bytes
Pruébalo en línea!
El código es casi autoexplicativo. Primero creamos un objeto Date a
$d
partir de la cadena, que resulta estar en el agradable formato ISOwhatever. Podemos realizar operaciones aritméticas con las fechas (sumar un número entero = sumar tantos días, lo mismo con restar). Así$d-$d.day-of-week
es elúltimoesto (oh, Dios mío, la semana siempre ha comenzado el lunes para mí: D) el domingo de la semana. (.day-of-week
es 1 para el lunes a 7 para el domingo). Luego asignamos más de 0 a 6 (^7
) y lo agregamos al domingo, obteniendo todos los días de la semana. El número que estamos mapeando aparece en el lugar de la estrella*
. Esta lista se devuelve.fuente
JavaScript (ES6),
736362 BytesPensé que también lo probaría en JavaScript.
Editar: Utilizando el enfoque de milisegundos, según lo permitido por el indicador, lo reduje a 62 bytes.
Puede realizar un
.map(x=>new Date(x))
en la matriz devuelta si desea convertirlo.Mantener el enfoque de fecha ( 72 bytes )
Hubo un error en mi envío inicial, está solucionado. Gracias a una observación de la leche, pude eliminar el error y aún así reducir el recuento de bytes.
fuente
s=>[..."0123456"].map(i=>(x=new Date(s))-(x.getDay()-i)*8e7)
keys
y use el índice en lugar del elemento al mapear sobre la matriz. Consejo 2: para una matriz tan pequeña, es más corto generarla de la manera que lo hice.MATL ,
2221 bytesLa salida está en
dd-mm-yyyy
formato.¡Pruébalo en MATL Online!
Explicación
fuente
JavaScript (ES6), 76 bytes
Creo que finalmente encontré el entorno menos propicio para el golf eficiente: ¡detrás de mi barra, mientras sirvo pintas con la otra mano!
Pruébelo en línea (fragmento a seguir)
Explicación
Función anónima que toma la cadena (de formato
yyyy-(m)m-(d)d
) como argumento a través de un parámetros
.Cree una matriz de 7 elementos mediante la conversión
8000000
en notación científica a una cadena y su desestructuración, que es más corta que[...Array(7)]
.Asigne sobre la matriz, pasando cada elemento a través de una función donde
_
está el elemento actual, que no se utilizará, yx
es el índice actual, basado en 0.Convertir
s
a unDate
objeto y asignarlo a variabled
Establecer la fecha de
d
.Obtenga la fecha actual de
d
.Reste el número actual del día de la semana, indexado en 0, para obtener el domingo.
Añadir
x
.fuente
Bash + utilidades comunes, 53
Pruébalo en línea .
Esto supone que la salida de la fecha GNU es un formato de fecha "común", por ejemplo
Fri Sep 1 00:00:00 UTC 2017
.Explicación
fuente
Python 3,
133124126112 bytes-9 bytes gracias al Sr. Xcoder
+2 bytes porque la semana comienza con el domingo
-14 bytes gracias a notjagan
Eso no fue tan bien como esperaba.
fuente
raw_input()
lugar deinput()
arriba. (+4 bytes).range
todavía funciona en Python2 para esta pequeña cosa también. Sinraw_input
ti obtienes errores.Mathematica 20 bytes?
Mathematica expresa la lista de días como un único objeto de fecha. Si dicho objeto de fecha es una salida aceptable, funcionará la siguiente función pura de 20 bytes:
Ejemplo
fuente
Java 8 (
161154123122102 +1936 bytes)Pruébalo en línea!
fuente
l
y reemplazando referencias conLocalDate.parse(e)
.i
en el cuerpo del bucle para guardar 1 byte. Ah, y lajava.util.function.*
importación no es utilizada por la lambda, por lo que no tiene que contarla como parte de la solución.Python 2, 115 Bytes o 111 Bytes, dependiendo del formato de entrada.
Básicamente, este es casi el mismo código en la respuesta para Python3 escrito por Sobsz , pero hecho para funcionar en Python 2.
Si la entrada está en el formulario
YYYY-MM-DD
:(Esto supone que la entrada no está entre comillas simples para denotar una cadena como entrada)
La diferencia clave es que necesitamos en
raw_input
lugar deinput
, a menos que especifiquemos explícitamente la fecha'YYYY-MM-DD'
dentro de los apóstrofes para identificarla como un literal de cadena. Sin la entrada literal de cadena, obtenemos un error de sintaxis, de ahí el uso deraw_input
para aceptar fechasYYYY-MM-DD
directamente sin ponerlo en literales de cadena.Por supuesto, esto supone que la entrada se pone en modo:
2017-08-29
.+4 de la respuesta de Sobsz, luego -1 porque no necesitamos paréntesis para la
print
declaración y guardamos un byte del paréntesis de cierre que no está allí; total de +3 bytes de diferencia.Pruébalo en línea!
Si la entrada está en la forma
'YYYY-MM-DD'
:(Tenga en cuenta que debemos tener la fecha indicada entre comillas para que esta respuesta funcione)
Podemos guardar 4 bytes porque no necesitamos el
raw_
y esta es efectivamente la misma respuesta que proporciona Sobsz, menos un byte porque no necesitamos los paréntesis alrededor delprint
comando.Gracias al Sr. Xcoder por señalar esto, aunque técnicamente es un duplicado exacto, menos un byte, de la respuesta de Sobsz .
fuente
raw_input()
con entrada y rodear la entrada con comillas para ahorrar 4 bytes. Por supuesto, eso convierte su solución en un duplicado: P