Desafio
Escreva um programa que cumprimente um usuário, dependendo da hora do dia (GMT).
Resultado
Uma sequência (impressa ou retornada) de acordo com estas regras:
- Se o horário é das 06:00 às 11:59, a saudação deve ser "Bom dia"
- Se o horário for das 12:00 às 17:59, a saudação deve ser "Boa tarde"
- Se o horário for das 18:00 às 19:59, a saudação deve ser "Boa noite"
- Se o horário for das 20:00 às 05:59, a saudação deverá ser "Zzz"
Esclarecimentos
- Não há entrada
- Os horários e cumprimentos devem ser exatamente como mostrados
- O fuso horário é +0 GMT
Exemplos
Time: 14:45 -> Good afternoon
Time: 05:59 -> Zzz
Time: 9:23 -> Good morning
Time: 18:00 -> Good evening
%GREETING_TIME
variável não possui "Zzz", apenas alterna de "noite" para "manhã" à meia-noite.Respostas:
JavaScript (ES6), 87 bytes
Como observado por TFeld , minha fórmula original era complicada demais . Podemos apenas fazer:
Experimente online!
Ou teste esta versão que leva a hora como parâmetro.
JavaScript (ES6), 90 bytes
Experimente online!
Ou teste esta versão que leva a hora como parâmetro.
Fórmula
Dada a hora atual , encontramos o índice de saudação apropriado i com:h Eu
Uma coisa boa dessa fórmula é que ela não requer parênteses depois de convertida para JS:
Mesa
fonte
Python 2 ,
120106102 bytesExperimente online!
Testável aqui: Experimente online!
Semelhante à resposta de Arnauld , mas um pouco diferente:
Salvou:
fonte
/3600%24%20/6
.R,
979593 bytesUsando os métodos encontrados acima em R
Explicação:
Exemplo
Observe como essa linha de código, sem adicionar 1, é curta 10 elementos
A adição de 1 garante que o resultado obtido seja maior que 0
fonte
T-SQL, 153 bytes
Experimente o SQL Fiddle
Explicação:
fonte
Perl 5 , 77 bytes
Experimente online!
fonte
Excel, 97 bytes
Comece com a lista de casos
Em seguida, basta usar um intervalo
Vlookup
(padrão, se você omitir o 4º argumento) com uma matriz de valores:Eu experimentei usar
MOD(HOUR(NOW())+18,24
para mudar a hora de volta em 6 e reduzir os casos em 1, mas isso resultou em 99 bytes. :(fonte
05AB1E , 36 bytes
Experimente online!
fonte
Powershell,
8272 bytesPorto da resposta do TFeld
fonte
Lisp comum , 103 bytes
Ungolfed
O Lisp comum ignora principalmente os espaços em branco, desde que possa determinar inequivocamente onde cada subexpressão termina, grande parte do golfe aqui está apenas removendo os espaços em branco. O Lisp comum também fornece a capacidade das funções retornarem vários valores, com a exceção de todos os primeiros descartados, se o chamador não tiver solicitado explicitamente os valores de retorno 2º / 3º / etc. Isso permite que as funções retornem dados auxiliares, como a
floor
função executa a divisão do piso, mas como um valor de retorno secundário retorna o restante. Isso também permite que as funções evitem a sobrecarga de ter que empacotar seus valores de retorno em uma estrutura de dados se o chamador provavelmente a desestruturar imediatamente novamente.(get-decoded-time)
(realmente uma abreviação de(decode-universal-time (get-universal-time))
) retorna a maioria dos valores de praticamente qualquer função padrão em lisp comum ... 9, para ser exato. O terceiro valor de retorno ((nth-value 2 ...)
) é a hora atual em 24 horas. Depois, basta computar o índice adequado na lista de respostas e passar paranth
. Eu tenho que usarfloor
aqui como CL retornaria uma fração adequada se eu usasse/
para divisão.Experimente online!
fonte
Lote, 178 bytes
Usa a fórmula do @ TFeld. A versão dependente da localidade tem apenas 128 bytes:
fonte
C # (.NET Core) , 177 bytes
Experimente online!
fonte
Japonês , 52 bytes
Experimente online!
fonte
C # (compilador interativo do Visual C #) , 91 bytes
Experimente online!
Usa Utc Now para obter a hora UTC.
Se puder ser uma função em vez de um programa completo:
C # (compilador interativo do Visual C #) , 88 bytes
Experimente online!
Teste com todas as horas (código roubado descaradamente da Arnauld)
fonte
DateTime.UtcNow
para obter o fuso horário correto.;
caractere ponto-e-vírgula ( ) à direita !05AB1E ,
4542 bytes(h*7%20%7)//2
portado da resposta JavaScript de @ Arnauld (ES6) .Experimente online ou verifique todas as horas .
Resposta original de 45 bytes:
Experimente online ou verifique todas as horas .
Explicação:
Veja a explicação aqui para entender por que
”‚¿”
é "Bom";'•´
é "manhã";'¯â
é "tarde"; e'žÖ
é "tarde".fonte
Noether, 106 bytes
Experimente online!
O comando
2D
retorna a parte da hora da corrente, a hora e o restante é uma carga de instruções if.fonte
Haskell, 174 bytes
fonte
C (gcc) , 127 bytes
O único truque realmente furtivo é
unsigned int
forçar as horas para que eu possa forçar os valores noturnos a> 14. Como astruct tm
estrutura possui apenas números inteiros, posso fingir que é uma matriz que está sendo transmitidagmtime_r
.Experimente online!
fonte
(char*[]){"morning","afternoon","evening"}
vez des
J, 65 bytes
Outro porto da resposta do TFeld.
3{6!:0''
obtém a hora, que é o índice 3 do vetor de tempo atual, a partir do6!:0''
<.6%~20|
é o piso de ((hora mod 20) dividido por 6){~
em uma matriz de caracteres 4x14 que contém os cumprimentos.,
) a cordaGood
às palavrasmorning
,afternoon
eevening
que são divididos em espaços em branco pela J "palavras" tokenizer (;:
). Tecnicamente, é para tokenizar sentenças J, mas como J possui palavras simples, acaba se dividindo em espaços em branco.fonte