Коли SE знизиться?


13

SE буде закрито / прочитано лише сьогодні 2017-05-04 о 00:00 UTC до 00:20 UTC.

Ваша задача полягає в тому, щоб вивести значення "truthy", якщо SE вниз / тільки для читання, і помилкове значення, якщо SE - ні. У вас може не бути жодного вводу, і ви повинні використовувати вбудовані дати, щоб визначити, чи є SE вниз / тільки для читання (фактично не запитуючи SE api!) Приклад виведення:

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на a Number.
Лука

Чи потрібна декларація функції (_ =>)? JavaScript може працювати в усьому світі.
Brilliand

@Brilliand Так, інакше буде потрібен вихід, найкоротший час alertякого набагато довший
лише ASCII

9

Python 2 , 41 39 байт

Збережено 2 байти завдяки Еріку Переверхувача

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

Спробуйте в Інтернеті!

Використовується той же алгоритм, що й у моїх відповідях JS та деревного вугілля.


Чи /72<1відрізняється від <72?
xnor

@xnor whoops вибачте скопіював це неправильно, виправлено зараз
лише ASCII

Ні, я маю на увазі, що я думаю, що print time.time()/1200<72це був би коротший спосіб висловити те саме.
xnor

@xnor Я впевнений, що працює лише в перший день епохи, хоча
лише ASCII

На жаль, я мав на увазі %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.

(Всі були) Перевершив Денніс! Хороша робота!
програміст5000


Якщо останній час простою - до 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 - лише в запитанні сказано, що цього не доведеться.
програміст5000

Збережіть ще один байт за допомогою 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 поточний T ime S з трьома елементами впав


Який персонаж ?
програміст5000

@ programmer5000 (Quad) - це префікс для імен системи в APL. Це як повинно бути порожнім прямокутником.
Адам

3

Вугілля деревне , 25 байт

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

Принти -для трикути, нічого для фальшивих.

Пояснення

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

Спробуйте в Інтернеті!


Що ⟦⟧тут робить? Вам потрібен список або список стрілок буквально?
Ерік Аутгольфер

Так, тут потрібен список, але тепер, коли я думаю про нього, я мушу зробити його необов’язковим
лише для ASCII

О, значить, це список аргументів? Так, ви повинні зробити його необов'язковим, називаючи функцію без аргументів за замовчуванням.
Ерік Аутгольфер

@EriktheOutgolfer Готово
лише ASCII

3

Аліса , 17 байт

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

Спробуйте в Інтернеті!

Передбачається запуск на машині, часовий пояс якого встановлений на UTC (наприклад, на сервері TIO).

Пояснення

Перебуваючи в звичайному режимі, IP відскакує по діагоналі вгору та вниз через програму. Перебуваючи в кардинальному режимі, IP обертається по краях, як і більшість інших Fungeoids.

/   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у вашому поясненні?
Денніс

@Dennis Так, спасибі за те, що це зробив!
Луїс Мендо

Це все-таки 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

Bash , 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.