Introducción
A menudo, las personas se refieren a las fechas como el "segundo viernes de agosto de 2018" o el "cuarto domingo de marzo de 2012". ¡Pero es difícil saber qué fecha es esa! Su tarea es escribir un programa que reciba un año, un mes, un día de la semana y un número entero, y generar esa fecha.
Desafío
Para obtener información, obtendrá un año, un mes, un día de la semana y un número.
Puede tomar la entrada en cualquier formato razonable, como usar una cadena para el día de la semana o usar un día de la semana indexado a cero, o incluso tomar el año y el mes en una sola cadena. Sin embargo, explique su formato de entrada en su respuesta.
El número entero que le indica a qué día de la semana en el mes apuntar será un número entero del 1 al 5. El número entero nunca se referirá a un día de la semana que no existe (por ejemplo, el quinto viernes de febrero de 2019, que no existe).
Los años siempre serán positivos.
Su salida puede estar en cualquier formato razonable, incluida la impresión de su fecha final. Sin embargo, explique su formato de salida en su respuesta.
Proporcionar el año y el mes en la salida es opcional. Además, puede suponer que la fecha es válida.
Ejemplo de entrada y salida
Considere esta entrada, con el formato tomando el año como un número de 4 dígitos, el mes como un entero, el día de la semana como una cadena y el número ordinal como un entero:
2019, 3, sábado, 2
2019, 12, domingo, 1
2019, 9 sábado, 1
Salida:
9 de marzo 1 de
diciembre
7 de septiembre
Este es el código de golf , por lo que gana la respuesta más corta
date
, pero de manera divertida, el analizador tiene una ... interpretación interesante aquí.Respuestas:
Plantilla MediaWiki, 19 bytes
Este es un puerto MediaWiki Template ParserFunctions de esta respuesta PHP
Nota:
#time
use PHPstrtotime
internamente.Entrada de muestra
Salida de muestra
fuente
Japt,
1915 bytesLa entrada es: año, índice basado en 0 del mes, índice basado en 0 del día de la semana (
0
es domingo) yn
.Intentalo
fuente
C # (compilador interactivo de Visual C #) , 59 bytes
Pruébalo en línea!
-27 bytes gracias a @EmbodimentOfIgnorance!
Menos código de golf ...
El valor de retorno es un entero para el día del mes de la fecha solicitada.
fuente
SmileBASIC,
5851484645 bytesLa entrada tiene la forma:
week,year/month/weekday
week
: número de semana, indexado 0year
: año, 4 dígitosmonth
: mes (1 indexado), 2 dígitos0
acolchadosweekday
: día de la semana (1 indexado, 1 = domingo), 2 dígitos0
rellenadosLa salida es el día del mes, 0 indexado.
El segundo sábado de marzo de 2019 sería
1,2019/03/07
→8
(9 de marzo)Sin golf
Explicación
El formulario de entrada se eligió específicamente para que el año / mes / día de la semana se pueda pasar directamente a
DTREAD
, que es una función que analiza unaYYYY/MM/DD
cadena y devuelve el año / mes / día como números, así como el cálculo del día de la semana.Sin embargo,
DTREAD
tenga en cuenta que, donde se espera el día del mes, le daremos el día de la semana. Esto complica las cosas, pero también significa que hay menos valores de entrada y no necesitamos agregarlos/01
al final de la cadena de fecha.DTREAD
salidasW
yD
.W
es el día de la semana yD
es el día de la semana delW
día del mes.(Por lo tanto, si ingresa
7
como el día de la semana,D
será7
yW
será el día de la semana el séptimo día del mes)La expresión
(5-W+D*2)MOD 7
se utiliza para obtener la primera aparición del día de la semana de entrada, como un día del mes indexado en 0. (Me di cuenta de esto principalmente a través de prueba y error)Después de eso, el programa simplemente agrega
WEEK*7
.Realmente desearía que hubiera palabras separadas para "día de la semana" y "día del mes".
fuente
Perl 6 ,
5248 bytesPruébalo en línea!
Bloque de código anónimo que toma datos como año, mes, día de la semana (domingo es 0) y número de semana (0 indexado). La salida es un objeto de fecha.
Vieja explicación:
fuente
$^c+4-$!.daycount
.MATL ,
2827 bytesEsto usa tres entradas:
'March 2019'
Sat
'2
.La salida es una cadena con el día, mes y año separado con guiones:
09-Mar-2019
.Pruébalo en línea!
Explicación
Considere insumos
'March 2019'
,'Sat'
,2
.fuente
Python 3 ,
9282 bytes82 bytes gracias a @Jo King
Pruébalo en línea!
Versión original, 92 bytes.
Pruébalo en línea!
Toma el año como un entero, el mes como un entero indexado en 1, el día de la semana como un entero de índice 0 donde es lunes
0
y domingo6
, y la semana del mes como un entero indexado en 1.Cómo funciona:
fuente
R ,
7269 bytesPruébalo en línea!
Tomando entrada como:
fuente
PHP ,
46,43, 31 bytesPruébalo en línea!
El programa recibe como entrada una cadena como
"second saturday of March 2019"
El programa imprime el número del día.
-12 bytes gracias a Shaggy.
fuente
of
la entrada.Groovy , 46 bytes
Pruébalo en línea!
Ingrese como años desde 1900, mes indexado en 0, día indexado en 0 (el domingo es 0) y número de semana
fuente
Scala , 86 bytes
Pruébalo en línea!
fuente
Rojo ,
6460 bytesPruébalo en línea!
Toma el año, el mes y el día de la semana como números, indexados en 1, el lunes es el primer día de la semana.
fuente
to-date
es una cosa. tal vez esto sería útil en el desafío del formato de víspera de Navidadnow
para ese desafío" Eve"
método <repite fecha2-fecha1 veces> iirc)>> 25-Dec-2019 - 1-1-2019 == 358
APL (Dyalog Unicode) , SBCS de 36 bytes
Programa completo Solicita
[year,month]
(enero es 1), luego para el día (domingo es 0), luego para n (primero es 1).Pruébalo en línea!
⎕CY'dfns'
c o p y en la biblioteca dfns⊣
descartar el resultado de eso a favor de ...⎕
consola de solicitud de[year,month]
númerosdays
[c] días [n] desde 31.12.1899 del 0 º de ese mes(⍳31)+
añadir los i ntegers 1 ... 31 de ested←
tienda end
(por d números Ay)7|
resto de división cuando se divide por 7 (día de la semana con domingo siendo 0 debido a una buena época)⎕=
solicite la consola para el número del día de la semana y obtenga la máscara donde sea igual a los números del día de la semanad/⍨
filtrard
con esa máscara⎕⊃
solicite la consola para n y úsela para elegir de la lista de números de díadate
[c] sello de fecha y hora [n] (tiene ceros al final de horas, minutos, segundos, milisegundos)Haga clic en [c] para el código y [n] para las notas.
fuente
JavaScript (ES6),
4948 bytesToma parámetros como
f([year, month], day, number)
. Mes y día de la semana (comenzando el domingo) están indexados a cero. Editar: guardado 1 byte gracias a @Shaggy.fuente
0
en JS.TSQL, 106 bytes
Salida:
Pruébalo
fuente
Kotlin ,
13184 bytes47 bytes gracias al código y comentario de ASCII-only.
Entrada: año, mes Número, día de la semana Número, semana Número
Todos los enteros 1 al máximo en una sola línea. El número del día de la semana es el domingo del 1 al sábado del 7. El programa principal hace que el año pierda 1900 para la clase Fecha y el mes y el día de la semana se cambien para comenzar con cero en lugar de uno antes de llamar a la lambda. Puede ingresar sus argumentos en el cuadro de texto de entrada para probar sus propias fechas.
Salida: una instancia de clase de fecha. El programa principal muestra el resultado como: sáb mar 09 00:00:00 UTC 2019.
Hay una versión ampliada con comentarios que explican el código para aquellos que deseen obtener más información.
Pruébalo en línea!
fuente