¿A quién no le gusta relajarse un domingo por la mañana en verano con una cerveza fría y la televisión o en invierno jugando al bádminton o al máximo con amigos?
Siempre pienso que saber cuántos días tienes para relajarte en un mes te mantiene bien informado y te ayuda a planificar lo que quieres hacer. Ya sea sentado frente a su PC y resolviendo un problema de código de golf o saliendo a jugar al fútbol.
Así que me ayudan a escribir un programa o función que toma como entrada 2 enteros positivos, Y
y M
y emite el número de domingos en ese año en particular ( Y
) y mes ( M
) (según el calendario gregoriano), seguido de la fecha de cada domingo.
Además, tenga en cuenta que gana el código más corto.
Restricciones de entrada
1000 <= Y <= 9999
1 <= M <= 12
Salida
Estos casos de prueba tendrán salida tendrán las fechas de cada domingo de ese mes en ese año en el formato DD-MM-YYYY
.
Ejemplos de casos de prueba
Caso de prueba 1
Entrada de muestra
2017 1
Salida de muestra
5
01-01-2017
08-01-2017
15-01-2017
22-01-2017
29-01-2017
Caso de prueba 2
Entrada de muestra
2018 2
Salida de muestra
4
04-02-2018
11-02-2018
18-02-2018
25-02-2018
Caso de prueba 3
Entrada de muestra
2016 11
Salida de muestra
4
06-11-2016
13-11-2016
20-11-2016
27-11-2016
Date()
objeto, y cualquier formato de salida, incluido[4, [<dateobj>, <dateobj>, <dateobj>, <dateobj>]]
(donde<dateobj>
es un objeto de fecha real y[]
es una matriz real)./
lugar de-
? ¿O puede ser mes, luego día, luego año?Respuestas:
MATL ,
46454235 bytesLa entrada es una matriz del formulario
[2017 1]
. El formato de salida es29/01/2017
.Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
Python 2 ,
150,148,145 bytesPruébalo en línea!
-3 bytes haciendo cosas más pitónicas (¡usando zip y filtro!)
fuente
JavaScript (ES6), 107 bytes
Editar: Agregar un recuento explícito cuesta 15 bytes. Formatear la salida costaría al menos otros 33 bytes dependiendo de cuán estricto sea el formato de salida.
fuente
outputs the number of Sundays in that particular year and month
; parece que esto no genera actualmente la cantidad de domingos.<input type='date'>
.PowerShell , 91 bytes
Pruébalo en línea!
(Nota especial: esto depende de la configuración regional y cultural. Dado que TIO se está ejecutando como
en-us
, funciona correctamente allí como está. Es posible que sea necesario cambiar este código para diferentes configuraciones regionales).Toma la entrada como dos enteros
$y
y$m
. Recorre de1
a31
, obteniendo un nuevodatetime
objeto para cada fecha posible (a través delGet-Date
cmdlet). Lanzará errores a STDERR (ignorado por defecto en los desafíos de código de golf) durante meses con menos de 31 días, pero eso no afecta la salida. Tomamos cada uno de esosdatetime
objetos y usamos unWhere-Object
(|?{...}
) en ellos, con la cláusula de!$_.dayofweek
. La propiedad.dayofweek
es un número desde0
hasta6
, con0
convenientemente correspondiente aSunday
, por lo que el!
de eso es verdadero, lo que ahorra un par de bytes en comparación con una verificación de igualdad como-eq0
.Los domingos se reúnen en parejas y se almacenan en
$a
. Luego tomamos el.count
mismo, y eso se coloca en la tubería. Luego, recorremos$a
y usamos el-f
operador ormat para construir el formato de salida correcto. Tenga en cuenta que esto no genera ceros iniciales durante días o meses. Esas cadenas de fecha también se dejan en la tubería, y un implícitoWrite-Output
al finalizar el programa las imprime con separadores de nueva línea.Nota: si el formato de salida fuera más flexible, podríamos dejarlo
$a
en la tubería y no tener que recorrerlo. Eso encadenará losdatetime
objetos como el formato de fecha larga, incluida la información de tiempo, pero nos lleva a 69 bytes , que (actualmente) solo serían superados por Mathematica y MATL.fuente
Octava, 72 bytes
nweekdate
devuelve el número de fecha correspondiente a laN
enésima aparición de un día de la semana en particular en el mes / año especificado. Usamos la matriz1:6
en lugar deN
para obtener todas las ocurrencias en un mes. Si hay menos de lasN
ocurrencias de ese día de la semana en un mes, entonces el número de fecha resultante es0
. Por esta razón, seleccionamos solo las fechas válidas usando(x>1)
y luego las convertimos en cadenas usandodatestr
.Luego, para contar el número de domingos, contamos el número de números de fecha que no son cero (
nnz
) en el resultado.Luego envolvemos todo
cellfun
para mostrar cada valor.fuente
Rubí,
140132129118 bytesfuente
Excel - 103 caracteres
Ponga el año en la celda
A1
y el mes en la celdaA2
.El recuento está en la celda
D1
y los domingos en las celdasD2:D6
.Los supuestos
D2:D6
tienen formato DD-MM-AAAA.fuente
Mathematica,
8268 bytesFunción anónima. Emite una lista de la cantidad de días, seguida de una lista de domingos como
DateObject
s. Resulta que, en Mathematica, el día 0 de un mes se interpreta como el último día del mes anterior.fuente
C #, 183 bytes
Método anónimo que devuelve una matriz de cadenas, que contiene primero el número de domingos y luego cada domingo en el formato especificado. Si solo hay 4 domingos en un mes, la última cadena es nula.
Programa completo con método no protegido y casos de prueba:
fuente
REXX, 168 bytes
fuente
1217
?Bash + bsdmainutils, 94 bytes
Utiliza el comando
cal
que imprime un calendario, se instala por defecto en varios UNIX / LINUX / BSD (desafortunadamente no en TIO).Para probarlo Guardar
file
,chmod +x file
y de ejecución./file 2017 9
Se guarda para agrupar los primeros dos bytes de salida de cal anexados con la cadena "MM-AAAA" que se pasa como segundo y primer parámetro (debe cambiar si su configuración regional no comienza semanas los domingos).
El siguiente eco suscribe la longitud de la matriz sustraída por uno (el primer elemento es la palabra que representa el domingo) y la matriz sin el primer elemento, uno por línea
fmt -1
fuente
SAS, 182 bytes
fuente
T-SQL,
316311 bytesSin embargo, no sé si es una respuesta válida, ya que genera la cantidad de domingos después de las fechas
Pruébalo aquí
sin golf:
fuente
PHP,
127 118 112107 bytestoma datos de los argumentos de la línea de comandos; correr
-r
o probarlo en línea .Descompostura
fuente
Excel VBA, 190 bytes
fuente