Tugas Anda adalah membuat program yang meniru Big Ben (Twitter) .
Tugas
Kapan pun jam baru telah dimulai (sesuai dengan waktu lokal atau UTC komputer Anda), Anda harus menampilkan waktu yang BONG
berulang hour
(dengan spasi di antara kata-kata). Misalnya, ketika jam 3, Anda harus output BONG BONG BONG
. Format waktu mengikuti format waktu 12 jam, yaitu setelah jam 12, kami memiliki 1 dan bukan 13. Program / fungsi harus berjalan selamanya.
Contoh:
jangan mengeluarkan barang di dalam tanda kurung
(start: 00:34 for example)
BONG (01:00)
BONG BONG (02:00)
(...)
BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG (12:00)
BONG (01:00 again)
(...)
(it continues forever)
Aturan
- Setiap seri
BONG
s harus dipisahkan oleh baris baru - Leading / trailing newlines diperbolehkan
- Namun terkemuka / tertinggal ruang yang tidak diperbolehkan
- Pengajuan harus berjalan selamanya
- Output Anda dapat dicetak ± 3 detik dari awal jam
- Anda tidak boleh menganggap program dijalankan pada jam tertentu
Ini adalah kode-golf , sehingga program dengan bytecount terpendek menang!
code-golf
string
kolmogorov-complexity
date
Kritixi Lithos
sumber
sumber
TIMESKEW="60 1"
membuat menit mengalir seperti detik.Jawaban:
05AB1E , 43 byte
Cobalah online! (lol ini tidak akan berfungsi, akan habis dalam 60 detik. Unduh juru bahasa 05AB1E untuk ini)
Penjelasan:
Butuh beberapa saat untuk bermain golf! Saya mungkin bisa bermain golf sedikit lebih banyak, tetapi itu berdetak
*><>
, jadi itu keren :)Versi cepat:
Akan menunggu satu detik saat mulai, dan satu detik di antara BONG
sumber
Pesta,
71,70, 69 byteEDIT:
Golf
Dijelaskan
Versi Uji
Bekerja dengan menit, bukan jam
sumber
yes BONG|sed 12q
*> <> ,
484744 byteCoba di sini! ( atau versi ini yang melakukannya setiap menit untuk pengujian )
Ini menghasilkan sejumlah
BONG
s yang dipisahkan oleh spasi berdasarkan jam berapa (dan 13 adalah 1, dll). Tidak ada spasi tambahan setelah finalBONG
, dan ada baris tambahan.Secara teknis ini tidak berjalan selamanya (tetapi pada dasarnya tidak). Bocor ~ 28 byte per hari (mengabaikan overhead juru ...). Butuh ~ 105062 tahun untuk bocor 1GiB.
Mendekati untuk overhead juru, tumpukan hanya seiris dari
float64
pada penerjemah Golang. Jadi saya hanya28*8
membuat 224 byte per hari. Saya membagi angka ini dengan jumlah byte dalam gibibyte (1073741824) kemudian 365 untuk memperkirakan bahwa akan dibutuhkan 13132,85 tahun untuk bocor 1 GiB.Perhatikan tentang penerjemah
Penerjemah online dalam Javascript. Halaman harus terbuka dan terlihat untuk memeriksa waktu saat ini dan output BONG. The Golang interpreter tidak memiliki batasan seperti itu.
Penjelasan
sumber
JavaScript (ES6),
9993 byteIni menggunakan waktu UTC (yang sejalan dengan hal yang sebenarnya). Karena sifat kode yang tidak dapat diuji, Anda dapat mencoba yang berikut ini yang melakukan hal yang sama, tetapi setiap 60 detik:
Berikut adalah bonus versi 99-byte yang menggunakan waktu lokal:
sumber
alert
setiap menit untuk saya (tetapi jumlahBONG
s benar), tetapi program ini seharusnya hanya menghasilkan setiap jamJavaScript (ES6),
125123117115 byteTerima kasih kepada @ Flp.Tkc untuk menghemat 5 byte!
Terima kasih kepada @BenAston karena telah menghemat 2 byte lagi!
Snippet Snack
sumber
Batch, 142 byte
Karena file berjalan sebagai infinite loop, saya mulai dengan penundaan 1s, karena saya memerlukannya setelah bong, dan ini menghemat siklus CPU. Itu
>nul
diposisikan dengan hati-hati untuk menyimpan byte (1>nul
akan menyebabkan 1 dimakan oleh redirection). Kami kemudian mengulang sampai menit dan detik nol. Roti dibangun dengan mengambil jam negatif modulo 12, dan memintah
karakter terakhir dari string 12 karakter. Kapanh
nol ini sebenarnya memberi kita seluruh string, oleh karena itu 12 bong. Itu sudah cukup untuk mengganti karakter dengan kataBONG
. Saat dijalankan tampilannya seperti ini (perhatikan bahwa gambar tidak berulang, jadi Anda harus memaksa memuat ulang untuk melihat animasi lagi):sumber
Bash + Linux crontab, 90
Saya berharap ini akan lebih pendek dari jawaban shell lainnya. Namun, saya pikir ini pendekatan yang menarik:
Script berjalan sekali, mengisi crontab, lalu keluar. Namun, output dari cronjobs dikirim ke terminal tempat skrip dijalankan. Saya pikir ini memenuhi pengajuan harus berjalan selamanya persyaratan.
Peringatan - ini akan menghapus semua entri crontab yang ada, jadi pastikan Anda sudah membuat cadangan.
Ini berfungsi pada Ubuntu 16.04, yang menggunakan Vixie
cron
secara default.sumber
BONG
diperlukan.cron
kamu gunakan/proc/<PID>/fd/<N>
.Ruby,
11299 BytesVersi lama
Terima kasih kepada QPaysTaxes untuk tipsnya
sumber
sleep(60)
membuat itu terjadiCheddar v1.0.5, 162 byte
Cheddar tidak memiliki pembaca waktu bawaan / pembaca output cmd, jadi saya harus berimprovisasi!
Golf:
Tidak Disatukan:
Penjelasan:
Karena perpustakaan standar Cheddar yang terbatas, saya harus menggunakan cmd untuk menghasilkan waktu. Saya melakukan ini dengan menyimpan output "time / t", yang mencetak waktu dalam format 12 jam, ke file bernama "c". IO.read mengembalikan buffer yang saya masukkan ke string dan dibagi dengan ":" yang memastikan bahwa jam selalu dalam indeks nol. Saya menyimpan seluruh operasi itu menjadi ekspresi lambda yang menyelamatkan saya 44 byte. Setelah titik itu masuk ke logika "jika jam yang disimpan tidak sama dengan jam saat ini, atur jam sebelumnya ke saat ini dan cetak BONG n kali, potong ruang trailing."
Cheddar mungkin bukan bahasa yang paling tidak jelas tetapi bisa menyenangkan untuk menemukan solusi seperti ini!
Sayangnya ini adalah solusi Windows saja.
Sunting 1: Disimpan dua byte dengan mengganti "0 <1" pada kondisi-ke "1" Saya tidak berharap 1 untuk mengevaluasi true dalam bahasa ini!
sumber
Ruby,
8281 byteSetiap detik kami memeriksa apakah ini detik terakhir, dan BONG sesuai dengan itu. Mungkin bisa bermain golf lebih jauh dengan beberapa trik kotor, tetapi saya tidak tahu terlalu banyak. Juga berfungsi berbeda dari jawaban Ruby lainnya.
Satu byte disimpan berkat courtesy of QPaysTaxes.
sumber
if
?puts
saya lupa tentang itu.Python 2 ,
105106 byteSunting
Ditambahkan satu byte dengan mengubah <to! = Setelah umpan balik dari @ pinkfloydx33. Tempat yang bagus.
Diuji sebanyak mungkin secara lokal tetapi tidak bekerja pada TIO karena (jelas) melebihi batas eksekusi 60 detik. Silakan uji secara lokal :-)
btw, kehilangan ruang trailing sial saya biaya 7 byte kalau tidak ini akan berada di bawah 100.
Dengan tidak adanya TIO di sini adalah output setelah menunggu satu jam. Prog dimulai pada 15:27 dengan kode debug tambahan untuk menunjukkan waktu cetak (format 12 jam).
Cukup mudah tetapi di sini ada penjelasan untuk siapa saja yang tertarik.
sumber
11>0
, jadih>c
atau aku kehilangan sesuatu?Python 3 -
1009792 bytePenjelasan:
sumber
from time import*<NL>while 1:x=3600;sleep(x-time()%x);print(('BONG '*int(strftime("%I")))[:-1])
is 93 bytesfrom time import*
, seperti iniC, 238 byte
Saya tidak yakin apakah ini berfungsi dengan benar, dan saya mobile, dan ponsel saya tidak memiliki kompiler C. (Hanya bekerja pada sistem seperti UNIX)
sumber
f
bukanmain
? Bagaimana cara kerjanya?sh, 66 byte
Dijelaskan
sumber
%I
dengan%M
dan berfungsi selama beberapa menit.C, 198 byte
sumber
Javascript ES6 87 byte
Sunting: Meminjam
new Date/36e5%12|0||12
kode @ETHProductions tanpa malu-malu untuk menghemat 6 bytesumber
R,
104105 byteSetiap detik, itu akan (harus) menguji apakah kita berada di akhir jam, lalu mencetak jumlah
BONG
itu.sumber
12:00:01
?Sys.sleep(60)
itu bisa terjadiwhile(1)
denganrepeat
.BONG
selama 1 detik, bukan hanya sekali. Ini untuk memastikan hanya memeriksa sekali per detik.JavaScript ES2015,
1009998969488 bytePenjelasan:
h
adalah fungsi yang mendapatkan jam berbasis 12 jam dalam sehari menggunakan operator sisa (%12
).36e5
adalah jumlah milidetik dalam satu jam menggunakan sintaksis eksponensial untuk menyimpan karakter. Thenew
operator tidak mengharuskan kurung digunakan dengan fungsi jika tidak ada argumen, makanew Date
. JavaScript hanya memiliki aritmatika titik mengambang,|
operator bitwise ATAU memaksa angka menjadi bilangan bulat karena operator bitwise JS bekerja dengan subset bilangan bulat dari angka yang diwakili oleh floating point IEEE 754.Koma menggambarkan sub-ekspresi.
p
diinisialisasi ke jam saat ini (p=h()
).for(;;)
digunakan untuk memeriksa berulang kali apakah adaBONG
yang harus disiagakan. Pemeriksaan dilakukan secepat runtime mengizinkan.Jika jam telah berubah (
h()!=p
), maka kami memperbarui p dan kemudian mengingatkanBONG
. Operator logika AND digunakan sebagai pelindung (sirkuit pendek jikah()===p
) untuk menentukan apakahBONG
s adalah output.String.prototype.repeat
baru di ES2015 dan menyimpan beberapa karakter menggunakan sesuatu seperti ES5Array.prototype.join
.h
mengembalikan nol untuk kelipatan tepat 12 (yaitu 12 siang, 12 pagi), jadi kami mengubahnya ke 12 menggunakan logika ORp||12
.Dengan terima kasih kepada Kritixi Lithos dan ETHProduk untuk ide-ide.
sumber
Excel VBA, 143 Bytes
Output Kode ke Jendela Segera VBE
Versi menyenangkan, 143 Bytes (Tidak Bersaing)
Meskipun akan lebih sulit untuk mendapatkan yang terbaik untuk pergi BONG, itu cukup mudah untuk mendapatkan yang terbaik untuk pergi
Beep
. TheBeep
panggilan menghasilkan bunyi 'bip', dan kode di bawah menggunakan ini untuk menghasilkan beep menunjukkan jam, pada jam, dipisahkan oleh 1 jeda kedua.Seperti di atas, kode ini membuat excel tampak tidak responsif dan menambahkan
:DoEvents
panggilan ke akhir baris pertama direkomendasikan karena meningkatkan pengalaman pengguna, namun, ini tidak diperlukan untuk eksekusi kode yang benar.Versi Tidak Serigala
sumber
Beep
atauDoEvents
tidak berfungsi dengan benar pada mesin mac.C # 234 Bytes
Saya tidak berencana memenangkan hadiah apa pun di sini, tetapi implementasi C # adalah wajib.
Tidak dikoleksi dengan komentar:
sumber
for(;;)
, ubahh=()=>1+(DateTime.Now.Hour-1)%12;
(catat tidak ada spasi putih juga) dan kemudian Enumerable. Ulangi menjadi("BONG",t)
(menghemat Anda dua atau tiga) lalu singkirkan spasi ekstra yaituif(...)
Perhatikan juga ini akan mencetak semua bong yang digabungkan, mungkin mengambil byte tabungan tersebut untuk mengubah concat menjadi gabung dengan spasi sebagai argumen pertama.Groovy, 72 byte
Bagaimana?
Simpan metode untuk mendapatkan jam saat ini.
Simpan jam awal.
Sementara benar, jika jam saat ini tidak sama dengan jam sebelumnya, jam keluaran saat ini dikalikan dengan "BONG" untuk menampilkan jam saat ini dari bong.
+3 byte
%12
untuk bong non-militer.sumber
perl, 60 byte
Memperbarui
Diganti
" "
dengan$"
, dihapusCORE::
, jumlah dikoreksi.Golf
Ini perlu dijalankan
perl -E
.Catatan
x while y
setara denganwhile(y){x}
(di manax
satu pernyataan) tetapi tidak membutuhkan tanda kurung.sleep
dieksekusi pertama kali sebelum sesuatu dicetak.time
menggunakan UTC. Big Ben asli ada di waktu musim panas (British Summer Time, BST) dari akhir Maret hingga akhir Oktober.sleep
mengembalikan jumlah detik yang ditunggu. Ini akan selalu benar.sumber
-E
flagnya adalah +1 byte (ada halaman di suatu tempat tentang pengukuran flags ...). 2 , saya tidak yakin bagaimana menjalankan ini karenaperl -E golf.pl
tampaknya akan segera berakhir.QBIC , 82 byte
Benar-benar perlu mengubah token untuk literal kode (
$
) dan menerapkan fitur substring (left$(x,y)
bisa lebih pendek).Cara kerja dalam:
Pembaruan (NC): Tidak
$
lagi digunakan dalam set instruksi QBIC, jadi sekarang dapat digunakan secara bebas sebagai kode untuk QBasic tanpa perlu kode literal. Dalam hal ini, menghemat 4 byte, membawa QBIC ke 78 byte:sumber
SmileBASIC,
7467 byteMenghasilkan sejumlah besar jeda baris "trailing";)
Sunting: disimpan 7 byte dengan algoritma 24-> 12 jam yang lebih baik.
sumber
PHP, 63 byte
Saya bisa menyimpan dua byte lagi dengan ASCII yang diperluas. Tapi saya saat ini terlalu malas untuk itu.
mencetak BONGs dengan linebreak terkemuka tepat pada jam penuh. Jalankan dengan
-nr
.sumber
-n
agak implisit (abaikan php.and kembali ke nilai konfigurasi default);-r
memberitahu PHP untuk menjalankan kode dari parameter baris perintah alih-alih dari file.C, 152
Dapat dibaca:
sumber