Introdução
Frequentemente, as pessoas se referem a datas como a "segunda sexta-feira em agosto de 2018" ou o "quarto domingo de março de 2012". Mas é difícil dizer que data é essa! Sua tarefa é escrever um programa que receba um ano, um mês, um dia da semana e um número inteiro e gerar essa data.
Desafio
Para entrada, você receberá um ano, um mês, um dia da semana e um número.
Você pode receber entradas em qualquer formato razoável, como usar uma sequência de caracteres para o dia da semana ou usar um dia da semana indexado a zero, ou ainda fazer o ano e o mês em uma única sequência. Porém, explique seu formato de entrada na sua resposta.
O número inteiro que informa qual dia da semana no mês a ser segmentado será um número inteiro de 1 a 5. O número inteiro nunca se refere a um dia da semana que não existe (por exemplo, a quinta sexta-feira de fevereiro de 2019, que não existe).
Os anos serão sempre positivos.
Sua saída pode estar em qualquer formato razoável, incluindo a impressão da data final. No entanto, explique seu formato de saída em sua resposta.
Fornecer o ano e o mês na saída é opcional. Além disso, você pode assumir que a data é válida.
Exemplo de entrada e saída
Considere esta entrada, com o formato sendo utilizado no ano como um número de 4 dígitos, o mês como um número inteiro, o dia da semana como uma sequência e o número ordinal como um número inteiro:
2019, 3, sábado, 2
2019, 12, domingo, 1
2019, 9 sábado, 1
Resultado:
9 de março -
1 de
setembro - 7 de setembro
Este é o código-golfe , por isso a resposta mais curta vence.
date
, mas divertidamente, o analisador tem uma ... interpretação interessante aqui.Respostas:
Modelo do MediaWiki, 19 bytes
Esta é uma porta MediaWiki Template ParserFunctions da desta resposta PHP
Nota:
#time
use PHPstrtotime
internamente.Entrada de amostra
Saída de amostra
fonte
Japonês,
1915 bytesA entrada é: ano, índice baseado em 0 do mês, índice baseado em 0 do dia da semana (
0
é domingo) en
.Tente
fonte
C # (compilador interativo do Visual C #) , 59 bytes
Experimente online!
-27 bytes graças a @EmbodimentOfIgnorance!
Menos código de golfe ...
O valor de retorno é um número inteiro para o dia do mês da data solicitada.
fonte
SmileBASIC,
5851484645 bytesA entrada está no formato:
week,year/month/weekday
week
: número da semana, indexado 0year
: ano, 4 dígitosmonth
: mês (indexado 1), 2 dígitos0
preenchido comweekday
: dia da semana (1 indexado, 1 = domingo), 2 dígitos0
-AcolchoadoA saída é o dia do mês, 0 indexado.
O 2º sábado de março de 2019 seria
1,2019/03/07
→8
(9 de março)Ungolfed
Explicação
O formulário de entrada foi escolhido especificamente para que o ano / mês / dia da semana pudesse ser passado diretamente para
DTREAD
, que é uma função que analisa umaYYYY/MM/DD
string e retorna o ano / mês / dia como números, além de calcular o dia da semana.No entanto, observe que, onde
DTREAD
espera o dia do mês, estamos oferecendo o dia da semana. Isso complica as coisas, mas também significa que há menos valores de entrada e não precisamos adicionar/01
ao final da sequência de datas.DTREAD
saídasW
eD
.W
é o dia da semana eD
é o dia da semana doW
dia th do mês.(Portanto, se você inserir
7
como dia da semana,D
será7
eW
será o dia da semana em que o 7º dia do mês for)A expressão
(5-W+D*2)MOD 7
é usada para obter a 1ª ocorrência do dia da semana de entrada, como um dia do mês indexado a 0. (Eu descobri isso principalmente por tentativa e erro)Depois disso, o programa apenas adiciona
WEEK*7
.Eu realmente gostaria que houvesse palavras separadas para "dia da semana" e "dia do mês".
fonte
Perl 6 ,
5248 bytesExperimente online!
Bloco de código anônimo que recebe entrada como ano, mês, dia da semana (domingo é 0) e número da semana (0 indexado). Saída é um objeto de data.
Explicação antiga:
fonte
$^c+4-$!.daycount
.MATL ,
2827 bytesIsso usa três entradas:
'March 2019'
Sat
'2
.A saída é uma string com dia, mês e ano separados com traços:
09-Mar-2019
.Experimente online!
Explicação
Considere entradas
'March 2019'
,'Sat'
,2
.fonte
Python 3 ,
9282 bytes82 bytes graças a @Jo King
Experimente online!
Versão original, 92 bytes
Experimente online!
Toma o ano como um número inteiro, o mês como um número inteiro indexado a 1, o dia da semana como um número inteiro com índice 0, onde segunda-feira é
0
e domingo é6
, e a semana do mês como um número inteiro indexado em 1.Como funciona:
fonte
R ,
7269 bytesExperimente online!
Tomando entrada como:
fonte
PHP ,
46,43, 31 bytesExperimente online!
O programa recebe como entrada uma string como
"second saturday of March 2019"
O programa imprime o número do dia.
-12 bytes graças a Shaggy.
fonte
of
da entrada.Groovy , 46 bytes
Experimente online!
Entrada como anos desde 1900, mês indexado a 0, dia indexado a 0 (domingo sendo 0) e número da semana
fonte
Scala , 86 bytes
Experimente online!
fonte
Vermelho ,
6460 bytesExperimente online!
Toma o ano, o mês e o dia da semana como números, indexados 1, segunda-feira é o primeiro dia da semana.
fonte
to-date
é uma coisa. talvez isso seja útil no desafio do formato christmase evenow
para esse desafio" Eve"
método <repetir data2-data1 vezes> iirc)>> 25-Dec-2019 - 1-1-2019 == 358
APL (Dyalog Unicode) , SBCS de 36 bytes
Programa completo. Solicita
[year,month]
(janeiro é 1), depois dia (domingo é 0) e depois n (primeiro é 1).Experimente online!
⎕CY'dfns'
c o p y no NDR biblioteca⊣
descartar o resultado disso em favor de…⎕
console de prompt para[year,month]
númerosdays
[c] dias [n] uma vez 1899/12/31 do 0 ° desse mês(⍳31)+
Adicione o oi ntegers 1 ... 31 a essed←
armazenar emd
(para d números ay)7|
divisão restante ao dividir por 7 (dia da semana com domingo sendo 0 devido a uma boa época)⎕=
console imediato para o número do dia da semana e obtenha uma máscara igual aos números do dia da semanad/⍨
filtrod
com essa máscara⎕⊃
console de prompt para ne use isso para escolher na lista de números de diasdate
[c] carimbo de data e hora [n] (possui zeros à direita por horas, minutos, segundos, milissegundos)Clique em [c] para obter o código e em [n] para fazer anotações.
fonte
JavaScript (ES6),
4948 bytesToma parâmetros como
f([year, month], day, number)
. O mês e o dia da semana (começando no domingo) são indexados a zero. Edit: Salvo 1 byte graças a @Shaggy.fonte
0
em JS.TSQL, 106 bytes
Resultado:
Experimente
fonte
Kotlin ,
13184 bytes47 bytes graças ao código e comentário do ASCII-only.
Entrada: year, monthNumber, weekdayNumber, weekNumber
Todos os números inteiros de 1 a máximo em uma única linha. O número do dia da semana é domingo de 1 a sábado de 7. O programa principal faz o ano perder 1900 para a classe Date e o mês e o dia da semana são alterados para começar com zero em vez de um antes de chamar a lambda. Você pode inserir seus argumentos na caixa de texto de entrada para tentar suas próprias datas.
Saída: uma instância da classe Date. O programa principal exibe o resultado como: Sat Mar 09 00:00:00 UTC de 2019.
Existe uma versão expandida com comentários explicando o código para aqueles que desejam aprender mais.
Experimente online!
fonte