Herausforderung
Schreiben Sie ein Programm, das einen Benutzer je nach Tageszeit (GMT) begrüßt.
Ausgabe
Eine Zeichenfolge (gedruckt oder zurückgegeben) gemäß diesen Regeln:
- Wenn die Zeit von 06:00 bis 11:59 Uhr ist, muss die Begrüßung "Guten Morgen" sein.
- Wenn die Zeit von 12:00 bis 17:59 Uhr ist, muss die Begrüßung "Guten Tag" sein.
- Wenn die Zeit zwischen 18:00 und 19:59 Uhr ist, muss die Begrüßung "Guten Abend" sein.
- Wenn die Zeit zwischen 20:00 und 05:59 Uhr liegt, muss die Begrüßung "Zzz" sein.
Klarstellungen
- Es gibt keine Eingabe
- Die Zeiten und Grüße müssen genau wie gezeigt sein
- Die Zeitzone ist +0 GMT
Beispiele
Time: 14:45 -> Good afternoon
Time: 05:59 -> Zzz
Time: 9:23 -> Good morning
Time: 18:00 -> Good evening
%GREETING_TIME
Variable hat kein "Zzz", sondern wechselt nur um Mitternacht von "Abend" zu "Morgen".Antworten:
JavaScript (ES6), 87 Byte
Wie TFeld bemerkte , war meine ursprüngliche Formel überkompliziert. Wir können einfach tun:
Probieren Sie es online aus!
Oder testen Sie diese Version , die die Stunde als Parameter benötigt.
JavaScript (ES6), 90 Byte
Probieren Sie es online aus!
Oder testen Sie diese Version , die die Stunde als Parameter benötigt.
Formel
Angesichts der aktuellen Stunde finden wir den passenden Begrüßungsindex mit:ih ich
Eine gute Sache an dieser Formel ist, dass nach der Konvertierung in JS keine Klammern erforderlich sind:
Tabelle
quelle
Python 2 ,
120106102 BytesProbieren Sie es online aus!
Hier testbar: Probieren Sie es online aus!
Ähnlich wie Arnauld's Antwort , aber etwas anders:
Gerettet:
quelle
/3600%24%20/6
.R,
979593 BytesUnter Verwendung der oben in R.
Erläuterung:
Beispiel
Beachten Sie, dass diese Codezeile ohne Hinzufügen von 1 kurze 10 Elemente enthält
Durch Hinzufügen von 1 wird sichergestellt, dass das erhaltene Ergebnis größer als 0 ist
quelle
T-SQL, 153 Bytes
Probieren Sie die SQL-Geige aus
Erläuterung:
quelle
Perl 5 , 77 Bytes
Probieren Sie es online aus!
quelle
Excel, 97 Bytes
Beginnen Sie mit der Liste der Fälle
Verwenden Sie dann einfach ein Range-basiertes
Vlookup
(Standard, wenn Sie das 4. Argument weglassen) mit einem Array von Werten:Ich habe damit experimentiert
MOD(HOUR(NOW())+18,24
, die Stunde um 6 zurück zu verschieben und die Fälle um 1 zu reduzieren, aber das ergab 99 Bytes. :(quelle
05AB1E , 36 Bytes
Probieren Sie es online aus!
quelle
Powershell,
8272 BytesPort of TFelds Antwort
quelle
Common Lisp , 103 Bytes
Ungolfed
Common Lisp ignoriert meistens Leerzeichen, solange es eindeutig bestimmen kann, wo jeder Unterausdruck endet, so dass beim Golfen hier nur Leerzeichen entfernt werden. Common Lisp bietet Funktionen auch die Möglichkeit, mehrere Werte zurückzugeben, wobei alle bis auf den ersten verworfen werden, wenn der Aufrufer die Rückgabewerte 2nd / 3rd / etc nicht explizit angefordert hat. Dies ermöglicht es Funktionen, Hilfsdaten zurückzugeben, wie die
floor
Funktion eine Bodenteilung durchführt, aber als sekundärer Rückgabewert den Rest zurückgibt. Dies ermöglicht es Funktionen auch, den Aufwand zu vermeiden, ihre Rückgabewerte in eine Datenstruktur packen zu müssen, wenn der Aufrufer sie wahrscheinlich sofort wieder zerstören wird.(get-decoded-time)
(wirklich selbst eine Abkürzung für(decode-universal-time (get-universal-time))
) gibt die meisten Werte von nahezu jeder Standardfunktion in Common Lisp ... 9 zurück, um genau zu sein. Der 3. Rückgabewert ((nth-value 2 ...)
) ist die aktuelle Stunde in 24 Stunden. Dann wird einfach der richtige Index in die Liste der Antworten berechnet und an übergebennth
. Ich mussfloor
hier verwenden, da CL einen richtigen Bruch zurückgeben würde, wenn ich/
für die Division verwenden würde.Probieren Sie es online aus!
quelle
Stapel, 178 Bytes
Verwendet die Formel von @ TFeld. Die vom Gebietsschema abhängige Version ist nur 128 Byte groß:
quelle
C # (.NET Core) , 177 Byte
Probieren Sie es online aus!
quelle
Japt , 52 Bytes
Probieren Sie es online aus!
quelle
C # (Visual C # Interactive Compiler) , 91 Byte
Probieren Sie es online aus!
Verwendet Utc Now, um die UTC-Zeit abzurufen.
Wenn es eine Funktion anstelle eines vollständigen Programms sein kann:
C # (Visual C # Interactive Compiler) , 88 Byte
Probieren Sie es online aus!
Test mit allen Stunden (Code schamlos von Arnauld gestohlen)
quelle
DateTime.UtcNow
, um die richtige Zeitzone zu erhalten.;
) entfernen !05AB1E ,
4542 Bytes(h*7%20%7)//2
portiert von @ Arnauld's JavaScript (ES6) Antwort .Probieren Sie es online aus oder überprüfen Sie alle Stunden .
Ursprüngliche 45-Byte-Antwort:
Probieren Sie es online aus oder überprüfen Sie alle Stunden .
Erläuterung:
Lesen Sie die Erklärung hier, um zu verstehen, warum
”‚¿”
"gut" ist.'•´
ist "Morgen";'¯â
ist "Nachmittag"; und'žÖ
ist "Abend".quelle
Noether, 106 Bytes
Probieren Sie es online aus!
Der Befehl
2D
gibt den Stundenanteil der aktuellen Uhrzeit zurück und der Rest ist eine Ladung von if-Anweisungen.quelle
Haskell, 174 Bytes
quelle
C (gcc) , 127 Bytes
Der einzige wirklich hinterhältige Trick besteht darin, die Stunden zu
unsigned int
zwingen, damit ich die Nachtwerte auf> 14 zwingen kann. Da diestruct tm
Struktur nur Ganzzahlen enthält, kann ich so tun, als wäre es ein Array, von dem übergeben wirdgmtime_r
.Probieren Sie es online aus!
quelle
(char*[]){"morning","afternoon","evening"}
statts
J, 65 Bytes
Ein weiterer Hafen von TFelds Antwort.
3{6!:0''
Ruft die Stunde, die Index 3 des aktuellen Zeitvektors ist, vom eingebauten ab6!:0''
<.6%~20|
ist der Boden von ((Stunde Mod 20) geteilt durch 6){~
für ein 4x14-Zeichen-Array, das die Begrüßungen enthält.,
) die ZeichenfolgeGood
auf die Wortemorning
,afternoon
undevening
die Aufteilung auf Leerzeichen sind durch die J „Worte“ tokenizer (;:
). Technisch gesehen dient es zum Tokenisieren von J-Sätzen, aber da J bloße Wörter hat, wird es auf Leerzeichen aufgeteilt.quelle