Kiedy SE upadnie?

13

SE zostanie wyłączony / odczytany tylko dzisiaj 2017-05-04 o 00:00 UTC do 00:20 UTC.

Twoim wyzwaniem jest podanie prawdziwej wartości, jeśli SE jest w dół / tylko do odczytu, i wartości fałszowania, jeśli SE nie jest. Możesz nie mieć żadnych danych wejściowych i musisz użyć wbudowanych funkcji daty, aby ustalić, czy SE jest wyłączone / tylko do odczytu (w rzeczywistości nie pyta o api SE!) Przykład danych wyjściowych:

12:34 UTC 03 May 2017 -> false

00:00 UTC 04 May 2017 -> true

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

To nieokreślone zachowanie, ponieważ jest zbyt daleko po upływie czasu. Żeby było jasne, możesz założyć, że Twój program będzie uruchamiany od UTC 8:00dzisiaj (5/3/17) do UTC 1:00jutro (5/4/17).

00:21 UTC 04 May 2017 -> false

00:20 UTC 04 May 2017 -> true

00:10 UTC 04 May 2017 -> true

Zauważ, że dozwolone są wszelkie wartości prawdy lub fałszu, nie tylko truei false. Musisz być dokładny do najbliższej sekundy i nie zmieniać zegara systemowego! Możesz założyć, że twój program jest uruchamiany na komputerze w +0 UTCstrefie czasowej.

programmer5000
źródło
8
sudo time <insert time here> && echo true
Okx,
8
Sugeruję aktualizację przypadków testowych, aby używały uniwersalnego formatu daty zamiast amerykańskiego.
Kudłaty
12
Krok 1, uruchom armię botów do DDoS SE, Krok 2, zwróć „1”
2023861
9
Po pierwsze, jako menedżer SO SRE chcę powiedzieć, że uwielbiam to pytanie. Dobra robota! Chcę jednak przypomnieć ludziom, że witryna nie będzie trudna ... tylko w trybie tylko do odczytu. Powiedziawszy to, wybiorę odpowiedź na to pytanie, aby pomóc mi ustalić, kiedy rozpocząć procedurę.
TomOnTime
3
Oznaczałoby to, że twoja własna odpowiedź jest nieprawidłowa, nie? Podobnie wiele innych odpowiedzi; ani twoja oryginalna wersja, ani bieżące przypadki testowe nie wspominają sekund.
Dennis

Odpowiedzi:

15

05AB1E , 32 26 11 9 8 bajtów

žažb«21‹

Wyjaśnienie:

ža          Is the current hour &
  žb        current minute
     «      concatenated
        ‹   less than
      21    twenty one?

Wypróbuj online!

Okx
źródło
16

JavaScript (ES6), 26 24 23 22 21 bajtów

Zaoszczędź 3 bajty dzięki Shaggy i 1 bajt dzięki Luke .

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

Sprawdza, czy czas upływający w bieżącym dniu jest krótszy niż 1200000 ms (1200 sekund lub 20 minut). Przyjmuje, że czas przestoju to 20 minut, a nie 21, co wydaje się mieć miejsce w połączonym poście. 00:20UTCjest wyłączną górną granicą.

Tylko ASCII
źródło
Zaoszczędź 2 bajty, używając new Datezamiast new Date().
Kudłaty
<2aby zapisać kolejny bajt.
Kudłaty
1
Nie potrzebujesz +; /automatycznie konwertuje new Datena Number.
Łukasz
Czy potrzebna jest deklaracja funkcji (_ =>)? JavaScript może działać globalnie.
Brilliand
@Brilliand Tak, w przeciwnym razie potrzebny byłby wynik, najkrótsza, alertktóra jest znacznie dłuższa
tylko ASCII
9

Python 2 , 41 39 bajtów

Zaoszczędzono 2 bajty dzięki Erikowi Outgolfer

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

Wypróbuj online!

Używa tego samego algorytmu, co moje odpowiedzi JS i Charcoal.

Tylko ASCII
źródło
Czy /72<1różni się od <72?
xnor
@xnor whoops przepraszam, skopiowałem to źle, naprawione teraz
tylko ASCII
Nie, mam na myśli, że myślę, że print time.time()/1200<72byłby to krótszy sposób na wyrażenie tego samego.
xnor
@ xnor Jestem pewien, że działa tylko pierwszego dnia epoki
tylko ASCII
Ups, miałem na myśli %1200/72<1-> %1200<72. Twoje TIO prowadzi do %1200/72<1wersji - czy to pomyłka?
xnor
7

Galaretka , 9 bajtów

6ŒT|0Ḍ<21

Wymaga TZustawienia na UTC, co ma miejsce w przypadku TIO.

Wypróbuj online!

Jak to działa

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.
Dennis
źródło
(Wszyscy byli) Outgolfed by Dennis! Dobra robota!
programator5000
1
Nie wszyscy ...
Dennis
Jeśli przestój 00:21byłby najpóźniej , mógłbym zaoszczędzić bajt ...
Dennis
4

zsh, 38 37 bajtów:

date +%H\ %M|read h m;((h==0&&m<21))
Thor
źródło
4

bash, 40 bajtów:

read h m< <(date +%H\ %M);((h==0&&m<21))
Thor
źródło
3

JS (ES6), 52 50 49 bajtów

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

