Khi nào SE sẽ xuống?


13

SE sẽ xuống / chỉ đọc ngày hôm nay 2017-05-04 lúc 00:00 UTC cho đến 00:20 UTC.

Thách thức của bạn là đưa ra một giá trị trung thực nếu SE xuống / chỉ đọc và giá trị giả nếu SE không. Bạn có thể không có bất kỳ đầu vào nào và bạn phải sử dụng các nội dung ngày để xác định xem SE có bị tắt / chỉ đọc không (không thực sự truy vấn SE api!) Kết quả đầu ra:

12:34 UTC 03 May 2017 -> false

00:00 UTC 04 May 2017 -> true

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

Đó là hành vi không xác định, bởi vì nó quá xa sau cửa sổ thời gian. Để rõ ràng, bạn có thể giả sử chương trình của bạn sẽ được chạy từ UTC 8:00hôm nay (5/3/17) đến UTC 1:00vào ngày mai (5/4/17).

00:21 UTC 04 May 2017 -> false

00:20 UTC 04 May 2017 -> true

00:10 UTC 04 May 2017 -> true

Lưu ý rằng bất kỳ giá trị trung thực hoặc giả mạo đều được cho phép, không chỉ truefalse. Bạn phải chính xác đến giây gần nhất và không thay đổi đồng hồ hệ thống! Bạn có thể cho rằng chương trình của bạn đang được chạy trên một máy theo +0 UTCmúi giờ.


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

8
Tôi khuyên bạn nên cập nhật các trường hợp thử nghiệm để sử dụng định dạng ngày phổ quát thay vì Mỹ.
Xù xì

12
Bước # 1, kích hoạt đội quân bot sang DDoS SE, Bước # 2, trả về "1"
user2023861

9
Đầu tiên, với tư cách là người quản lý SO SRE, tôi muốn nói rằng tôi thích câu hỏi này. Làm tốt lắm! Tuy nhiên, tôi muốn nhắc mọi người rằng trang web sẽ không bị cứng ... chỉ ở chế độ chỉ đọc. Điều đó nói rằng, tôi sẽ chọn câu trả lời cho câu hỏi này để giúp tôi xác định khi nào bắt đầu thủ tục.
TomOnTime

3
Điều đó có nghĩa là câu trả lời của bạn không hợp lệ, phải không? Vì vậy, nhiều câu trả lời khác; không sửa đổi ban đầu của bạn cũng không phải các trường hợp thử nghiệm hiện tại đề cập đến giây.
Dennis

Câu trả lời:



16

JavaScript (ES6), 26 24 23 22 21 byte

Đã lưu 3 byte nhờ Shaggy và 1 byte nhờ Luke .

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

Kiểm tra nếu thời gian trôi qua trong ngày hiện tại ít hơn 1200000ms (1200 giây hoặc 20 phút). Giả sử thời gian chết là 20 phút chứ không phải 21, dường như là trường hợp trong bài được liên kết. 00:20UTClà giới hạn trên độc quyền.


Lưu 2 byte bằng cách sử dụng new Datethay vì new Date().
Xù xì

<2để lưu một byte khác.
Xù xì

1
Bạn không cần +; /tự động chuyển đổi new Datethành a Number.
Luke

Là khai báo hàm (_ =>) cần thiết? JavaScript có thể chạy trên toàn cầu.
Brilliand

@Brilliand Có, nếu không sẽ cần đầu ra, thời gian ngắn nhất alertdài hơn rất nhiều
ASCII-chỉ

9

Python 2 , 41 39 byte

Đã lưu 2 byte nhờ Erik the Outgolfer

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

Hãy thử trực tuyến!

Sử dụng thuật toán tương tự như câu trả lời JS và Char than của tôi.


/72<1khác <72gì không?
xnor

@xnor xin lỗi đã sao chép sai, đã sửa ngay bây giờ
ASCII chỉ

Không, ý tôi là tôi nghĩ print time.time()/1200<72sẽ là một cách ngắn hơn để diễn đạt điều tương tự.
xnor

@xnor Tôi khá chắc chắn rằng chỉ hoạt động vào ngày đầu tiên của kỷ nguyên
ASCII - chỉ

Rất tiếc, ý tôi là %1200/72<1-> %1200<72. TIO của bạn liên kết đến %1200/72<1phiên bản - đó có phải là một sai lầm?
xnor

7

Thạch , 9 byte

6ŒT|0Ḍ<21

Yêu cầu TZđược đặt thành UTC, đó là trường hợp của TIO.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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.

(Mọi người đã) Bị Dennis ruồng bỏ! Công việc tốt!
lập trình


Nếu thời gian ngừng hoạt động gần nhất 00:21, tôi có thể lưu một byte ...
Dennis




3

JS (ES6), 52 50 49 byte

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

Sao Datelâu thế? Chỉ cần có được những phút đã qua 00:00và trở lại truenếu chúng <21, và falsenếu không.


Lưu 2 byte bằng cách sử dụng new Datethay vì new Date().
Xù xì

2
-1 điều này không kiểm tra ngày
ASCII - chỉ

@ ASCII - chỉ câu hỏi nói rằng nó không phải.
lập trình

