Ho un collega al lavoro che lavora da casa ogni martedì e giovedì. Verso le 8:00 ci invia un messaggio con il seguente testo:
Ciao oggi lavoro da casa
Per sollevarlo dall'onere di farlo ogni giorno che sta a casa, vorremmo automatizzare questo compito per lui.
La sfida
Scrivi nel minor numero di byte possibile un codice che:
- Riceve l'ora corrente: il codice può ricevere valori per l'anno corrente, il mese (1-12), il giorno del mese (1-31), l'ora (0-23) e i minuti (0-59) e il giorno della settimana (puoi scegliere se questo numero inizia da 0 o 1 e se 0/1 significa domenica, lunedì o qualsiasi altro giorno); in alternativa, è possibile ricevere una struttura come
Date
,DateTime
,Calendar
o di qualsiasi altra struttura tempo-correlata, se la lingua lo permette.yyyyMMddHHmm
Se lo desideri, puoi anche ricevere una stringa con la data oppure due stringhe separate per data e ora, quindi un numero intero con il giorno della settimana. Sentiti libero. - Restituisce due valori di verità e falsità coerenti , indicando se il messaggio deve essere inviato o meno alla chat di lavoro.
Regole
- Si presume che questo pezzo di codice sia invocato periodicamente. La periodicità esatta è comunque irrilevante.
- Il valore veritiero deve essere restituito se il giorno della settimana è martedì o giovedì e l'orario è 8:00 AM con un margine di errore di 10 minuti (dalle 7:50 alle 8:10 incluso).
- Il valore di verità deve essere inviato solo se è la prima volta che il codice viene invocato tra quelle ore per il giorno specificato. Non vogliamo che il bot invii lo stesso messaggio più volte di seguito. Il modo in cui gestisci questa restrizione dipenderà interamente da te.
- Il tuo codice potrebbe essere un programma indipendente eseguito ripetutamente o potrebbe far parte di un codice più grande che è sempre in esecuzione. La tua scelta.
- Si può presumere che non ci saranno riavvii tra le esecuzioni del codice.
- Puoi presumere che la data sia sempre corretta.
- Sono incoraggiate le spiegazioni sul codice e in particolare sul metodo utilizzato per raggiungere la persistenza.
Esempi
(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)
Questo è code-golf , quindi può vincere il codice più breve per ogni lingua!
YYYYmmdd
e anche l'ora HHss
?