Dlaczego Datetak długo Po prostu mija minuty 00:00i wraca, truejeśli mają <21, i falseinaczej.

programmer5000
źródło
Zaoszczędź 2 bajty, używając new Datezamiast new Date().
Kudłaty
2
-1 to nie sprawdza daty
tylko ASCII
@ ASCII - tylko pytanie mówi, że nie trzeba.
programator5000
Zapisz kolejny bajt za pomocą y=>(x=new Date).getUTCMinutes()<21&&!x.getUTCHours().
Kudłaty
1
Zaoszczędź kolejne 6 bajtów, używając czasu lokalnego zamiast UTC - pytanie mówi, że możesz założyć, że czas lokalny to UTC.
Brilliand
3

APL (Dyalog), 14 bajtów

∧/1 20>2↑3↓⎕TS

∧/ czy to wszystko prawda (I redukcja), że

1 20> liczby te są większe niż

2↑ pierwsze dwa elementy

3↓⎕TS obecna T ime S TAMP z trzech elementów spadła

Adám
źródło
Jaka jest postać ?
programator5000
@ programmer5000 (Quad) to przedrostek nazw systemowych w APL. To jest podobno być pusty prostokąt.
Adám
3

Węgiel , 25 bajtów

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

Drukuje -za prawdę, nic za fałsz.

Wyjaśnienie

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

Wypróbuj online!

Tylko ASCII
źródło
Co ⟦⟧tu robi? Potrzebujesz dosłownie listy lub listy strzałek?
Erik the Outgolfer
Tak, lista jest wymagana tutaj, ale teraz, gdy się nad nią zastanawiam, powinienem ustawić ją jako opcjonalną
tylko ASCII
A więc to lista argumentów? Tak, powinieneś ustawić ją jako opcjonalną, domyślnie wywołując funkcję bez argumentów.
Erik the Outgolfer
@EriktheOutgolfer Done
tylko ASCII
3

Alice , 17 bajtów

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

Wypróbuj online!

Zakłada się, że będzie działał na komputerze, którego strefa czasowa jest ustawiona na UTC (jak serwer TIO).

Wyjaśnienie

W trybie zwykłym adres IP odbija się po przekątnej w górę iw dół przez program. W trybie kardynalnym IP owija się wokół krawędzi, jak większość innych fungeoidów.

/   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.
Martin Ender
źródło
3

MATL , 10 bajtów

Dzięki Dennis za kilka poprawek

Z'1\480*7<

Wypróbuj online!

Wyjaśnienie

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. 
Luis Mendo
źródło
Czy powinno to być l72raczej 171w twoim wyjaśnieniu?
Dennis
@Dennis Tak, dzięki za złapanie tego!
Luis Mendo
To wciąż 72vs 71. Również nie będzie to powrót 0w 00:20?
Dennis
@Dennis Tak, to wróci 0o 00:20, ale wróci 1o 00:20minus ułamek sekundy (podane przez epsilon maszyny dla doubleczasów typów danych 86400). Wyzwanie mówi „musisz być dokładny z dokładnością do najbliższej minuty”, więc rozumiem, że jest do zaakceptowania
Luis Mendo
Prawdopodobnie o to chodziło w poście na Mother Meta, ale wyzwanie 00:20 -> truestanowi test. Pozostawił komentarz do pytania.
Dennis
3

Python 3 (NON-REPL) + czas, 81 77 bajtów

-4 bajty dzięki Bahromowi

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

Naiwne podejście, polegające na zamianie bieżącej daty na ciąg znaków i analizowanie jej postaci.

Pan Xcoder
źródło
Można zapisać całą masę bajtów przy użyciu innego formatu ciąg, a jeśli używasz powłoki, nie trzeba funkcję drukowania: import time;e=str(time.strftime('%H:%M'));e[:2]=='00'and int(e[2:])<21. Można to chyba jeszcze pograć w golfa.
Bahrom
(całkiem nowy golfa i zasad), ale w powłoce Wygląda to również do wyjścia poprawne wyniki: import time;time.localtime();_.tm_hour==0 and _.tm_min<21. I tak nie
pokonamy
Ok, nie mogę teraz edytować, może później
Mr. Xcoder
2

Bash , 55 53 51 50 bajtów

-1 bajt od komentarza @ robbie0630.

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

Wypróbuj online!

Zaletą tego rozwiązania jest to, że działa ono na dowolną datę (dlatego powróci 1tylko na okres zdefiniowany w wyzwaniu, ponieważ wykorzystuje czas epoki).

DimP
źródło
2
Zgolić bajt zastępując $(...)z`...`
Robbie
1

Swift + Foundation, 178 bajtów

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)

Dość krótki jak na szybkie standardy. Sprawdź to!

Tak jak w mojej odpowiedzi w Pythonie, po prostu zamieniłem prąd Datena ciąg znaków i przeanalizowałem jego cyfry, w zależności od tego, które wydrukowałem bool.

Pan Xcoder
źródło
1

R, 65 bajtów

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

Sprawdza, czy godzina == 0 i minuta <21.

BLT
źródło
1

PostgreSQL, 43 znaki

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

Tylko dlatego, że wolę SQL do obliczeń daty / godziny.

Przykładowy przebieg:

bash-4.3$ psql -c "select now()between'170503'and'170503 0:20'"
 ?column? 
----------
 f
(1 row)
człowiek w pracy
źródło