Когда SE выйдет из строя?


13

SE будет недоступен / только для чтения сегодня 2017-05-04 в 00:00 UTC до 00:20 UTC.

Ваша задача - вывести истинное значение, если SE не работает / только для чтения, и ложное значение, если SE нет. У вас может не быть никакого ввода, и вы должны использовать встроенные даты, чтобы определить, выключен ли SE / только для чтения (на самом деле не запрашивает API ap!) Пример вывода:

12:34 UTC 03 May 2017 -> false

00:00 UTC 04 May 2017 -> true

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

Это неопределенное поведение, потому что оно слишком далеко за окном времени. Чтобы было ясно, вы можете предположить, что ваша программа будет работать с UTC 8:00сегодня (5/3/17) до UTC 1:00завтра (5/4/17).

00:21 UTC 04 May 2017 -> false

00:20 UTC 04 May 2017 -> true

00:10 UTC 04 May 2017 -> true

Обратите внимание, что допускаются любые истинные или ложные значения, а не только trueи false. Вы должны быть с точностью до секунды, и не меняйте системные часы! Вы можете предположить, что ваша программа запускается на машине в +0 UTCчасовом поясе.


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

8
Я бы предложил обновить контрольные примеры, чтобы использовать универсальный формат даты, а не американский.
Лохматый

12
Шаг № 1, вызвать армию ботов в DDoS SE, Шаг № 2, вернуть «1»
user2023861

9
Во-первых, как менеджер SO SRE, я хочу сказать, что мне нравится этот вопрос. Хорошая работа! Тем не менее, я хочу напомнить людям, что сайт не будет сильно поврежден ... только в режиме только для чтения. Тем не менее, я буду выбирать ответ на этот вопрос, чтобы помочь мне определить, когда начать процедуру.
TomOnTime

3
Это означало бы, что ваш собственный ответ неверен, нет? Как и многие другие ответы; ни ваша первоначальная ревизия, ни текущие тестовые примеры не упоминают секунды.
Деннис

Ответы:



16

JavaScript (ES6), 26 24 23 22 21 байт

Сэкономили 3 байта благодаря Шегги и 1 байт благодаря Люку .

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

Проверяет, прошло ли время в текущем дне менее 1200000 мс (1200 с или 20 мин). Предполагается, что время простоя составляет 20 минут, а не 21, что, как представляется, имеет место в связанном посте. 00:20UTCэто исключительная верхняя граница.


Сохраните 2 байта, используя new Dateвместо new Date().
Лохматый

<2чтобы сохранить еще один байт.
Лохматый

1
Вам не нужно +; /автоматически преобразуется new Dateв Number.
Люк

Требуется ли объявление функции (_ =>)? JavaScript может работать глобально.
Brilliand

@Brilliand Да, иначе потребуется вывод, самое короткое из alertкоторых намного длиннее
только ASCII

9

Python 2 , 41 39 байт

Сохранено 2 байта благодаря Эрику Аутгольферу

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

Попробуйте онлайн!

Использует тот же алгоритм, что и мои ответы JS и Charcoal.


Отличается /72<1от <72?
xnor

@xnor whoops извините скопировал его неправильно, исправлено сейчас
только ASCII

Нет, я имею в виду, что я думаю, print time.time()/1200<72что это был бы более короткий способ выразить то же самое.
xnor

@xnor Я почти уверен, что это работает только в первый день эпохи
ASCII-only

Ой, я имел в виду %1200/72<1-> %1200<72. Ваш TIO ссылается на %1200/72<1версию - это ошибка?
xnor

7

Желе , 9 байт

6ŒT|0Ḍ<21

Требуется TZбыть установленным UTC, что имеет место для TIO.

Попробуйте онлайн!

Как это устроено

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.

(Все были) Превзойденный Деннис! Хорошая работа!
programmer5000


Если бы время простоя 00:21
Деннис




3

JS (ES6), 52 50 49 байтов

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

Почему Dateтак долго? Просто получает прошедшие минуты 00:00и возвращается, trueесли они <21, и в falseпротивном случае.


Сохраните 2 байта, используя new Dateвместо new Date().
Лохматый

2
-1 это не проверяет дату
только ASCII

@ ASCII-только вопрос говорит, что это не обязательно.
programmer5000

