SE ne zaman kapanacak?


13

SE sadece bugün 2017-05-04 00:00 UTC saat 00:20 UTC'ye kadar kapalı / okunacaktır .

Zorluk, SE aşağı / salt okunursa gerçek bir değer ve SE değilse yanlış bir değer üretmektir. Herhangi bir girdiniz olmayabilir ve SE'nin aşağı / salt okunur olup olmadığını belirlemek için date yerleşimlerini kullanmalısınız (aslında SE api sorgusu yok!) Örnek çıktı:

12:34 UTC 03 May 2017 -> false

00:00 UTC 04 May 2017 -> true

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

Bu tanımsız bir davranış, çünkü zaman penceresinden çok uzakta. Açık olmak gerekirse, programınızın 8:00bugün UTC'den (5/3/17) 1:00yarın UTC'ye (5/4/17) çalışacağını varsayabilirsiniz.

00:21 UTC 04 May 2017 -> false

00:20 UTC 04 May 2017 -> true

00:10 UTC 04 May 2017 -> true

Sadece trueve değil, herhangi bir doğruluk veya tahrif değerine izin verildiğini unutmayın false. En yakın saniyeye kadar doğru olmalısınız ve sistem saatini değiştirmeyin! Programınızın +0 UTCsaat dilimindeki bir makinede çalıştırıldığını varsayabilirsiniz .


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

8
Test senaryolarını Amerikan yerine evrensel bir tarih biçimi kullanacak şekilde güncellemenizi öneririm.
Shaggy

12
Adım # 1, Bot Ordusunu DDoS SE'ye Tetikleyin, Adım # 2, Geri
Dön

9
İlk olarak, SO SRE Yöneticisi olarak, bu soruyu sevdiğimi söylemek istiyorum. İyi iş! Ancak, kullanıcılara sitenin yalnızca salt okunur modda zorlanmayacağını hatırlatmak istiyorum. Bununla birlikte, prosedürü ne zaman başlatacağımı belirlememe yardımcı olmak için bu sorunun cevabını seçeceğim.
TomOnTime

3
Bu, kendi cevabınızın geçersiz olduğu anlamına gelir, değil mi? Diğer birçok cevap da öyle; ne orijinal revizyonunuz ne de mevcut test vakaları saniyelerden bahsediyor.
Dennis

Yanıtlar:



16

JavaScript (ES6), 26 24 23 22 21 bayt

Shaggy sayesinde 3 byte ve Luke sayesinde 1 byte tasarruf etti .

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

Geçerli günde geçen sürenin 1200000ms'den (1200s veya 20min) az olup olmadığını kontrol eder. Kesinti süresinin 21 değil 20 dakika olduğunu varsayar; bu, bağlantılı gönderide olduğu gibi görünür. 00:20UTCmünhasır üst sınırdır.


Kullanılarak 2 bayt kaydet new Dateyerine new Date().
Shaggy

<2başka bir bayt kaydetmek için.
Shaggy

1
İhtiyacınız yok +; /otomatik dönüştürür new Datebir etmek Number.
Luke

İşlev bildirimi (_ =>) gerekli mi? JavaScript global olarak çalışabilir.
Brilliand

@Brilliand Evet, aksi takdirde çıktıya ihtiyaç duyulur, en kısa olanı alertçok daha uzundur
sadece ASCII-sadece

9

Python 2 , 41 39 bayt

Outgolfer Erik sayesinde 2 bayt tasarruf edildi

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

Çevrimiçi deneyin!

JS ve Charcoal cevaplarım ile aynı algoritmayı kullanır.


/72<1Farklı mı <72?
xnor

@xnor whoops üzgünüm yanlış kopyaladı, şimdi düzeltildi
sadece ASCII-sadece

Hayır, yani print time.time()/1200<72aynı şeyi ifade etmenin daha kısa bir yolu olacağını düşünüyorum .
xnor

@xnor eminim sadece çağın ilk gününde çalışır
ASCII-sadece

Üzgünüz, demek istediğim %1200/72<1-> %1200<72. TIO'nuz %1200/72<1sürüme bağlanıyor - bu bir hata mı?
xnor

7

Jöle , 9 bayt

6ŒT|0Ḍ<21

Gerektirir TZüzere ayarlanmış olması UTCTIO için durum olan.

Çevrimiçi deneyin!

Nasıl çalışır

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.

(Herkes) Dennis tarafından geride bırakıldı! İyi iş!
programcı5000


Kesinti en son 'til 00:21, bir bayt kaydedebilir ...
Dennis


4

zsh, 38 37 bayt:

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

4

bash, 40 bayt:

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

3

JS (ES6), 52 50 49 bayt

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

Neden bu Datekadar uzun? Sadece dakikaları geçmiş 00:00ve true<21 ise geri döner , falseaksi takdirde.


Kullanılarak 2 bayt kaydet new Dateyerine new Date().
Shaggy

2
-1 bu tarihi kontrol etmez
sadece ASCII-sadece

