Wann wird SE ausfallen?


13

SE wird heute 2017-05-04 um 00:00 UTC bis 00:20 UTC down / read only sein .

Ihre Herausforderung besteht darin, einen Wahrheitswert auszugeben, wenn SE nicht aktiv / schreibgeschützt ist, und einen falschen Wert, wenn SE nicht aktiv ist. Möglicherweise haben Sie keine Eingabe, und Sie müssen das eingebaute Datum verwenden, um zu bestimmen, ob SE inaktiv / schreibgeschützt ist (keine tatsächliche Abfrage der SE-API!). Beispielausgabe:

12:34 UTC 03 May 2017 -> false

00:00 UTC 04 May 2017 -> true

00:20 UTC 20 May 2017 -> undefined, see below

Das ist undefiniertes Verhalten, weil es zu weit nach dem Zeitfenster ist. Um es klar 8:00auszudrücken , können Sie davon ausgehen, dass Ihr Programm heute (03.05.17) bis 1:00morgen (04.05.17) von UTC ausgeführt wird.

00:21 UTC 04 May 2017 -> false

00:20 UTC 04 May 2017 -> true

00:10 UTC 04 May 2017 -> true

Beachten Sie, dass alle wahrheitsgemäßen oder falschen Werte zulässig sind, nicht nur trueund false. Sie müssen auf die nächste Sekunde genau sein und dürfen die Systemuhr nicht ändern! Sie können davon ausgehen, dass Ihr Programm auf einem Computer in der +0 UTCZeitzone ausgeführt wird.


8
sudo time <insert time here> && echo true
Okx

8
Ich würde vorschlagen, die Testfälle zu aktualisieren, um ein universelles Datumsformat anstelle eines amerikanischen zu verwenden.
Shaggy

12
Schritt 1,
Botarmee

9
Zunächst möchte ich als SO SRE Manager sagen, dass ich diese Frage liebe. Gute Arbeit! Ich möchte die Leute jedoch daran erinnern, dass die Site nicht zu stark heruntergefahren wird ... nur im schreibgeschützten Modus. Trotzdem werde ich bei der Beantwortung dieser Frage auswählen, um herauszufinden, wann ich mit dem Verfahren beginnen soll.
TomOnTime

3
Das würde bedeuten, dass Ihre eigene Antwort ungültig ist, nein? So würden viele andere Antworten; Weder Ihre ursprüngliche Revision noch die aktuellen Testfälle erwähnen Sekunden.
Dennis

Antworten:



16

JavaScript (ES6), 26 24 23 22 21 Byte

3 Bytes dank Shaggy und 1 Byte dank Luke gespeichert .

_=>new Date/12e5%72<1

Überprüft, ob die am aktuellen Tag verstrichene Zeit weniger als 1200000 ms (1200s oder 20min) beträgt. Angenommen, die Ausfallzeit beträgt 20 Minuten und nicht 21 Minuten. Dies scheint im verknüpften Beitrag der Fall zu sein. 00:20UTCist die exklusive Obergrenze.


Sparen Sie 2 Bytes, indem Sie new Dateanstelle von verwenden new Date().
Shaggy

<2um ein weiteres Byte zu speichern.
Shaggy

1
Das brauchst du nicht +; /automatisch konvertiert new Datezu a Number.
Luke

Wird die Funktionsdeklaration (_ =>) benötigt? JavaScript kann global ausgeführt werden.
Brilliand

@Brilliand Ja, andernfalls wäre eine Ausgabe erforderlich, wobei die kürzeste alertviel länger ist
ASCII

9

Python 2 , 41 39 Bytes

Dank Erik the Outgolfer 2 Bytes gespart

import time
print time.time()/1200%72<1

Probieren Sie es online!

Verwendet den gleichen Algorithmus wie meine JS- und Charcoal-Antworten.


Ist /72<1anders <72?
xnor

@xnor whoops sorry kopiert es falsch, jetzt behoben
ASCII

Nein, ich meine, ich denke, es print time.time()/1200<72wäre ein kürzerer Weg, dasselbe auszudrücken.
Xnor

@xnor Ich bin mir ziemlich sicher, dass dies nur am ersten Tag der Epoche funktioniert
ASCII-only

Ups, ich meinte %1200/72<1-> %1200<72. Dein TIO verlinkt auf die %1200/72<1Version - ist das ein Fehler?
Xnor

7

Gelee , 9 Bytes

6ŒT|0Ḍ<21

Muss TZfestgelegt werden auf UTC, was bei TIO der Fall ist.

