Năm 2017 sắp đến rồi!


17

Thử thách

Thử thách rất đơn giản:

Không nhận đầu vào và xuất thông báo sau:

 _     __    __
  |   |  | |   |
  |_  |__| |   | 

Một số lần bằng với số giờ trước hoặc sau nửa đêm UTC vào ngày 31 tháng 12 năm 2016.

Ví dụ

Ví dụ: nếu là 19:01 UTC ngày 31 tháng 12, bạn nên xuất:

 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 

Nếu là 23:24 UTC ngày 31 tháng 12, bạn nên xuất:

 _     __    __
  |   |  | |   |
  |_  |__| |   | 

và nếu là 1:42 UTC ngày 1, bạn nên xuất ra:

 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 

Làm rõ: nếu là 10-11 giờ tối ngày 31 tháng 12, bạn nên xuất hai, 11-12 giờ chiều ngày 31 tháng một, 00-01 sáng ngày 1

Quy tắc

  • Không có đầu vào
  • Đường kẻ hoặc không gian là ok.
  • Chương trình của bạn sẽ hoạt động bất cứ lúc nào hoặc ngày tôi chạy nó (mặc dù với sản lượng lớn). Ví dụ: vào ngày 2 tháng 1 lúc 00:15, mã của bạn sẽ xuất ra 25 lần.

(Đây là câu hỏi Code Golf đầu tiên của tôi vì vậy nếu tôi bỏ sót bất kỳ điều gì quan trọng, vui lòng cho tôi biết.)

Đây là Code Golf nên bit ngắn nhất giành chiến thắng


Là số giờ được làm tròn đến số nguyên gần nhất? Nếu trong vòng nửa giờ của nửa đêm năm mới, liệu có nên không có đầu ra?
Greg Martin

@GregMartin Xem chỉnh sửa của tôi để làm rõ.
Spaghettization lượng tử

Điều gì sẽ xảy ra nếu tôi chạy chương trình vào ngày 3 tháng 1?
betseg

@betseg các bạn tôi chỉ nghĩ về điều đó. Xem chỉnh sửa :). Nó sẽ hoạt động như nhau mặc dù đầu ra sẽ lớn.
Spaghettization lượng tử

Câu hỏi đầu tiên rất hay. Về làm tròn: số lần lặp lại là giá trị tuyệt đối của chênh lệch giữa UCT hiện tại và 0:00:00 ngày 1 tháng 1 UTC, được làm tròn lên. Chính xác?
edc65

Câu trả lời:


6

JavaScript (ES6), 107

Là một phương thức ẩn danh không có tham số

Lưu ý 1483228800000Date.UTC(2017,0)

_=>` _     __    __
  |   |  | |   |
  |_  |__| |   |
`.repeat((Math.abs(new Date-14832288e5)+36e5-1)/36e5)

Kiểm tra Điều này liên tục cập nhật cứ sau 1 phút, nhưng bạn sẽ cần rất nhiều kiên nhẫn để xem thay đổi đầu ra.

F=_=>`_     __    __
 |   |  | |   |
 |_  |__| |   |
`.repeat((Math.abs(new Date-14832288e5)+36e5-1)/36e5)

update=_=>O.textContent=F()

setInterval(update,60000)

update()
<pre id=O></pre>


4

Python 2 - 97 + 17 = 114 byte

import time
print'_     __    __\n |   |  | |   |\n |_  |__| |   |\n'*int((abs(time.time()-1483228800)+3599)/3600)

Mượn logic cho trần từ câu trả lời của edc65 .

Python 3,5 - 116 byte

import time,math
print('_     __    __\n |   |  | |   |\n |_  |__| |   |\n'*math.ceil(abs(time.time()/3600-412008)))

math.ceiltrả về một số nguyên trong 3.xkhi trong 2.xđó trả về một float.

Cảm ơn elpedro đã lưu 3 byte.


@ElPedro Cảm ơn. Sắp làm điều đó, trong các giải pháp trước đây của tôi, tôi đã loay hoay với datetime.now(pytz.utc).timestamp()yêu cầu python 3.5.
Gurupad Mamadapur


2

C được biên dịch với Clang 3.8.1 327 317 145 byte

Đã lưu 172 byte nhờ @ edc65

#include <time.h>
t;main(){time(&t);t=abs(difftime(t,1483228800)/3600);while(t--)puts(" _     __    __\n  |   |  | |   |\n  |_  |__| |   |\n");}

Bị đánh cắp

#include <time.h>
t;
main()
{
time(&t);

t=difftime(t, 1483228800)/3600;

while(t--)
    puts(" _     __    __\n  |   |  | |   |\n  |_  |__| |   |\n");
}

317 byte

Đã lưu 10 byte nhờ @ LegionMammal978

#include <time.h>
t,y,w;main() {struct tm n;time(&t);n=*localtime(&t);n.tm_hour=n.tm_min=n.tm_sec=n.tm_mon=0;n.tm_mday=1;w=n.tm_year;if((w&3)==0&&((w % 25)!=0||(w & 15)==0))w=8784;else w=8760;t=(int)difftime(t, mktime(&n))/3600;t=t<w/2?t:w-t;for(;y++<t;)puts(" _     __    __\n  |   |  | |   |\n  |_  |__| |   |\n");

Bị đánh cắp

#include <time.h>
t,y,w;
main()
{
    struct tm n;
    time(&t);

    n=*localtime(&t);

    n.tm_hour=n.tm_min=n.tm_sec=n.tm_mon=0;
    n.tm_mday=1;
    w=n.tm_year;

    if((w&3)==0&&((w % 25)!=0||(w & 15)==0))w=8784;else w=8760;

    t=(int)difftime(t, mktime(&n))/3600;
    t=t<w/2?t:w-t; 

    for(;y++<t;)
        puts(" _     __    __\n  |   |  | |   |\n  |_  |__| |   |\n");
}

Tôi sẽ thêm một số giải thích khi tôi có thể.


Bạn không thể làm gì n.tm_hour=n.tm_min=...=n.tm_mon=0;?
LegionMammal978

@ LegionMammal978 Ồ vâng, tôi quên mất. Cảm ơn.
Wade Tyler
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.