Quando o SE será desativado?

13

SE será desativado / somente leitura hoje 2017-05-04 às 00:00 UTC até 00:20 UTC.

Seu desafio é gerar um valor verdadeiro se o SE estiver em baixa / somente leitura e um valor falso se o SE não estiver. Você pode não ter nenhuma entrada e deve usar data incorporada para determinar se o SE está desativado / somente leitura (não é possível consultar a API do SE!) Exemplo de saída:

12:34 UTC 03 May 2017 -> false

00:00 UTC 04 May 2017 -> true

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

Esse é um comportamento indefinido, porque é muito longe depois da janela do tempo. Para ficar claro, você pode supor que seu programa será executado 8:00hoje, de UTC (3/17/17) para UTC, 1:00amanhã (4/17/17).

00:21 UTC 04 May 2017 -> false

00:20 UTC 04 May 2017 -> true

00:10 UTC 04 May 2017 -> true

Observe que quaisquer valores verdadeiros ou falsos são permitidos, não apenas truee false. Você deve ter precisão no segundo mais próximo e não pode alterar o relógio do sistema! Você pode assumir que seu programa está sendo executado em uma máquina no +0 UTCfuso horário.

programmer5000
fonte
8
sudo time <insert time here> && echo true
Okx
8
Eu sugiro atualizar os casos de teste para usar um formato de data universal em vez de americano.
Shaggy
12
Etapa 1, ative o exército de bot para DDoS SE, Etapa 2, retorne "1"
user2023861
9
Primeiro, como gerente do SO SRE, quero dizer que adoro essa pergunta. Bom trabalho! No entanto, quero lembrar às pessoas que o site não ficará duro ... apenas no modo somente leitura. Dito isto, selecionarei a resposta a esta pergunta para me ajudar a determinar quando iniciar o procedimento.
TomOnTime 3/17/17
3
Isso significaria que sua própria resposta é inválida, não? O mesmo aconteceria com muitas outras respostas; nem sua revisão original nem os casos de teste atuais mencionam segundos.
Dennis

Respostas:

15

05AB1E , 32 26 11 9 8 bytes

žažb«21‹

Explicação:

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

Experimente online!

Okx
fonte
16

JavaScript (ES6), 26 24 23 22 21 bytes

Economizou 3 bytes graças a Shaggy e 1 byte graças a Luke .

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

Verifica se o tempo passado no dia atual é menor que 1200000ms (1200s ou 20min). Supõe que o tempo de inatividade seja de 20 minutos a 21, o que parece ser o caso na postagem vinculada. 00:20UTCé o limite superior exclusivo.

Somente ASCII
fonte
Salve 2 bytes usando em new Datevez de new Date().
Shaggy
<2para salvar outro byte.
Shaggy
1
Você não precisa do +; /converte automaticamente new Datepara a Number.
Luke
A declaração da função (_ =>) é necessária? JavaScript pode ser executado globalmente.
Brilliand
@Brilliand Sim, caso contrário, a saída seria necessário, o menor ser alerto que é muito mais longo
ASCII-only
9

Python 2 , 41 39 bytes

Economizou 2 bytes graças a Erik the Outgolfer

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

Experimente online!

Usa o mesmo algoritmo que minhas respostas JS e Charcoal.

Somente ASCII
fonte
É /72<1diferente de <72?
Xnor
@xnor whoops desculpe copiado errado, corrigido agora
ASCII-only
Não, quero dizer que acho print time.time()/1200<72que seria uma maneira mais curta de expressar a mesma coisa.
xnor
@xnor Tenho certeza de que só funciona no primeiro dia da época
ASCII-only
Opa, eu quis dizer %1200/72<1-> %1200<72. Seu TIO está vinculado à %1200/72<1versão - isso é um erro?
Xnor
7

Geléia , 9 bytes

6ŒT|0Ḍ<21

Requer TZque seja definido comoUTC , que é o caso do TIO.

Experimente online!

Como funciona

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
fonte
(Todo mundo estava) Outgolfed by Dennis! Bom trabalho!
Programmer5000
Se o tempo de inatividade mais recente 'til 00:21, eu poderia salvar um byte ...
Dennis
4

zsh, 38 bytes 37:

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

bash, 40 bytes:

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

JS (ES6), 52 50 49 bytes

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

Por que há Datetanto tempo? Apenas obtém os minutos passados 00:00e retorna truese tiverem menos de 21 anos false.

