Quem não gosta de relaxar em uma manhã de domingo no verão com uma cerveja gelada e TV ou no inverno jogando badminton ou jogando com amigos?
Eu sempre acho que saber quantos dias você precisa relaxar por mês mantém você bem informado e ajuda a planejar o que você quer fazer. Seja na frente do seu PC e resolvendo um problema de código-golfe ou saindo para jogar futebol.
Então, me ajudar a escrever um programa ou função que toma como entrada 2 inteiros positivos, Y
e M
e emite o número de domingos, nesse ano ( Y
) e mês (M
) (de acordo com o calendário gregoriano), seguido da data de cada domingo.
Além disso, lembre-se de que o código mais curto vence.
Restrições de entrada
1000 <= Y <= 9999
1 <= M <= 12
Resultado
Esses casos de teste terão saída e terão as datas de cada domingo daquele mês naquele ano no formato DD-MM-YYYY
.
Casos de teste de amostra
Caso de teste 1
Entrada de amostra
2017 1
Saída de amostra
5
01-01-2017
08-01-2017
15-01-2017
22-01-2017
29-01-2017
Caso de teste 2
Entrada de amostra
2018 2
Saída de amostra
4
04-02-2018
11-02-2018
18-02-2018
25-02-2018
Caso de teste 3
Entrada de amostra
2016 11
Saída de amostra
4
06-11-2016
13-11-2016
20-11-2016
27-11-2016
Date()
objeto, e qualquer formato de saída, incluindo[4, [<dateobj>, <dateobj>, <dateobj>, <dateobj>]]
(onde<dateobj>
é um objeto de data real e[]
é uma matriz real)./
vez de-
? Ou pode ser mês, depois dia e ano?Respostas:
MATL ,
46454235 bytesEntrada é uma matriz do formulário
[2017 1]
. O formato de saída é29/01/2017
.Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Python 2 ,
150.148,145 bytesExperimente online!
-3 bytes, tornando as coisas mais pitônicas (usando zip e filtro!)
fonte
JavaScript (ES6), 107 bytes
Editar: a adição de uma contagem explícita custa 15 bytes. A formatação da saída custaria pelo menos outros 33 bytes, dependendo da rigidez do formato de saída.
fonte
outputs the number of Sundays in that particular year and month
; parece que atualmente não gera o número de domingos.<input type='date'>
.PowerShell , 91 bytes
Experimente online!
(Nota especial - isso depende das configurações de local e cultura. Como o TIO está sendo executado como
en-us
, funciona corretamente como está. Este código pode precisar ser alterado para diferentes locais.)Leva a entrada como dois inteiros
$y
e$m
. Faz um loop de1
para31
, obtendo um novodatetime
objeto para cada data possível (por meio doGet-Date
cmdlet). Lança erros no STDERR (ignorado por padrão nos desafios de código-golfe) por meses com menos de 31 dias, mas isso não afeta a saída. Pegamos cada um dessesdatetime
objetos e usamos umWhere-Object
(|?{...}
) neles, com a cláusula de!$_.dayofweek
. A propriedade.dayofweek
é um número de0
a6
, com0
convenientemente correspondente aSunday
, portanto, isso!
é verdade, o que economiza alguns bytes em comparação com uma verificação de igualdade como-eq0
.Os domingos são então reunidos em parênteses e armazenados em
$a
. Em seguida, pegamos o.count
mesmo e ele é colocado no pipeline. Em seguida, percorremos$a
e usamos o-f
operador ormat para construir o formato de saída correto. Observe que isso não gera zeros à esquerda por dias ou meses. Essas seqüências de datas também são deixadas no pipeline e um implícitoWrite-Output
na conclusão do programa as imprime com separadores de nova linha.NB - se o formato de saída fosse mais flexível, poderíamos simplesmente sair
$a
do pipeline e não precisarmos fazer um loop. Isso definirá osdatetime
objetos como o formato de data longa, incluindo informações de hora, mas nos reduzirá a 69 bytes , que (atualmente) seriam vencidos apenas pelo Mathematica e MATL.fonte
Oitava, 72 bytes
nweekdate
retorna o número da data correspondente àN
-ésima ocorrência de um determinado dia da semana no mês / ano especificado. Usamos a matriz1:6
no lugar deN
para obter todas as ocorrências em um mês. Se houver menos queN
ocorrências desse dia da semana em um mês, o número da data resultante será0
. Por esse motivo, selecionamos apenas as datas válidas(x>1)
e as convertemos em strings usandodatestr
.Para contar o número de domingos, contamos o número de números diferentes de zero (
nnz
) no resultado.Em seguida, agrupamos a coisa inteira
cellfun
para exibir cada valor.fonte
Ruby,
140132129118 bytesfonte
Excel - 103 caracteres
Coloque o ano na célula
A1
e o mês na célulaA2
.A contagem está na célula
D1
e os domingos nas célulasD2:D6
.Supõe que
D2:D6
estão formatados DD-MM-AAAA.fonte
Mathematica,
8268 bytesFunção anônima. Produz uma lista do número de dias, seguida por uma lista dos domingos como
DateObject
s. Acontece que no Mathematica, o 0º dia de um mês é interpretado como o último dia do mês anterior.fonte
C #, 183 bytes
Método anônimo que retorna uma matriz de cadeias de caracteres, contendo primeiro o número de domingos e depois todos os domingos no formato especificado. Se houver apenas 4 domingos em um mês, a última sequência será nula.
Programa completo com método não destruído e casos de teste:
fonte
REXX, 168 bytes
fonte
1217
?Bash + bsdmainutils, 94 bytes
Usa o comando
cal
que imprime um calendário e é instalado por padrão em vários UNIX / LINUX / BSD (infelizmente não no TIO).Para tentar salvar para
file
,chmod +x file
e prazo./file 2017 9
Salva na matriz os dois primeiros bytes de saída de calibração anexados à string "MM-AAAA", passados como segundo e primeiro parâmetros (as alterações serão alteradas se o código do idioma não iniciar semanas aos domingos).
O próximo eco da matriz é subtraído por um (primeiro elemento é a palavra que representa domingo) e a matriz sem o primeiro elemet, um por linha
fmt -1
fonte
SAS, 182 bytes
fonte
T-SQL,
316311 bytesNão sei se é uma resposta válida, pois gera o número de domingos após as datas
Experimente aqui
ungolfed:
fonte
PHP,
127 118 112107 bytesrecebe entrada de argumentos de linha de comando; executar
-r
ou testá-lo online .demolir
fonte
Excel VBA, 190 bytes
fonte