Eu tenho um colega de trabalho que trabalha em casa toda terça e quinta-feira. Por volta das 8:00 da manhã, ele nos envia uma mensagem com o seguinte texto:
Olá hoje eu estou trabalhando em casa
Para aliviá-lo do fardo de fazer isso todos os dias em que ele fica em casa, gostaríamos de automatizar essa tarefa para ele.
O desafio
Escreva no mínimo de bytes possível um pedaço de código que:
- Recebe a hora atual: seu código pode receber valores para o ano atual, mês (1-12), dia do mês (1-31), hora (0-23) e minuto (0-59) e dia da semana (você pode escolher se esse número começa em 0 ou 1 e se 0/1 significa domingo, segunda ou qualquer outro dia); Alternativamente, você pode receber uma estrutura como
Date
,DateTime
,Calendar
ou qualquer outra estrutura relacionados com o tempo, se a sua linguagem permite isso. Você também pode receber uma sequência com a data,yyyyMMddHHmm
se desejar, ou duas sequências separadas para data e hora e, em seguida, um número inteiro com o dia da semana. Fique à vontade. - Devoluções dois consistentes truthy e Falsey valores, que indicam se a mensagem deve ser enviada para o bate-papo funcionar ou não.
Regras
- Presume-se que esse trecho de código seja chamado periodicamente. A periodicidade exata é irrelevante, no entanto.
- O valor de verdade deve ser retornado se o dia da semana for terça ou quinta-feira e o horário for 8:00, com uma margem de erro de 10 minutos (inclusive das 7:50 às 8:10).
- O valor de verdade deve ser enviado apenas se for a primeira vez que o código for chamado entre essas horas no dia especificado. Não queremos que o bot envie a mesma mensagem várias vezes seguidas. A maneira como você gerencia essa restrição depende inteiramente de você.
- Seu código pode ser um programa independente executado repetidamente ou pode fazer parte de um código maior que está sempre em execução. Sua escolha.
- Você pode assumir que não haverá reinicializações entre as execuções do código.
- Você pode assumir que a data sempre estará correta.
- Explicações sobre seu código e especificamente sobre o método usado para obter persistência são incentivadas.
Exemplos
(Week starts on Monday: 1, the following invokations will be made in succession)
2018,08,27,08,00,1 = falsey (not Tuesday or Thursday)
2018,08,28,07,45,2 = falsey (out of hours)
2018,08,28,07,55,2 = truthy (first time invoked this day at the proper hours)
2018,08,28,08,05,2 = falsey (second time invoked this day at the proper hours)
2018,08,28,08,15,2 = falsey (out of hours)
2018,08,29,08,00,3 = falsey (not Tuesday or Thursday)
2018,08,29,18,00,3 = falsey (not Tuesday or Thursday)
2018,08,30,07,49,4 = falsey (out of hours)
2018,08,30,07,50,4 = truthy (first time invoked this day at the proper hours)
2018,08,30,07,50,4 = falsey (second time invoked this day at the proper hours)
2018,08,30,08,10,4 = falsey (third time invoked this day at the proper hours)
2018,08,30,08,11,4 = falsey (out of hours)
2018,09,04,08,10,2 = truthy (first time invoked this day at the proper hours)
Este é o código-golfe , portanto, pode ganhar o código mais curto para cada idioma!
YYYYmmdd
e a hora também HHss
?