Probieren Sie es online!

Wie es funktioniert

6ŒT|0Ḍ<21  Main link. No arguments.

6ŒT        Get the current time as a string, in the format HH:MM.
   |0      Bitwise OR each character with 0. This casts the characters to int and
           maps the non-digit character : to 0.
     Ḍ     Undecimal; convert from base 10 to integer.
      <21  Compare the result with 21, so 00:00 to 00:20 return 1, all others
           return 0.

(Jeder war) Outgolfed von Dennis! Gut gemacht!
programmer5000


Wenn die Ausfallzeit bis spätestens ' 00:21könnte ich ein Byte speichern ...
Dennis


4

zsh, 38 37 bytes:

date +%H\ %M|read h m;((h==0&&m<21))

4

Bash, 40 Bytes:

read h m< <(date +%H\ %M);((h==0&&m<21))

3

JS (ES6), 52 50 49 Bytes

y=>(x=new Date).getUTCMinutes()<21&&!x.getUTCHours()

Warum ist Dateso lang? Liefert nur die Minuten 00:00und kehrt zurück, truewenn sie <21 sind, und falseansonsten.


Sparen Sie 2 Bytes, indem Sie new Dateanstelle von verwenden new Date().
Shaggy

2
-1 Hiermit wird das Datum nicht überprüft
Nur ASCII

@ ASCII-nur die Frage sagt, dass es nicht muss.
programmer5000

Speichern Sie ein weiteres Byte mit y=>(x=new Date).getUTCMinutes()<21&&!x.getUTCHours().
Shaggy

1
Speichern weitere 6 Bytes durch Ortszeit statt UTC mit - die Frage sagt , dass Sie lokale Zeit annehmen kann ist UTC.
Brilliand

3

APL (Dyalog), 14 Bytes

∧/1 20>2↑3↓⎕TS

∧/ Ist das alles wahr (UND Reduktion)?

1 20> Diese Zahlen sind größer als

2↑ die ersten beiden Elemente von

3↓⎕TS die aktuellen T ime S Stopfer mit drei Elementen getropft


Welcher Charakter ist der ?
programmer5000

@ programmer5000 (Quad) ist ein Präfix für Systemnamen in APL. Es wird angenommen , ein leeres Rechteck sein.
Adám

3

Holzkohle , 25 Bytes

‹﹪÷UPtime.time⟦⟧¹²⁰⁰¦⁷²¦¹

Drucke -für Wahres, nichts für Falsches.

Erläuterung

    UPtime.time⟦⟧          Python function time.time()
   ÷               ¹²⁰⁰      Divided by 1200
 ﹪                    ¦⁷²   Modulo 72
‹                         ¦¹ Less than 1

Probieren Sie es online!


Was macht der ⟦⟧hier? Benötigen Sie eine Liste oder ein Pfeillisten-Literal?
Erik der Outgolfer

Ja, hier ist eine Liste erforderlich, aber jetzt, wo ich darüber nachdenke, sollte ich sie optional machen
ASCII-

Oh, also ist es eine Liste von Argumenten? Ja, Sie sollten es optional machen und die Funktion standardmäßig ohne Argumente aufrufen.
Erik der Outgolfer

@EriktheOutgolfer Done
Nur ASCII

3

Alice , 17 Bytes

/o
\T@/4&;'-.C+n

Probieren Sie es online!

Vorausgesetzt, auf einem Computer ausgeführt zu werden, dessen Zeitzone auf UTC eingestellt ist (wie der TIO-Server).

Erläuterung

Im normalen Modus springt die IP diagonal durch das Programm auf und ab. Im Kardinal-Modus wird die IP wie bei den meisten anderen Fungeoids um die Ränder gewickelt.

/   Reflect to SE. Switch to Ordinal.
T   Push a string representing the current date and time, in the format:
    YYYY-MM-DDTHH:MM:SS.mmm±AA:BB
/   Reflect to E. Switch to Cardinal.
4&  Run the next command 4 times.
;   Discard four elements from the top of the stack. Since we're in Cardinal mode,
    this attempts to discard four integers. But the top stack value is a string so
    it gets implicitly converted to all the integers contained in the string. So
    year, month, day, hour, minute, seconds, milliseconds, timezone hour,
    timezone minute will be pushed separately. Then the last four of these
    will be discarded, so that we end up with the minute and the hour on
    top of the stack.
