¿Cuándo estará SE abajo?


13

SE estará inactivo / lectura solo hoy 04/05/2017 a las 00:00 UTC hasta las 00:20 UTC.

Su desafío es generar un valor verdadero si SE está inactivo / solo lectura y un valor falso si SE no lo está. Es posible que no tenga ninguna entrada, y debe usar fechas incorporadas para determinar si SE está inactivo / solo lectura (¡no se consulta la API de SE!) Salida de ejemplo:

12:34 UTC 03 May 2017 -> false

00:00 UTC 04 May 2017 -> true

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

Ese es un comportamiento indefinido, porque está demasiado lejos después de la ventana del tiempo. Para ser claros, puede asumir que su programa se ejecutará desde UTC 8:00hoy (5/3/17) hasta UTC 1:00mañana (5/4/17).

00:21 UTC 04 May 2017 -> false

00:20 UTC 04 May 2017 -> true

00:10 UTC 04 May 2017 -> true

Tenga en cuenta que cualquier valor verdadero o falso está permitido, no solo truey false. ¡Debe ser preciso al segundo más cercano y no cambiar el reloj del sistema! Puede suponer que su programa se está ejecutando en una máquina en la +0 UTCzona horaria.


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

8
Sugeriría actualizar los casos de prueba para usar un formato de fecha universal en lugar de estadounidense.
Shaggy

12
Paso # 1, activa el ejército de bots para DDoS SE, Paso # 2, devuelve "1"
user2023861

99
Primero, como SO SRE Manager, quiero decir que me encanta esta pregunta. ¡Buen trabajo! Sin embargo, quiero recordarle a la gente que el sitio no será difícil ... solo en modo de solo lectura. Dicho esto, seleccionaré la respuesta a esta pregunta para ayudarme a determinar cuándo comenzar el procedimiento.
TomOnTime

3
Eso significaría que su propia respuesta es inválida, ¿no? También lo harían muchas otras respuestas; ni su revisión original ni los casos de prueba actuales mencionan segundos.
Dennis

Respuestas:


15

05AB1E , 32 26 11 9 8 bytes

žažb«21‹

Explicación:

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

Pruébalo en línea!


16

JavaScript (ES6), 26 24 23 22 21 bytes

Guardado 3 bytes gracias a Shaggy y 1 byte gracias a Luke .

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

Comprueba si el tiempo transcurrido en el día actual es inferior a 1200000 ms (1200 segundos o 20 minutos). Se supone que el tiempo de inactividad es de 20 minutos, no de 21, lo que parece ser el caso en la publicación vinculada.00:20UTCEs el límite superior exclusivo.


Ahorre 2 bytes usando en new Datelugar de new Date().
Shaggy

<2para guardar otro byte.
Shaggy

1
No necesitas el +; /se convierte automáticamente new Datea a Number.
Lucas

¿Se necesita la declaración de función (_ =>)? JavaScript puede ejecutarse globalmente.
Brilliand

@Brilliand Sí, de lo contrario se necesitaría salida, el más corto alertes mucho más largo
solo ASCII

9

Python 2 , 41 39 bytes

Guardado 2 bytes gracias a Erik the Outgolfer

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

Pruébalo en línea!

Utiliza el mismo algoritmo que mis respuestas JS y Charcoal.


Es /72<1diferente de <72?
xnor

@xnor whoops lo siento, lo copié mal, lo arreglé ahora
solo ASCII

No, quiero decir que creo print time.time()/1200<72que sería una forma más corta de expresar lo mismo.
xnor

@xnor Estoy bastante seguro de que solo funciona el primer día de la época
solo ASCII

Vaya, quise decir %1200/72<1-> %1200<72. Su TIO se vincula a la %1200/72<1versión, ¿es eso un error?
xnor

7

Jalea , 9 bytes

6ŒT|0Ḍ<21

Requiere TZestar configurado en UTC, que es el caso de TIO.

Pruébalo en línea!

Cómo 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.

(Todos estaban) ¡Fuera superado por Dennis! ¡Buen trabajo!
programmer5000


Si el tiempo de inactividad es más reciente 00:21, podría guardar un byte ...
Dennis


4

zsh, 38 37 bytes:

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

4

bash, 40 bytes:

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

3

JS (ES6), 52 50 49 bytes

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

¿Por qué es Datetan largo? Solo pasa los minutos 00:00y regresa truesi son <21, y de lo falsecontrario.


Ahorre 2 bytes usando en new Datelugar de new Date().
Shaggy

2
-1 esto no verifica la fecha
solo ASCII