Сохраните еще один байт с помощью y=>(x=new Date).getUTCMinutes()<21&&!x.getUTCHours().
Лохматый

1
Сохраните еще 6 байтов, используя местное время вместо UTC - вопрос говорит, что вы можете предполагать, что местное время - UTC.
Brilliand

3

APL (Dyalog), 14 байтов

∧/1 20>2↑3↓⎕TS

∧/ это все правда (и сокращение), что

1 20> эти цифры больше чем

2↑ первые два элемента

3↓⎕TS ток Т IME S TAMP с тремя элементами упала


Какой персонаж ?
programmer5000

@ programmer5000 (Quad) - это префикс системных имен в APL. Это как должно быть пустым прямоугольником.
Адам

3

Древесный уголь , 25 байт

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

Отпечатки -для правды, ничего для фальши.

объяснение

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

Попробуйте онлайн!


Что ⟦⟧здесь делать? Вам нужен список или стрелка литерала?
Эрик Outgolfer

Да, здесь требуется список, но теперь, когда я думаю об этом, я должен сделать его необязательным
только ASCII

О, так это список аргументов? Да, вы должны сделать это необязательным, вызывая функцию без аргументов по умолчанию.
Эрик Outgolfer

@EriktheOutgolfer Готово
только ASCII

3

Алиса , 17 байт

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

Попробуйте онлайн!

Предполагается, что он будет запущен на машине с часовым поясом UTC (например, на сервере TIO).

объяснение

Находясь в обычном режиме, IP прыгает по диагонали вверх и вниз по программе. В режиме кардинала IP оборачивается по краям, как и большинство других фунгеоидов.

/   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 байт

Спасибо Деннису за несколько исправлений

Z'1\480*7<

Попробуйте онлайн!

объяснение

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. 

Должно ли это быть, l72а не 171в вашем объяснении?
Деннис

@ Денис Да, спасибо, что поймали это!
Луис Мендо

Это все еще 72против 71. Также не вернется ли это 0в 00:20?
Деннис

@Dennis Да, это вернулось бы 0в 00:20, но вернуло бы 1в 00:20минус небольшую долю секунды (предоставленной машиной epsilon для doubleвремени типа данных 86400). Задача гласит: «Вы должны быть точными до ближайшей минуты», поэтому я понимаю, что это приемлемо
Луис Мендо

Это, вероятно, то, что имел в виду пост о Матери Мете, но испытание имеет 00:20 -> trueв качестве контрольного примера. Оставил комментарий на вопрос.
Деннис

3

Python 3 (NON-REPL) + время, 81 77 байт

-4 байта благодаря Бахрому

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

Наивный подход, превращение текущей даты в строку и анализ ее символов.


Вы можете сохранить целую кучу байт, используя другой формат строку, и если вы используете оболочку, вы не нужны функции печати: import time;e=str(time.strftime('%H:%M'));e[:2]=='00'and int(e[2:])<21. Это может быть, возможно, еще дальше.
Бахром

(довольно новый для игры в гольф и правил) , но в оболочке это также , кажется, выводить правильные результаты: import time;time.localtime();_.tm_hour==0 and _.tm_min<21. Мы не бьем ASCII-только все равно лол
Бахрома

Хорошо, я не могу редактировать сейчас, может позже
Мистер Xcoder


2

Баш , 55 53 51 50 байтов

-1 байт из комментария @ robbie0630.

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

Попробуйте онлайн!

Преимущество этого решения в том, что оно работает на любую дату (поэтому будет возвращаться 1только в течение периода, определенного в запросе, поскольку оно использует время эпохи).


2
Сбрить байты путем замены $(...)с`...`
Robbie

1

Swift + Foundation, 178 байт

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)

Довольно короткий по быстрым меркам. Проверьте это!

Как и в моем ответе на Python, я в основном преобразовал ток Dateв строку и проанализировал ее цифры, в зависимости от того, какой выводил bool.


1

R 65 байт

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

Проверяет, если час == 0, а минута <21.


1

PostgreSQL, 43 символа

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

Просто потому, что я предпочитаю SQL для вычисления даты / времени.

Образец прогона:

bash-4.3$ psql -c "select now()between'170503'and'170503 0:20'"
 ?column? 
----------
 f
(1 row)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.