programmer5000
fonte
Salve 2 bytes usando em new Datevez de new Date().
Shaggy
2
-1 isto não verifica a data
somente ASCII
@ ASCII-apenas a pergunta diz que não precisa.
Programmer5000
Salve outro byte com y=>(x=new Date).getUTCMinutes()<21&&!x.getUTCHours().
Shaggy
1
Salve outros 6 bytes usando a hora local em vez do UTC - a pergunta diz que você pode assumir que a hora local é UTC.
Brilliand
3

APL (Dyalog), 14 bytes

∧/1 20>2↑3↓⎕TS

∧/ é verdade (e redução) que

1 20> esses números são maiores que

2↑ os dois primeiros elementos de

3↓⎕TS o atual T ime S tampe com três elementos descartados

Adão
fonte
Qual personagem é ?
Programmer5000
@ programmer5000 (Quad) é um prefixo para nomes de sistemas no APL. Ele é suposto ser um retângulo vazio.
Adám
3

Carvão , 25 bytes

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

Imprime -por verdade, nada por falsidade.

Explicação

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

Experimente online!

Somente ASCII
fonte
O que ⟦⟧faz aqui? Você precisa de uma lista ou lista de setas literal?
Erik the Outgolfer
Sim, é necessária uma lista aqui, mas agora que penso nisso, devo torná-la opcional
apenas ASCII
Ah, então é uma lista de argumentos? Sim, você deve torná-lo opcional, chamando a função sem argumentos por padrão.
Erik the Outgolfer
@EriktheOutgolfer Done
somente ASCII
3

Alice , 17 bytes

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

Experimente online!

Supõe que seja executado em uma máquina cujo fuso horário esteja definido como UTC (como o servidor TIO).

Explicação

Enquanto no modo Ordinal, o IP salta diagonalmente para cima e para baixo no programa. Enquanto no modo Cardinal, o IP envolve as bordas como a maioria dos outros 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.
Martin Ender
fonte
3

MATL , 10 bytes

Agradecimentos a Dennis por várias correções

Z'1\480*7<

Experimente online!

Explicação

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
fonte
Isso deveria estar l72mais do que 171na sua explicação?
Dennis
@ Dennis Sim, obrigado por capturar isso!
Luis Mendo
Ainda é 72contra 71. Também não voltaria 0a isso 00:20?
Dennis19
@ Dennis Sim, este voltaria 0a 00:20, mas voltaria 1em 00:20menos de uma pequena fração de segundo (dado pelo epsilon máquina para doublevezes tipo de dados 86400). O desafio diz "você deve ser preciso o mais próximo possível", então eu entendo que é aceitável
Luis Mendo
Provavelmente foi isso que o post na Mother Meta quis dizer, mas o desafio tem 00:20 -> truecomo caso de teste. Deixou um comentário sobre a pergunta.
Dennis
3

Python 3 (NÃO REPL) + tempo, 81 77 bytes

-4 bytes graças a Bahrom

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

Uma abordagem ingênua, transformando a data atual em string e analisando seus caracteres.

Mr. Xcoder
fonte
Você pode salvar um monte de bytes usando uma seqüência de formato diferente, e se você estiver usando o shell, você não precisa a função de impressão: import time;e=str(time.strftime('%H:%M'));e[:2]=='00'and int(e[2:])<21. Provavelmente isso também pode ser jogado ainda mais.
Bahrom
(muito novo para jogar golfe e as regras), mas no shell isso também parece saída os resultados corretos: import time;time.localtime();_.tm_hour==0 and _.tm_min<21. De qualquer forma, não estamos derrotando apenas o ASCII lol
Bahrom
Ok, eu não posso editar agora, talvez mais tarde
Mr. Xcoder
2

Bash , 55 53 51 50 bytes

-1 byte do comentário de @ robbie0630.

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

Experimente online!

A vantagem desta solução é que ela funciona para qualquer data (portanto, retornará 1apenas pelo período definido no desafio, pois utiliza o tempo da época).

DimP
fonte
2
Barbeie um byte substituindo $(...)por`...`
robbie 4/17
1

Swift + Foundation, 178 bytes

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)

Muito curto para os padrões rápidos. Confira!

Como na minha resposta em Python, eu basicamente converti a corrente Dateem uma string e analisei seus dígitos, dependendo do que imprimi o bool.

Mr. Xcoder
fonte
1

R, 65 bytes

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

Verifica se a hora == 0 e o minuto <21.

BLT
fonte
1

PostgreSQL, 43 caracteres

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

Só porque eu prefiro SQL para cálculos de data / hora.

Exemplo de execução:

bash-4.3$ psql -c "select now()between'170503'and'170503 0:20'"
 ?column? 
----------
 f
(1 row)
homem a trabalhar
fonte