Desafío
Escriba un programa que salude a un usuario según la hora del día (GMT) que sea.
Salida
Una cadena (impresa o devuelta) de acuerdo con estas reglas:
- Si el horario es de 06:00 a 11:59 el saludo debe ser "Buenos días"
- Si son las 12:00 a las 17:59, el saludo debe ser "Buenas tardes"
- Si el horario es de 18:00 a 19:59 el saludo debe ser "Buenas tardes"
- Si el horario es de 20:00 a 05:59, el saludo debe ser "Zzz"
Aclaraciones
- No hay entrada
- Los horarios y saludos deben ser exactamente como se muestran
- La zona horaria es +0 GMT
Ejemplos
Time: 14:45 -> Good afternoon
Time: 05:59 -> Zzz
Time: 9:23 -> Good morning
Time: 18:00 -> Good evening
%GREETING_TIME
variable no tiene "Zzz", simplemente cambia de "tarde" a "mañana" a medianoche.Respuestas:
JavaScript (ES6), 87 bytes
Como notó TFeld , mi fórmula original era demasiado complicada. Solo podemos hacer:
Pruébalo en línea!
O pruebe esta versión que toma la hora como parámetro.
JavaScript (ES6), 90 bytes
Pruébalo en línea!
O pruebe esta versión que toma la hora como parámetro.
Fórmula
Dada la hora actual , encontramos el índice de saludo apropiado i con:h i
Lo bueno de esta fórmula es que no requiere ningún paréntesis una vez convertido a JS:
Mesa
fuente
Python 2 ,
120106102 bytesPruébalo en línea!
Verificable aquí: ¡ Pruébelo en línea!
Similar a la respuesta de Arnauld , pero ligeramente diferente:
Salvado:
fuente
/3600%24%20/6
.R,
979593 BytesUsando los métodos encontrados anteriormente en R
Explicación:
Ejemplo
Observe cómo esta línea de código, sin agregar 1, tiene 10 elementos cortos
Agregar 1 asegura que el resultado obtenido sea mayor que 0
fuente
T-SQL, 153 bytes
Prueba el violín de SQL
Explicación:
fuente
Perl 5 , 77 bytes
Pruébalo en línea!
fuente
Excel, 97 bytes
Comience con la lista de casos
Luego, use un rango basado en
Vlookup
(predeterminado si omite el 4to argumento) con una matriz de valores:Experimenté con el uso
MOD(HOUR(NOW())+18,24
de retroceder la hora en 6 y reducir los casos en 1, pero eso resultó en 99 bytes. :(fuente
05AB1E , 36 bytes
Pruébalo en línea!
fuente
Powershell,
8272 bytesLa respuesta del puerto de TFeld
fuente
Lisp común , 103 bytes
Sin golf
Common Lisp generalmente ignora los espacios en blanco siempre que pueda determinar inequívocamente dónde termina cada sub-expresión, por lo que gran parte del golf aquí solo está eliminando espacios en blanco. Common Lisp también brinda la capacidad de que las funciones devuelvan múltiples valores, con todos menos el primero descartado si la persona que llama no ha solicitado explícitamente los valores de retorno 2º / 3º / etc. Esto permite que las funciones devuelvan datos auxiliares, como la
floor
función realiza la división del piso, pero como un valor de retorno secundario devuelve el resto. Esto también permite que las funciones eviten la sobrecarga de tener que empaquetar sus valores de retorno en una estructura de datos si es probable que la persona que llama lo desestructura inmediatamente.(get-decoded-time)
(Realmente una abreviatura para(decode-universal-time (get-universal-time))
) devuelve la mayoría de los valores de casi cualquier función estándar en lisp común ... 9, para ser exactos. El tercer valor de retorno ((nth-value 2 ...)
) es la hora actual en 24 horas. Entonces solo se calcula el índice adecuado en la lista de respuestas y se lo pasanth
. Tengo que usarfloor
aquí ya que CL devolvería una fracción adecuada si lo usara/
para la división.Pruébalo en línea!
fuente
Lote, 178 bytes
Utiliza la fórmula de @ TFeld. La versión dependiente de la configuración regional tiene solo 128 bytes:
fuente
C # (.NET Core) , 177 bytes
Pruébalo en línea!
fuente
Japt , 52 bytes
Pruébalo en línea!
fuente
C # (compilador interactivo de Visual C #) , 91 bytes
Pruébalo en línea!
Utiliza Utc Now para obtener la hora UTC.
Si puede ser una función en lugar de un programa completo:
C # (compilador interactivo de Visual C #) , 88 bytes
Pruébalo en línea!
Prueba con todas las horas (código robado descaradamente de Arnauld)
fuente
DateTime.UtcNow
para obtener la zona horaria correcta.;
)!05AB1E ,
4542 bytes(h*7%20%7)//2
portado de la respuesta de JavaScript de @ Arnauld (ES6) .Pruébelo en línea o verifique todas las horas .
Respuesta original de 45 bytes:
Pruébelo en línea o verifique todas las horas .
Explicación:
Vea la explicación aquí para entender por qué
”‚¿”
es "bueno";'•´
es "mañana";'¯â
es "tarde"; y'žÖ
es "tarde".fuente
Noether, 106 bytes
Pruébalo en línea!
El comando
2D
devuelve la parte de hora de la hora actual y el resto es una carga de sentencias if.fuente
Haskell, 174 bytes
fuente
C (gcc) , 127 bytes
El único truco realmente astuto es forzar las horas
unsigned int
para que pueda forzar los valores nocturnos a> 14. Como lastruct tm
estructura solo tiene números enteros, puedo fingir que es una matriz que se está pasandogmtime_r
.Pruébalo en línea!
fuente
(char*[]){"morning","afternoon","evening"}
lugar des
J, 65 bytes
Otro puerto de la respuesta de TFeld.
3{6!:0''
obtiene la hora, que es el índice 3 del vector de tiempo actual, del valor incorporado6!:0''
<.6%~20|
es el piso de ((mod de hora 20) dividido por 6){~
en una matriz de caracteres de 4x14 que contiene los saludos.,
) la cadenaGood
a las palabrasmorning
,afternoon
yevening
que se dividen en los espacios en blanco por el J "palabras" tokenizer (;:
). Técnicamente es para tokenizar las oraciones J, pero dado que J tiene palabras simples, termina dividiéndose en espacios en blanco.fuente