Quand est-ce que SE sera arrêté?


13

SE sera fermé / lu seulement aujourd'hui 2017-05-04 à 00:00 UTC jusqu'à 00:20 UTC.

Votre défi est de produire une valeur vraie si SE est en baisse / en lecture seule et une valeur fausse si SE ne l'est pas. Vous ne pouvez pas avoir d'entrée, et vous devez utiliser les commandes internes de date pour déterminer si SE est en panne / en lecture seule (sans interroger réellement l'api SE!) Exemple de sortie:

12:34 UTC 03 May 2017 -> false

00:00 UTC 04 May 2017 -> true

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

C'est un comportement indéfini, car il est trop loin après la fenêtre de temps. Pour être clair, vous pouvez supposer que votre programme sera exécuté de l'UTC 8:00aujourd'hui (5/3/17) à UTC 1:00demain (5/4/17).

00:21 UTC 04 May 2017 -> false

00:20 UTC 04 May 2017 -> true

00:10 UTC 04 May 2017 -> true

Notez que toutes les valeurs véridiques ou fausses sont autorisées, pas seulement trueet false. Vous devez être précis à la seconde près et ne pas changer l'horloge du système! Vous pouvez supposer que votre programme est exécuté sur une machine du +0 UTCfuseau horaire.


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

8
Je suggère de mettre à jour les cas de test pour utiliser un format de date universel plutôt qu'américain.
Shaggy

12
Étape # 1, déclenchez l'armée bot vers DDoS SE, Étape # 2, retournez "1"
user2023861

9
Tout d'abord, en tant que gestionnaire SO SRE, je tiens à dire que j'aime cette question. Bon travail! Cependant, je tiens à rappeler aux gens que le site ne sera pas difficile à arrêter ... juste en mode lecture seule. Cela dit, je sélectionnerai la réponse à cette question pour m'aider à déterminer quand commencer la procédure.
TomOnTime

3
Cela signifierait que votre propre réponse n'est pas valide, non? Il en serait de même pour beaucoup d'autres réponses; ni votre révision d'origine ni les cas de test actuels ne mentionnent les secondes.
Dennis

Réponses:


15

05AB1E , 32 26 11 9 8 octets

žažb«21‹

Explication:

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

Essayez-le en ligne!


16

JavaScript (ES6), 26 24 23 22 21 octets

Enregistré 3 octets grâce à Shaggy et 1 octet grâce à Luke .

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

Vérifie si le temps écoulé dans la journée en cours est inférieur à 1 200 000 ms (1 200 s ou 20 min). Suppose que le temps d'arrêt est de 20 minutes et non 21, ce qui semble être le cas dans le message lié. 00:20UTCest la limite supérieure exclusive.


Économisez 2 octets en utilisant new Dateau lieu de new Date().
Shaggy

<2pour enregistrer un autre octet.
Shaggy

1
Vous n'avez pas besoin de +; /convertit automatiquement new Dateen a Number.
Luke

La déclaration de fonction (_ =>) est-elle nécessaire? JavaScript peut fonctionner globalement.
Brilliand

@Brilliand Oui, sinon une sortie serait nécessaire, la plus courte étant alertbeaucoup plus longue
ASCII uniquement

9

Python 2 , 41 39 octets

Enregistré 2 octets grâce à Erik l'Outgolfer

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

Essayez-le en ligne!

Utilise le même algorithme que mes réponses JS et Charcoal.


Est /72<1différent de <72?
xnor

@xnor whoops désolé copié mal, corrigé maintenant
ASCII uniquement

Non, je veux dire que je pense que ce print time.time()/1200<72serait une façon plus courte d'exprimer la même chose.
xnor

@xnor Je suis sûr que cela ne fonctionne que le premier jour de l'époque
ASCII uniquement

Oups, je voulais dire %1200/72<1-> %1200<72. Votre TIO est lié à la %1200/72<1version - est-ce une erreur?
xnor

7

Gelée , 9 octets

6ŒT|0Ḍ<21

A besoin TZ d'être défini sur UTC, ce qui est le cas pour TIO.

Essayez-le en ligne!

Comment ça fonctionne

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.

(Tout le monde était) Dépassé par Dennis! Bon travail!
programmer5000


Si le temps d'arrêt est au plus tard 00:21, je pourrais économiser un octet ...
Dennis


4

zsh, 38 37 octets:

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

4

bash, 40 octets:

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

3

JS (ES6), 52 50 49 octets

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

Pourquoi est-ce Datesi long? Obtient juste les minutes passées 00:00et revient truesi elles sont <21, et falsesinon.


Économisez 2 octets en utilisant new Dateau lieu de new Date().
Shaggy

2
-1 cela ne vérifie pas la date
ASCII uniquement

@ ASCII - seule la question dit que ce n'est pas nécessaire.
programmer5000

Enregistrez un autre octet avec y=>(x=new Date).getUTCMinutes()<21&&!x.getUTCHours().
Shaggy

1
Économisez encore 6 octets en utilisant l'heure locale au lieu de UTC - la question dit que vous pouvez supposer que l'heure locale est UTC.
Brilliand

3

APL (Dyalog), 14 octets

∧/1 20>2↑3↓⎕TS

∧/ est-il vrai (ET réduction) que

1 20> ces nombres sont supérieurs à

2↑ les deux premiers éléments de

3↓⎕TS le bourrage T ime S actuel avec trois éléments a chuté


Quel est le personnage ?
programmer5000

@ programmer5000 (Quad) est un préfixe pour les noms de système dans APL. Il est censé être un rectangle vide.
Adám

3

Fusain , 25 octets

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

Impressions - pour la vérité, rien pour la fausse.

Explication

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

Essayez-le en ligne!


Que fait le ⟦⟧ici? Avez-vous besoin d'une liste ou d'une liste de flèches littérale?
Erik the Outgolfer

Oui, une liste est requise ici, mais maintenant que j'y pense, je devrais la rendre facultative
ASCII uniquement

Oh, c'est donc une liste d'arguments? Oui, vous devriez le rendre facultatif, en appelant la fonction sans arguments par défaut.
Erik the Outgolfer

@EriktheOutgolfer Done
ASCII uniquement

3

Alice , 17 octets

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

Essayez-le en ligne!

Suppose être exécuté sur une machine dont le fuseau horaire est défini sur UTC (comme le serveur TIO).

Explication

En mode Ordinal, l'IP rebondit en diagonale dans le programme. En mode Cardinal, l'IP s'enroule autour des bords comme la plupart des autres 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 octets

Merci à Dennis pour plusieurs corrections

Z'1\480*7<

Essayez-le en ligne!

Explication

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. 

Cela devrait-il être l72plutôt que 171dans votre explication?
Dennis

@Dennis Oui, merci d'avoir attrapé ça!
Luis Mendo

Il est toujours 72contre 71. Ne serait - ce retour aussi 0à 00:20?
Dennis

@Dennis Oui, cela reviendrait 0à 00:20, mais reviendrait 1à 00:20moins une petite fraction de seconde (donnée par la machine epsilon pour doubleles temps de type de données 86400). Le défi dit "vous devez être précis à la minute près", donc je comprends que c'est acceptable
Luis Mendo

C'est probablement ce que le message sur Mother Meta signifiait, mais le défi a 00:20 -> truecomme cas de test. Laissé un commentaire sur la question.
Dennis

3

Python 3 (NON-REPL) + temps, 81 77 octets

-4 octets grâce à Bahrom

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

Une approche naïve, transformant la date actuelle en chaîne et analysant ses personnages.


Vous pouvez enregistrer tout un tas d'octets en utilisant une chaîne de format différent, et si vous utilisez le shell, vous n'avez pas besoin de la fonction d'impression: import time;e=str(time.strftime('%H:%M'));e[:2]=='00'and int(e[2:])<21. Cela peut probablement être joué encore plus loin.
Bahrom

(assez nouveau pour le golf et les règles) , mais dans la coquille , cela semble aussi à la sortie des résultats corrects: import time;time.localtime();_.tm_hour==0 and _.tm_min<21. Nous ne
battons

Ok, je ne peux pas éditer maintenant, peut-être plus tard
M. Xcoder


2

Bash , 55 53 51 50 octets

-1 octet du commentaire de @ robbie0630.

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

Essayez-le en ligne!

L'avantage de cette solution est qu'elle fonctionne pour n'importe quelle date (elle ne reviendra donc 1que pour la période définie dans le défi, car elle utilise le temps de l'époque).


2
Raser un octet en le remplaçant $(...)par`...`
robbie

1

Fondation Swift +, 178 octets

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)

Assez court selon des normes rapides. Vérifiez-le!

Comme dans ma réponse Python, j'ai essentiellement converti le courant Dateen une chaîne et j'ai analysé ses chiffres, en fonction de celui sur lequel j'ai imprimé le booléen.


1

R, 65 octets

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

Vérifie si l'heure == 0 et la minute <21.


1

PostgreSQL, 43 caractères

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

Tout simplement parce que je préfère SQL pour les calculs de date / heure.

Exemple d'exécution:

bash-4.3$ psql -c "select now()between'170503'and'170503 0:20'"
 ?column? 
----------
 f
(1 row)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.