@ ASCII: solo la pregunta dice que no es necesario.
programmer5000

Guardar otro byte con y=>(x=new Date).getUTCMinutes()<21&&!x.getUTCHours().
Shaggy

1
Ahorre otros 6 bytes utilizando la hora local en lugar de UTC: la pregunta dice que puede suponer que la hora local es UTC.
Brilliand

3

APL (Dyalog), 14 bytes

∧/1 20>2↑3↓⎕TS

∧/ ¿Es todo cierto (Y reducción) que

1 20> estos números son mayores que

2↑ los dos primeros elementos de

3↓⎕TS el actual tampón T ime S con tres elementos caídos


¿Qué personaje es el ?
programmer5000

@ programmer5000 (Quad) es un prefijo para nombres de sistema en APL. Que se supone que es un rectángulo vacío.
Adám

3

Carbón de leña , 25 bytes

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

Huellas dactilares - para la verdad, nada para la falsedad.

Explicación

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

Pruébalo en línea!


¿Qué hace el ⟦⟧aquí? ¿Necesita una lista o lista de flechas literal?
Erik the Outgolfer

Sí, se requiere una lista aquí, pero ahora que lo pienso, debería hacerlo opcional
solo ASCII

¿Entonces es una lista de argumentos? Sí, deberías hacerlo opcional, llamando a la función sin argumentos por defecto.
Erik the Outgolfer

@EriktheOutgolfer Hecho
ASCII solo

3

Alice , 17 bytes

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

Pruébalo en línea!

Se supone que se ejecuta en una máquina cuya zona horaria está configurada en UTC (como el servidor TIO).

Explicación

Mientras está en modo Ordinal, la IP rebota diagonalmente hacia arriba y hacia abajo a través del programa. Mientras está en modo Cardinal, la IP se ajusta alrededor de los bordes como la mayoría de los otros 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 bytes

Gracias a Dennis por varias correcciones.

Z'1\480*7<

Pruébalo en línea!

Explicación

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. 

¿Debería ser eso l72más que 171en tu explicación?
Dennis

@ Dennis Sí, ¡gracias por atrapar eso!
Luis Mendo

Es todavía 72vs 71. Además, ¿no volvería esto 0a las 00:20?
Dennis

@ Dennis Sí, esto volvería 0a las 00:20, pero volvería 1a 00:20menos una pequeña fracción de segundo (dada por la máquina épsilon para doubletiempos de tipo de datos 86400). El desafío dice "debes ser exacto al minuto más cercano", así que entiendo que es aceptable
Luis Mendo

Eso es probablemente lo que significaba la publicación en Mother Meta, pero el desafío tiene 00:20 -> truecomo caso de prueba. Dejó un comentario sobre la pregunta.
Dennis

3

Python 3 (NO REPL) + tiempo, 81 77 bytes

-4 bytes gracias a Bahrom

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

Un enfoque ingenuo, que convierte la fecha actual en cadena y analiza sus caracteres.


Usted puede ahorrar un montón de bytes mediante el uso de una cadena de formato diferente, y si está utilizando la cáscara, que no necesita la función de impresión: import time;e=str(time.strftime('%H:%M'));e[:2]=='00'and int(e[2:])<21. Probablemente esto también se pueda jugar aún más.
Bahrom

(bastante nuevo en el golf y las reglas), pero en la cáscara esto también parece dar salida a los resultados correctos: import time;time.localtime();_.tm_hour==0 and _.tm_min<21. No estamos venciendo a ASCII, solo de todos modos jajaja
Bahrom

Ok, no puedo editar ahora, tal vez más tarde
Sr. Xcoder


2

Bash , 55 53 51 50 bytes

-1 byte del comentario de @ robbie0630.

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

Pruébalo en línea!

La ventaja de esta solución es que funciona para cualquier fecha (por lo que regresará 1solo durante el período definido en el desafío, ya que utiliza el tiempo de época).


2
Afeitarse un byte reemplazándolo $(...)con`...`
robbie

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)

Bastante corto para los estándares rápidos. ¡Echale un vistazo!

Al igual que en mi respuesta de Python, básicamente convertí la corriente Dateen una cadena y analicé sus dígitos, dependiendo de cuál imprimiera el bool.


1

R, 65 bytes

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

Comprueba si la hora == 0 y el minuto <21.


1

PostgreSQL, 43 caracteres

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

Solo porque prefiero SQL para los cálculos de fecha / hora.

Ejecución de muestra:

bash-4.3$ psql -c "select now()between'170503'and'170503 0:20'"
 ?column? 
----------
 f
(1 row)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.