Lưu một byte khác với y=>(x=new Date).getUTCMinutes()<21&&!x.getUTCHours().
Xù xì

1
Lưu thêm 6 byte bằng cách sử dụng giờ địa phương thay vì UTC - câu hỏi cho biết bạn có thể cho rằng giờ địa phương UTC.
Brilliand

3

APL (Dyalog), 14 byte

∧/1 20>2↑3↓⎕TS

∧/ có phải tất cả là sự thật (VÀ giảm)

1 20> những con số này lớn hơn

2↑ hai yếu tố đầu tiên của

3↓⎕TSTampe T ime S  hiện tại với ba yếu tố bị loại bỏ


Nhân vật là gì?
lập trình

@ lập trình5000 (Quad) là tiền tố cho tên hệ thống trong APL. Nó được cho là một hình chữ nhật trống.
Adám

3

Than , 25 byte

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

In -cho sự thật, không có gì cho giả.

Giải trình

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

Hãy thử trực tuyến!


Làm gì ⟦⟧ở đây? Bạn có cần một danh sách hoặc danh sách mũi tên theo nghĩa đen?
Erik the Outgolfer

Vâng, một danh sách là bắt buộc ở đây, nhưng bây giờ tôi nghĩ về nó, tôi nên làm cho nó tùy chọn
ASCII - chỉ

Oh, vậy đó là một danh sách các đối số? Vâng, bạn nên làm cho nó tùy chọn, gọi hàm mà không có đối số theo mặc định.
Erik the Outgolfer

@EriktheOutgolfer Xong
ASCII chỉ

3

Alice , 17 byte

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

Hãy thử trực tuyến!

Giả sử được chạy trên một máy có múi giờ được đặt thành UTC (như máy chủ TIO).

Giải trình

Trong khi ở chế độ Thông thường, IP bật lên theo đường chéo lên xuống thông qua chương trình. Khi ở chế độ Cardinal, IP bao quanh các cạnh như hầu hết các Fungeoids khác.

/   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

Cảm ơn Dennis vì đã sửa chữa

Z'1\480*7<

Hãy thử trực tuyến!

Giải trình

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. 

Có nên l72thay vì 171trong lời giải thích của bạn?
Dennis

@Dennis Vâng, cảm ơn vì đã nắm bắt điều đó!
Luis Mendo

Nó vẫn 72vs 71. Cũng sẽ không trở lại này 0tại 00:20?
Dennis

@Dennis Vâng, điều này sẽ trở lại 0tại 00:20, nhưng sẽ trở lại 1tại 00:20trừ một phần nhỏ của một giây (được đưa ra bởi epsilon máy cho doublethời gian kiểu dữ liệu 86400). Thử thách nói rằng "bạn phải chính xác đến phút gần nhất", vì vậy tôi hiểu điều đó có thể chấp nhận được
Luis Mendo

Đó có lẽ là những gì bài viết trên Mẹ Meta có nghĩa, nhưng thử thách 00:20 -> truelà một trường hợp thử nghiệm. Để lại một bình luận về câu hỏi.
Dennis

3

Python 3 (NON-REPL) + thời gian, 81 77 byte

-4 byte nhờ Bahrom

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

Một cách tiếp cận ngây thơ, biến ngày hiện tại thành chuỗi và phân tích các ký tự của nó.


Bạn có thể lưu cả đống byte bằng cách sử dụng một chuỗi định dạng khác và nếu bạn đang sử dụng trình bao, bạn không cần chức năng in : import time;e=str(time.strftime('%H:%M'));e[:2]=='00'and int(e[2:])<21. Điều này có thể có thể được chơi golf hơn nữa quá.
Bahrom

(khá mới đối với việc chơi golf và các quy tắc) nhưng trong phần vỏ này dường như cũng cho ra kết quả chính xác : import time;time.localtime();_.tm_hour==0 and _.tm_min<21. Dù sao thì chúng tôi cũng không đánh bại ASCII thôi
Bahrom

Ok, tôi không thể chỉnh sửa ngay bây giờ, có thể sau này
Ông Xcoder


2

Bash , 55 53 51 50 byte

-1 byte từ nhận xét của @ robbie0630.

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

Hãy thử trực tuyến!

Ưu điểm của giải pháp này là nó hoạt động cho bất kỳ ngày nào (vì vậy sẽ 1chỉ trả lại cho khoảng thời gian được xác định trong thử thách, vì nó sử dụng thời gian kỷ nguyên).


2
Cạo sạch một byte bằng cách thay thế $(...)bằng`...`
robbie

1

Nền tảng Swift +, 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)

Khá ngắn theo tiêu chuẩn nhanh chóng. Kiểm tra nó ra!

Như trong câu trả lời Python của tôi, về cơ bản tôi đã chuyển đổi dòng điện Datethành một chuỗi và đã phân tích các chữ số của nó, tùy thuộc vào việc tôi đã in bool.


1

R, 65 byte

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

Kiểm tra xem giờ == 0 và phút <21.


1

PostgreSQL, 43 ký tự

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

Chỉ vì tôi thích SQL để tính toán ngày / giờ.

Chạy mẫu:

bash-4.3$ psql -c "select now()between'170503'and'170503 0:20'"
 ?column? 
----------
 f
(1 row)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.