'  Push 21.
-   Subtract it from the minutes. Gives something negative for minutes 0 to 20.
.C  Compute the binomial coefficient n-choose-n. This gives 0 for negative
    results and 1 for non-negative ones. SE is down if both this value and
    the current hour are zero.
+   Add the two values. Iff they are both zero, we still get a zero.
n   Logical NOT of the value. Turns 0 into 1 and everything else into 0.
\   Reflect to NE. Switch to Ordinal.
o   Implicitly convert the result to a string and print it.
@   Terminate the program.

3

MATL , 10 Bytes

Vielen Dank an Dennis für einige Korrekturen

Z'1\480*7<

Probieren Sie es online!

Erläuterung

Z'    % Push current date and time as a float. Integer part is day, decimal part is time
1\    % Modulo 1. This gives the time, in units of one day
480*  % Multiply by 480
7<    % Less than 7? Note that 21 minutes / one day equals 7 / 480. Implicitly display. 

Sollte das l72eher sein als 171in deiner Erklärung?
Dennis

@Dennis Ja, danke, dass du das verstanden hast!
Luis Mendo

Es ist immer noch 72vs 71. Auch würde diese Rückkehr 0an 00:20?
Dennis

@ Dennis Ja, das würde zurückkehren 0zu 00:20, aber zurückkehren würde 1bei 00:20minus einen kleinen Bruchteil einer Sekunde (gegeben durch die Maschine epsilon für doubleDatentyp - mal 86400). Die Herausforderung besagt, dass "Sie auf die nächste Minute genau sein müssen", und ich verstehe, dass dies akzeptabel ist
Luis Mendo,

Das ist wahrscheinlich, was der Beitrag auf Mutter Meta bedeutete, aber die Herausforderung hat 00:20 -> trueals Testfall. Hat einen Kommentar zu der Frage hinterlassen.
Dennis

3

Python 3 (NON-REPL) + Zeit, 81 Bytes

-4 Bytes dank Bahrom

import time;e=str(time.strftime('%H:%M'));print(e[:2]=='00'and int(e[3:])<21)

Ein naiver Ansatz, bei dem das aktuelle Datum in Zeichenfolge umgewandelt und die Zeichen analysiert werden.


Sie können mit einem anderen Format - String, eine ganze Reihe von Bytes speichern und wenn Sie den Shell verwenden, müssen Sie die Druckfunktion nicht benötigen: import time;e=str(time.strftime('%H:%M'));e[:2]=='00'and int(e[2:])<21. Dies kann wahrscheinlich auch noch weiter golfen werden.
Bahrom

(ziemlich neu für Golf spielen und die Regeln) , aber in der Schale scheint dies auch für die Ausgabe der korrekten Ergebnisse: import time;time.localtime();_.tm_hour==0 and _.tm_min<21. Wir schlagen sowieso nicht nur ASCII lol
Bahrom

Ok, ich kann jetzt nicht bearbeiten, vielleicht später
Mr. Xcoder


2

Bash , 55 53 51 50 Bytes

-1 Byte aus dem Kommentar von @ robbie0630.

a=`date +%s`;echo $[1493856000<a&a<1493857200?1:0]

Probieren Sie es online!

Der Vorteil dieser Lösung besteht darin, dass sie für jedes Datum funktioniert (dh, sie wird 1nur für den in der Challenge definierten Zeitraum zurückgegeben, da die Epochenzeit verwendet wird).


2
Abrasieren ein Byte durch den Austausch $(...)mit`...`
robbie

1

Swift + Foundation, 178 Byte

import Foundation;var d=String(describing:Date());func g(_ s:Int)->String{return String(d[d.index(d.startIndex,offsetBy:s)])};print(g(11)+g(12)=="00" ?Int(g(14)+g(15))!<21:false)

Für schnelle Verhältnisse recht kurz. Hör zu!

Wie in meiner Python-Antwort habe ich im Grunde genommen den aktuellen Wert Datein einen String umgewandelt und dessen Ziffern analysiert, je nachdem, welchen Bool ich gedruckt habe.


1

R, 65 Bytes

library(lubridate)
x=Sys.time()
print(all(!hour(x)&minute(x)<21))

Prüft, ob die Stunde == 0 und die Minute <21 ist.


1

PostgreSQL, 43 Zeichen

select now()between'170503'and'170503 0:20'

Nur weil ich SQL für Datums- / Zeitberechnungen bevorzuge.

Probelauf:

bash-4.3$ psql -c "select now()between'170503'and'170503 0:20'"
 ?column? 
----------
 f
(1 row)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.