@ ASCII-sadece soru bunu yapmak zorunda olmadığını söylüyor.
programcı5000

İle başka bir bayt kaydedin y=>(x=new Date).getUTCMinutes()<21&&!x.getUTCHours().
Shaggy

1
Yerine UTC yerel saati kullanarak başka 6 byte kaydet - soru yerel saat varsayabiliriz diyor olduğunu UTC.
Brilliand

3

APL (Dyalog), 14 bayt

∧/1 20>2↑3↓⎕TS

∧/ hepsi doğru mu (VE azaltma)

1 20> bu sayılar daha büyük

2↑ ilk iki unsuru

3↓⎕TSüç elemanın düştüğü  mevcut T ime S tamponu


Hangi karakter ?
programcı5000

@ programmer5000 (Quad) APL'deki sistem adları için bir önektir. Edilir boş dikdörtgen olması gerekiyordu.
Adám

3

Kömür , 25 bayt

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

Baskılar -truthy için, falsy için hiçbir şey.

açıklama

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

Çevrimiçi deneyin!


⟦⟧Burada ne yapar ? Bir liste veya ok listesi hazır bilgisine mi ihtiyacınız var?
Outgolfer Erik

Evet, burada bir liste gerekiyor, ama şimdi düşündüğüm için onu isteğe bağlı yapmalıyım
ASCII-sadece

Yani, bu bir argüman listesi mi? Evet, işlevi varsayılan olarak bağımsız değişkenler olmadan çağırmak için isteğe bağlı yapmalısınız.
Outgolfer Erik

@EriktheOutgolfer Done
sadece ASCII

3

Alice , 17 bayt

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

Çevrimiçi deneyin!

Saat dilimi UTC'ye (TIO sunucusu gibi) ayarlanmış bir makinede çalıştırılacağı varsayılır.

açıklama

Sıradan moddayken, IP program boyunca çapraz olarak yukarı ve aşağı sıçrar. Kardinal moddayken, IP diğer Fungeoidler gibi kenarları sarar.

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

Dennis'e çeşitli düzeltmeler için teşekkürler

Z'1\480*7<

Çevrimiçi deneyin!

açıklama

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. 

Açıklamanız l72yerine bu olmalı mı 171?
Dennis

@Dennis Evet, yakaladığınız için teşekkürler!
Luis Mendo

Hala var 72vs 71. Ayrıca, bu dönüşü olmaz 0at 00:20?
Dennis

Evet @Dennis bu dönmek 0az 00:20ama dönmek 1de 00:20(makine epsilon tarafından verilen bir ikinci küçük bir fraksiyonu eksi doubleveri türü kez 86400). Zorluk "en yakın dakikaya kadar doğru olmalısın" diyor, bu yüzden kabul edilebilir olduğunu anlıyorum
Luis Mendo

Muhtemelen Mother Meta'daki yazının anlamı budur, ancak zorluğun 00:20 -> truebir test örneği olarak var. Soruya yorum yaptı.
Dennis

3

Python 3 (REPL olmayan) + süre, 81 77 bayt

Bahrom sayesinde -4 bayt

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

Mevcut tarihi dizeye çeviren ve karakterlerini analiz eden naif bir yaklaşım.


Farklı bir biçim dizesi kullanarak bayt bir sürü kaydedebilir ve kabuk kullanıyorsanız, yazdırma işlevini gerekmez: import time;e=str(time.strftime('%H:%M'));e[:2]=='00'and int(e[2:])<21. Bu muhtemelen daha da golf edilebilir.
Bahrom

(golf ve kurallara oldukça yeni) ama kabukta bu da doğru sonuçlar çıktı gibi görünüyor: import time;time.localtime();_.tm_hour==0 and _.tm_min<21. Yine de lol
ASCII'yi yenmiyoruz

Tamam, şimdi düzenleyemiyorum, belki sonra
Bay Xcoder


2

Bash , 55 53 51 50 bayt

@ Robbie0630 kullanıcısının yorumundan -1 byte.

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

Çevrimiçi deneyin!

Bu çözümün avantajı, herhangi bir tarih için çalışmasıdır (bu nedenle, 1yalnızca çağda zaman kullandığından, meydan okumada tanımlanan süre için geri dönecektir ).


2
Bir bayt ile değiştirerek $(...)`...`
robbie

1

Swift + Vakfı, 178 bayt

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)

Hızlı standartlara göre oldukça kısa. Bunu kontrol et!

Python cevabımda olduğu gibi, temelde akımı Datebir dizeye dönüştürdüm ve boole yazdırdığım şekle bağlı olarak rakamlarını analiz ettim.


1

R, 65 bayt

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

Saat == 0 ve dakika <21 olup olmadığını kontrol eder.


1

PostgreSQL, 43 karakter

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

Tarih / saat hesaplamaları için SQL'i tercih ettiğim için.

Örnek çalışma:

bash-4.3$ psql -c "select now()between'170503'and'170503 0:20'"
 ?column? 
----------
 f
(1 row)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.