Quando scenderà SE?


13

SE sarà inattivo / letto solo oggi 2017-05-04 alle 00:00 UTC fino alle 00:20 UTC.

La tua sfida è produrre un valore di verità se SE è inattivo / di sola lettura e un valore di falsa se SE non lo è. Potresti non avere alcun input ed è necessario utilizzare i data incorporati per determinare se SE è inattivo / di sola lettura (in realtà non è in corso una query sull'ap SE!)

12:34 UTC 03 May 2017 -> false

00:00 UTC 04 May 2017 -> true

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

Questo è un comportamento indefinito, perché è troppo lontano dopo il lasso di tempo. Per essere chiari, puoi presumere che il tuo programma verrà eseguito da UTC 8:00oggi (03/05/17) a UTC 1:00domani (04/05/17).

00:21 UTC 04 May 2017 -> false

00:20 UTC 04 May 2017 -> true

00:10 UTC 04 May 2017 -> true

Si noti che qualsiasi valore di verità o falsità è consentito, non solo truee false. Devi essere preciso al secondo più vicino e non cambiare l'orologio di sistema! Si può presumere che il programma sia in esecuzione su una macchina nel +0 UTCfuso orario.


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

8
Suggerirei di aggiornare i casi di test per utilizzare un formato data universale anziché americano.
Shaggy,

12
Passaggio 1, attiva l'esercito di bot su DDoS SE, passaggio 2, restituisci "1"
user2023861

9
In primo luogo, come SO SRE Manager, voglio dire che adoro questa domanda. Buon lavoro! Tuttavia, voglio ricordare alle persone che il sito non sarà difficile ... solo in modalità di sola lettura. Detto questo, selezionerò in risposta a questa domanda per aiutarmi a determinare quando avviare la procedura.
TomOnTime

3
Ciò significherebbe che la tua risposta non è valida, no? Quindi molte altre risposte; né la revisione originale né i casi di test attuali menzionano secondi.
Dennis,

Risposte:


15

05AB1E , 32 26 11 9 8 byte

žažb«21‹

Spiegazione:

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

Provalo online!


16

JavaScript (ES6), 26 24 23 22 21 byte

Salvato 3 byte grazie a Shaggy e 1 byte grazie a Luke .

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

Verifica se il tempo trascorso nel giorno corrente è inferiore a 1200000ms (1200s o 20min). Suppone che i tempi di inattività siano di 20 minuti e non di 21, il che sembra essere il caso nel post collegato. 00:20UTCè il limite superiore esclusivo.


Salva 2 byte utilizzando new Dateinvece di new Date().
Shaggy,

<2per salvare un altro byte.
Shaggy,

1
Non hai bisogno del +; /si converte automaticamente new Datein a Number.
Luca,

È necessaria la dichiarazione di funzione (_ =>)? JavaScript può essere eseguito a livello globale.
Brilliand,

@Brilliand Sì, altrimenti sarebbe necessario un output, il più breve alertche è molto più lungo
solo ASCII

9

Python 2 , 41 39 byte

Salvato 2 byte grazie a Erik the Outgolfer

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

Provalo online!

Utilizza lo stesso algoritmo delle risposte JS e Charcoal.


È /72<1diverso da <72?
xnor

@xnor whoops sorry copiato male, risolto ora
solo ASCII

No, voglio dire che penso che print time.time()/1200<72sarebbe un modo più breve per esprimere la stessa cosa.
xnor

@xnor Sono abbastanza sicuro che funzioni solo il primo giorno dell'epoca
ASCII-solo

Oops, intendevo %1200/72<1-> %1200<72. Il tuo TIO si collega alla %1200/72<1versione: è un errore?
xnor

7

Gelatina , 9 byte

6ŒT|0Ḍ<21

Richiede TZdi essere impostato su UTC, come nel caso di TIO.

Provalo online!

Come funziona

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.

(Tutti lo erano) Superato da Dennis! Bel lavoro!
programmatore


Se il tempo di inattività non va fino a 00:21, potrei salvare un byte ...
Dennis,


4

zsh, 38 37 byte:

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

4

bash, 40 byte:

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

3

JS (ES6), 52 50 49 byte

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

Perché è Datecosì lungo? Passa solo i minuti passati 00:00e ritorna truese sono <21, e falsealtrimenti.


Salva 2 byte utilizzando new Dateinvece di new Date().
Shaggy,

2
-1 questo non controlla la data
solo ASCII

@ ASCII: solo la domanda dice che non è necessario.
programmatore

Salvare un altro byte con y=>(x=new Date).getUTCMinutes()<21&&!x.getUTCHours().
Shaggy,

1
Salvare altri 6 byte utilizzando l'ora locale anziché UTC: la domanda indica che l'ora locale è UTC.
Brilliand,

3

APL (Dyalog), 14 byte

∧/1 20>2↑3↓⎕TS

∧/ è tutto vero (E riduzione) quello

1 20> questi numeri sono maggiori di

2↑ i primi due elementi di

3↓⎕TS l'attuale T ime S tamp con tre elementi lasciati cadere


Che personaggio è ?
programmatore

@ programmer5000 (Quad) è un prefisso per i nomi di sistema in APL. Si è supposto per essere un rettangolo vuoto.
Adám,

3

Carbone , 25 byte

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

Stampe -per la verità, niente per la falsità.

Spiegazione

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

Provalo online!


Cosa fa ⟦⟧qui? Hai bisogno di un elenco o di una lista di frecce letterali?
Erik the Outgolfer,

Sì, qui è richiesto un elenco, ma ora che ci penso dovrei renderlo opzionale
ASCII-only

Oh, quindi è un elenco di argomenti? Sì, dovresti renderlo facoltativo, chiamando la funzione senza argomenti per impostazione predefinita.
Erik the Outgolfer,

@EriktheOutgolfer Done
ASCII-only

3

Alice , 17 byte

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

Provalo online!

Presuppone l'esecuzione su una macchina il cui fuso orario è impostato su UTC (come il server TIO).

Spiegazione

In modalità Ordinale, l'IP rimbalza diagonalmente su e giù attraverso il programma. In modalità Cardinale, l'IP si avvolge attorno ai bordi come la maggior parte degli altri Fungeoidi.

/   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 byte

Grazie a Dennis per diverse correzioni

Z'1\480*7<

Provalo online!

Spiegazione

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. 

Dovrebbe essere l72piuttosto che 171nella tua spiegazione?
Dennis,

@Dennis Sì, grazie per averlo colto!
Luis Mendo,

E 'ancora 72contro 71. Inoltre questo non ritornerebbe 0a 00:20?
Dennis,

@Dennis Sì, questo ritornerebbe 0a 00:20, ma ritornerebbe 1a 00:20meno una piccola frazione di secondo (dato dalla macchina epsilon per doublei tempi del tipo di dati 86400). La sfida dice "devi essere preciso al minuto più vicino", quindi capisco che è accettabile
Luis Mendo,

Questo è probabilmente ciò che significava il post su Mother Meta, ma la sfida ha 00:20 -> truecome banco di prova. Ha lasciato un commento sulla domanda.
Dennis,

3

Python 3 (NON REPL) + tempo, 81 77 byte

-4 byte grazie a Bahrom

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

Un approccio ingenuo, trasformando la data corrente in stringhe e analizzandone i caratteri.


È possibile salvare un intero gruppo di byte utilizzando una stringa di formato diverso, e se si sta utilizzando la shell, non è necessario la funzione di stampa: import time;e=str(time.strftime('%H:%M'));e[:2]=='00'and int(e[2:])<21. Probabilmente questo può essere ulteriormente golfato.
Bahrom,

(abbastanza nuovo per il golf e le regole), ma nel guscio questo sembra anche all'uscita i risultati corretti: import time;time.localtime();_.tm_hour==0 and _.tm_min<21. Non stiamo battendo comunque solo ASCII lol
Bahrom,

Ok, non posso modificare ora, forse più tardi
Mr. Xcoder


2

Bash , 55 53 51 50 byte

-1 byte dal commento di @ robbie0630.

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

Provalo online!

Il vantaggio di questa soluzione è che funziona per qualsiasi data (quindi tornerà 1solo per il periodo definito nella sfida, poiché utilizza il tempo dell'epoca).


2
Elimina un byte sostituendolo $(...)con`...`
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)

Abbastanza breve per gli standard rapidi. Controlla!

Come nella mia risposta di Python, ho praticamente convertito la corrente Datein una stringa e ne ho analizzato le cifre, a seconda della stampa del bool.


1

R, 65 byte

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

Verifica se l'ora == 0 e il minuto <21.


1

PostgreSQL, 43 caratteri

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

Solo perché preferisco SQL per i calcoli di data / ora.

Esecuzione di esempio:

bash-4.3$ psql -c "select now()between'170503'and'170503 0:20'"
 ?column? 
----------
 f
(1 row)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.