2017 is Almost Here!

17

Tantangan

Tantangannya sederhana:

Tanpa mengambil input dan menampilkan pesan berikut:

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

Beberapa kali sama dengan jumlah jam sebelum atau setelah tengah malam UTC pada 31 Desember 2016.

Contohnya

Sebagai contoh jika 19:01 UTC 31 Desember Anda harus menampilkan:

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

jika 23:24 UTC 31 des Anda harus menampilkan:

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

dan jika 1:42 UTC 1 Januari Anda harus menampilkan:

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

Klarifikasi: jika 10-11 desember 31 Desember Anda harus mengeluarkan dua, 11-12 pm des keluaran 31 satu, 00-01-01 Januari 1 keluaran satu, 01-02 01 Januari keluaran dua dll ...

Aturan

  • Tidak Ada Input
  • Garis atau spasi tambahan tidak masalah.
  • Program Anda harus bekerja kapan saja atau hari saya menjalankannya (walaupun dengan output yang besar). Misalnya pada 2 Januari pukul 00:15 pagi kode Anda akan ditampilkan 25 kali.

(Ini adalah pertanyaan Golf Code pertama saya jadi jika saya meninggalkan hal penting, tolong beri tahu saya.)

Ini adalah Golf Code sehingga bit terpendek menang

Spagettifikasi kuantum
sumber
Apakah jumlah jam dibulatkan ke bilangan bulat terdekat? Jika dalam setengah jam dari Tahun Baru-tengah malam, haruskah tidak ada output?
Greg Martin
@GregMartin Lihat hasil edit saya untuk klarifikasi.
Spagetifikasi kuantum
Apa yang harus terjadi jika saya menjalankan program pada 3 Januari?
betseg
@ Betseg kamu baru saja memikirkan hal itu. Lihat edit :). Ini harus bekerja sama meskipun outputnya akan besar.
Spaghettification Quantum
Pertanyaan pertama yang bagus. Tentang pembulatan: jumlah pengulangan adalah nilai absolut dari perbedaan antara UCT waktu saat ini dan 0:00:00 dari 1 Januari UTC, dibulatkan ke atas. Benar?
edc65

Jawaban:

6

JavaScript (ES6), 107

Sebagai metode anonim tanpa parameter

Catatan 1483228800000adalahDate.UTC(2017,0)

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

Tes ini terus diperbarui setiap 1 menit, tetapi Anda akan perlu banyak kesabaran untuk melihat perubahan output.

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

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

setInterval(update,60000)

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

edc65
sumber
4

Python 2 - 97 + 17 = 114 byte

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

Logika yang dipinjam untuk plafon dari jawaban edc65 .

Python 3.5 - 116 byte

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

math.ceilmengembalikan bilangan bulat di mana 3.xdi 2.xdalamnya mengembalikan float.

Terima kasih elpedro untuk menghemat 3 byte.

Gurupad Mamadapur
sumber
@ ElPedro Terima kasih. Akan melakukan itu, dalam solusi saya sebelumnya saya mengutak-atik datetime.now(pytz.utc).timestamp()yang diperlukan python 3.5.
Gurupad Mamadapur
3

Pyth - 71 68 byte

*"_     __    __
 |   |  | |   |
 |_  |__| |   |
".Ea412008c.d0 3600

Menggunakan logika yang sama yang digunakan dalam jawaban python 3.5 saya.

Coba di sini!

Gurupad Mamadapur
sumber
@ Quantumspaghettification Bukankah ini lebih pendek?
Gurupad Mamadapur
2

C dikompilasi dengan Dentang 3.8.1 327 317 145 Bytes

172 byte disimpan berkat @ edc65

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

Tidak disatukan

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

t=difftime(t, 1483228800)/3600;

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

317 byte

10 byte disimpan berkat @ 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");

Tidak disatukan

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

Saya akan menambahkan beberapa penjelasan ketika saya bisa.

Wade Tyler
sumber
Apakah kamu tidak bisa melakukannya n.tm_hour=n.tm_min=...=n.tm_mon=0;?
LegionMammal978
@ LegionMammal978 Oh yeah, saya lupa. Terima kasih.
Wade Tyler