2017 ใกล้จะถึงแล้ว!


17

ท้าทาย

ความท้าทายนั้นง่าย:

ไม่รับอินพุตและเอาต์พุตข้อความต่อไปนี้:

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

จำนวนครั้งเท่ากับจำนวนชั่วโมงก่อนหรือหลังเที่ยงคืน UTC ในวันที่ 31 ธันวาคม 2016

ตัวอย่าง

ตัวอย่างเช่นถ้าเป็น 19:01 UTC 31 ธันวาคมคุณควรส่งออก:

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

หากเป็น 23:24 UTC 31st คุณควรส่งออก:

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

และถ้าเป็น 1:42 UTC jan 1st คุณควรเอาท์พุท:

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

ชี้แจง: ถ้ามันเป็น 10-11pm ธันวาคม 31st คุณควรส่งออกสอง, 11-12pm ธันวาคม 31 เอาท์พุทหนึ่ง, 00-01am jan 1 เอาท์พุทหนึ่ง, 01-02am jan 1 เอาท์พุทสอง ฯลฯ ...

กฎระเบียบ

  • ไม่มีอินพุต
  • เส้นหรือช่องว่างต่อท้ายก็โอเค
  • โปรแกรมของคุณควรทำงานได้ตลอดเวลาหรือวันที่ฉันเรียกใช้ (แม้ว่าจะมีขนาดใหญ่ออก) ตัวอย่างเช่นในวันที่ 2 มกราคมเวลา 00:15 น. โค้ดของคุณควรออก 25 ครั้ง

(นี่เป็นคำถามเกี่ยวกับ Code Golf ครั้งแรกของฉันดังนั้นหากฉันทิ้งสิ่งสำคัญเอาไว้โปรดแจ้งให้เราทราบ)

นี่คือ Code Golf ดังนั้นบิตที่สั้นที่สุดชนะ


จำนวนชั่วโมงถูกปัดเศษเป็นจำนวนเต็มที่ใกล้ที่สุดหรือไม่ หากภายในครึ่งชั่วโมงของปีใหม่เที่ยงคืนจะไม่มีการแสดงผลใด ๆ
Greg Martin

@GregMartin ดูการแก้ไขของฉันเพื่อความกระจ่าง
สปาเกตตี้ควอนตัม

จะเกิดอะไรขึ้นถ้าฉันรันโปรแกรมในวันที่ 3 มกราคม
betseg

@betseg พวกเจ้าฉันแค่คิดเกี่ยวกับการที่ ดูการแก้ไข :) มันควรจะทำงานเหมือนกันแม้ว่าผลลัพธ์จะมีขนาดใหญ่
สปาเกตตี้ควอนตัม

คำถามแรกที่ดี เกี่ยวกับการปัดเศษ: จำนวนการทำซ้ำคือค่าสัมบูรณ์ของความแตกต่างระหว่างเวลาปัจจุบัน UCT และ 0:00:00 ของ UTC วันที่ 1 มกราคมปัดเศษขึ้น แก้ไข?
edc65

คำตอบ:


6

JavaScript (ES6), 107

เป็นวิธีการที่ไม่ระบุชื่อโดยไม่มีพารามิเตอร์

หมายเหตุ1483228800000คือDate.UTC(2017,0)

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

ทดสอบสิ่งนี้จะทำการอัปเดตทุก ๆ 1 นาที แต่คุณต้องใช้ความอดทนอย่างมากในการดูผลลัพธ์ที่เปลี่ยนแปลง

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 ไบต์

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

ยืมตรรกะสำหรับเพดานจากคำตอบของ edc65

Python 3.5 - 116 ไบต์

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

math.ceilส่งกลับจำนวนเต็มใน3.xขณะที่2.xมันส่งกลับลอย

ขอบคุณelpedroสำหรับการบันทึก 3 ไบต์


@ElPedro ขอบคุณ ในการแก้ปัญหาก่อนหน้านี้ของฉันฉันเล่นซอdatetime.now(pytz.utc).timestamp()ที่ต้องใช้งูหลาม 3.5
Gurupad Mamadapur


2

C ที่คอมไพล์ด้วย Clang 3.8.1 327 317 145 Bytes

บันทึก 172 ไบต์ด้วย @ edc65

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

Ungolfed

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

t=difftime(t, 1483228800)/3600;

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

317 ไบต์

บันทึก 10 ไบต์ด้วย @ 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");

Ungolfed

#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");
}

ฉันจะเพิ่มคำอธิบายเมื่อฉันสามารถทำได้


คุณทำn.tm_hour=n.tm_min=...=n.tm_mon=0;ไม่ได้เหรอ
LegionMammal978

@ LegionMammal978 โอ้ใช่ฉันลืมไปแล้ว ขอบคุณ
ลุยไทเลอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.