dary!
Dalam acara yang sama sekali tidak terkait dengan apa yang diharapkan akan terjadi pada saya dalam beberapa hari ke depan, saya menugaskan Anda untuk menulis kode yang melakukan hal berikut:
Mencetak
Legen... wait for it...
segera, dengan baris baru yang tertinggal.
Tunggu hingga satu jam penuh berikutnya (saat cron bekerja untuk pemberian lencana berjalan).
Mencetak
dary!
dengan baris tambahan opsional .
Aturan tambahan
Anda dapat menulis program atau fungsi, tetapi hasilnya harus dicetak ke STDOUT (atau alternatif terdekat dari bahasa Anda).
Anda harus menunggu hingga satu jam penuh berikutnya , bukan hanya selama 60 menit. Jika kode dijalankan pada 6:58, harus mencetak baris kedua pada 7:00.
Baris terakhir harus dicetak paling lambat satu detik setelah satu jam berikutnya.
Jika program dimulai pada detik pertama dari satu jam penuh, itu harus menunggu satu jam penuh berikutnya.
Anda dapat menanyakan waktu setempat atau UTC.
Aturan standar kode-golf berlaku.
Jawaban:
Pyth,
4241Di bawah ini adalah hexdump dari kode:
Disimpan 1 byte berkat @isaacg
Menggunakan
.d
fungsi untuk mendapatkan nilai terkait waktu setempat..d6
mengembalikan jam saat ini. Ini mencetak string pertama, kemudian menunggu hingga jam berbeda dari jam iklan di awal program, dan kemudian mencetak string kedua.Anda dapat mencobanya secara online dengan
.d7
atau.d8
selama beberapa menit / detik tetapi kompiler online hanya mencetak apa saja ketika program berakhir.Selamat, Dennis! :)
sumber
0000000: 2e22 2077 0c10 89e2 ab1b ad68 0f8c d660 ." w.......h...` 0000010: d9e1 a968 82b4 5e22 0a ...h..^".
.
akan membuatnya sama panjang. Kesalahan off-by-one yang konyol: Pdary
, tapi tidaklegen
! Dan pyth mengklaim lebih mudah dipahami oleh yang terbiasa dengan pemrograman konvensional ...."
menunjukkan bahwa string harus memiliki beberapa operasi yang dilakukan di atasnya untuk mendapatkan string nyata. Ini hanya trik kompresi untuk bermain golf. Jika Anda memutuskan untuk mencoba belajar Pyth, semoga beruntung! Jangan lupa ada ruang obrolan juga untuk itu :)JavaScript (ES6), 74 byte
Anda mungkin ingin mengubah jam sistem Anda sebelum pengujian, selamat jika Anda mendarat di sini pada 59 menit yang lalu.
sumber
36e5
bekerja di tempat3.6e6
?setTimeout
Wouldeval
bagi saya. Benar ... Saya awalnya mencoba menggunakanconsole.log
tetapi itu bahkan tidak berfungsi ketika disimpan dalam variabel karena konteks. Kamu juga cantik!setTimeout
dengan benar dan bahkan menghemat satu byte:alert`Legen…`;setTimeout(alert,36e5-new Date%36e5,"dary!")
CJam,
4948 byteMenggunakan waktu setempat. Untuk tujuan pengujian, Anda dapat mengganti dua contoh
3
dengan4
atau5
membuatnya mencetak pada awal menit / detik berikutnya.Uji di sini. Tetapi perhatikan bahwa juru bahasa online tidak menunjukkan keluaran apa pun sampai program berakhir. Atau, Anda dapat menjalankannya pada Cobalah secara online , di mana output ditunjukkan hampir segera bukannya buffered (tapi ketika Anda mengujinya dengan detik bukan jam, penundaan akan terlihat). Bagaimanapun, jika Anda menjalankannya secara lokal dengan Java interpreter, itu berfungsi seperti pesona.
Penjelasan
Ini menggunakan CJam
et
yang memberi Anda arrayBerikut ini adalah rincian kode:
Bonus
Ini juga berfungsi untuk jumlah byte yang sama:
Alih-alih memilih jam, kami memilih awalan dengan tanggal dan jam, dan membuat loop tetap sementara array datetime masih memiliki awalan itu.
sumber
AppleScript,
157149 byteHah. Mengejutkan bersaing.
Sejak
log
dicetak ke panel Pesan dari Script Editor, saya menganggap itu sebagai output terdekat ke STDOUT. Pada dasarnya, jika Anda mendapatkan rangkaian waktu dari tanggal saat ini, itu akan melakukan sesuatu seperti ini:Kode:
Keluaran:
Ini akan mengambil angka pertama (
5
) sebelum titik dua.Saya pikir itu akan jauh lebih lama dari ini, sebenarnya. xD
sumber
"1"
darinumber 1 in time string of(current date)
...first number in time string of (current date)
.first number
juga memberi saya hanya digit pertama dari waktu ("0"
sekarang, jam 04:38).Snowman 1.0.2 ,
7069 bytePenjelasan:
sumber
PHP,
76, 70, 65, 6251 byteLogika sebelumnya (63b):
Pengkodean semacam ini membuat Anda kehilangan pekerjaan, tetapi pengulangan ini sampai waktunya 1 jam lebih jauh daripada init.
-1 byte dengan mengganti
{}
afer the while ke;
(thanks manatwork)-5 bytes dengan mengganti
echo'dary!';
ke?>dary!
(thanks manatwork)-4 bytes dengan mengganti
<?php
ke versi pendek<?
(thanks primo)-1 byte dengan mengganti
while
forfor
-3 bytes dengan mengganti
date(G)!=$h+1
kedate(G)==$h
(terima kasih banyak)sumber
{}
→;
danecho
→?>
akan menguranginya sedikit. Meskipun saya lebih sukaLegen... wait for it...↵<?php while(+date('is'));?>dary!
<?
daripada<?php
). Menggunakanfor(;;)
sama panjangnyawhile()
, tetapi memungkinkan Anda untuk memindahkan$h
tugas, tanpa perlu titik koma (for($h=date(h);...
). Itu{}
tidak perlu, tetapi juga bukan;
sebelumnya?>
. Anda mungkin memiliki masalah dengan$h
12, meskipun (date(h)
tidak akan pernah 13).date(G)!=$h+1
kedate(G)==$h
. Lebih pendek, dan menyelesaikan masalah jam;) Juga, hapus titik koma sebelumnya?>
.HH:00:00
, yaitu dalam detik pertama dari satu jam penuh.Perl 6 , 60 byte
sumber
60²
baru saja ditambahkan beberapa hari yang laluJavascript
94 9087 byteTidak bermain golf sebanyak itu ...
Versi Downgoat:
Ia menyimpan jam saat ini dan loop selama jam "lama" sama dengan jam saat ini. Begitu jam telah berubah, itu akan mencetak sisanya! : D
Penafian: Jika browser Anda tidak menyukainya, Anda telah diperingatkan.
sumber
(a=alert)`Legen... wait for it...`,l=new Date,z=(b=l.getHours)();for(;z==b(););a`dary!`
(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`
for((a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();z==b(););a`dary!`
MATLAB - 89 byte
Cukup jelas. Pertama, buat pegangan fungsi untuk mengambil jam saat sistem jam. Kemudian, tampilkan
Legen... wait for it...
dengan carriage return, dan kemudian kita masuk kewhile
loop di mana kita terus memeriksa untuk melihat apakah jam saat ini ditambah dengan 1 tidak sama dengan jam saat ini. Jika ya, terus lakukan perulangan. Hanya sampai saat ketika jam berikutnya terjadi, kami menampilkandary!
dan carriage return terjadi setelahnya.Jam MATLAB didasarkan pada pengindeksan 24 jam, sehingga
mod
operasi dengan basis 24 diperlukan untuk menangani tumpahan mulai dari jam 11 malam (23:00) hingga tengah malam (00:00).Catatan Kecil
The
hour
Fungsi membutuhkan waktu Keuangan Series toolbox. Thenow
Fungsi tidak dikenakan pembatasan ini, tetapi mengambil tanggal dan waktu sebagai nomor seri yanghour
demikian menggunakan untuk menghitung jam saat ini.Ingin menjalankan ini di Oktaf?
Tentu! Karena Oktaf tidak memiliki kotak alat ini, kami hanya perlu memodifikasi
hour
fungsi sehingga ia memanggildatevec
yang mengembalikan vektor 6 elemen - satu untuk masing-masing tahun, bulan, hari, jam, menit dan detik. Anda hanya perlu mengekstrak elemen keempat dari output:Karakter tambahan membuat solusinya mencapai 98 byte, tetapi Anda akan dapat menjalankan ini dalam Oktaf. Perhatikan pengindeksan di tempat tanpa variabel sementara dalam fungsi menangani.
Tidak Ada Toolbox Seri Waktu Keuangan?
Jika Anda ingin menjalankan ini di MATLAB tanpa Financial Time Series Toolbox, karena Anda tidak dapat langsung mengindeks ke dalam variabel tanpa variabel temporer, ini akan membutuhkan sedikit lebih banyak byte untuk ditulis:
Ini pertama kali mendapatkan waktu dan tanggal saat ini dan menyimpannya ke dalam variabel
h
serta menyimpannya ke dalam variabel otomatis yang disebutans
. Setelah itu, kami terus mengulang dan memeriksa apakah jam saat ini tidak sama dengan jam berikutnya. Pada setiap iterasi, kami terus memperbarui variabel otomatis dengan waktu dan tanggal saat ini. Segera setelah jam berikutnya sesuai dengan waktu dan tanggal saat ini, kami menampilkan bagian terakhir dari string dan berhenti. Ini mendorong jumlah byte ke 114.Perhatikan juga bahwa Anda tidak dapat mencoba ini secara online. Interpreter oktaf online akan memiliki batas waktu kapan kode dijalankan, dan karena ini adalah
while
perulangan menunggu jam berikutnya terjadi, Anda akan mendapatkan batas waktu sambil menunggu kode dijalankan. Hal terbaik yang dapat Anda lakukan adalah menjalankannya di komputer Anda sendiri dan memeriksa apakah itu berfungsi.sumber
now
di loop sementara:a=@()disp('Legen... wait for it...');while floor(mod(now*86400,3600))end;disp('dary!')
. Anda juga dapat menyimpan 5 byte lebih lanjut dengan menghapusa=@()
bit karena kode as-is merupakan program lengkap. Kode terlampir juga tidak memerlukan kotak alat FTS.hour
fungsi Financial Toolbox ? :-)Mathematica,
858481 bytesumber
C, 163 byte
sumber
Microscript II, 45 byte
Akhirnya, gunakan untuk
D
instruksi.Mencetak string pertama, berulang kali mengambil waktu UTC dalam milidetik modulo 3.600.000 hingga ini menghasilkan 0, dan kemudian menghasilkan string kedua yang dicetak secara implisit. The 3.600.000 diwakili dalam kode sebagai 36x10 5 .
sumber
TI-BASIC,
7064 byteKutuk huruf kecil dua byte ini!
getTime
mengembalikan daftar tiga elemen{hours minutes seconds}
, jadi jumlah dari elemen 1 ke 1 adalah jam. Ketika ada perbedaan antara jam di awal dan jam saat ini, loop berakhir. Terima kasih kepada @FryAmTheEggman untuk pengamatan ini.sumber
R - 97 byte
sumber
Python 3 -
9289 bytesumber
Python 2,
8281 byteReputasi komentar terlalu rendah. Versi Python 2 dari solusi Alexander Nigl. Menghemat karakter yang hilang di tanda kurung. Juga, 3600 tidak diperlukan dalam perhitungan waktu tidur.
7 karakter disimpan secara keseluruhan.
Sunting: -1 byte terima kasih kepada @Kevin Cruijssen
sumber
;
di akhir program. Tampaknya bekerja dengan baik tanpa itu. :) Jawaban yang bagus, jadi +1 dari saya (sekarang Anda dapat berkomentar).Skrip Perintah Windows, 87 byte
Ini secara terus-menerus membandingkan variabel jam yang disimpan pada awal dengan jam saat ini dan berhasil jika berbeda.
sumber
Perl, 62 byte
Variabel khusus
$^T
(alias$BASETIME
) mencatat angka detik sejak zaman dari saat skrip dimulai. Untungnya, detik kabisat tidak dihitung secara total, sehingga yang berikut ini setara:Anehnya, variabel ini bukan hanya baca.
sumber
-E
Sepertinya tidak masuk hitungan lumrah di sini, jadi Anda bisa menghemat 5 byte dengan menggunakansay
.perl -E
pengiriman dan bahasa yang hanya memiliki penerjemah online.-E
harus diizinkan secara default. Dalam kebanyakan kasus, perbaikan itu sepele dan tidak menarik.Japt ,
7261 byteMasing-masing
?
mewakili karakter Unicode yang tidak dapat dicetak. Berikut cara mendapatkan teks lengkap:Atau, berikut adalah hexdump (semoga dapat dibalik):
Kode ini didasarkan pada jawaban JavaScript George Reith , dengan beberapa perubahan spesifik-Japt. Saya menemukan beberapa hari yang lalu bahwa jika Anda mengkompres kode dan memasukkannya ke dalam string yang dibungkus backtick, itu akan secara otomatis mendekompresi. Begini caranya diproses melalui kompilasi:
Di JS, sepasang tanda kurung akan mengembalikan nilai terakhir di dalamnya; dengan demikian, kode ini menetapkan peristiwa waktunya, kemudian mengembalikan
'Legen...'
string, yang secara otomatis dikirim ke STDOUT. Karena Japt saat ini tidak memiliki cara untuk menambahkan konten ke STDOUT selain output otomatis pada kompilasi, saya malah menggunakan fungsi vanilla JSalert
untuk output berjangka waktu. Saya harap ini diizinkan.sumber
Powershell,
5251 byte-1 byte terima kasih @Veskah
Ekspresi ini
Date|% M*e
mendapat nilai dariMinute
properti dari nilai DateTime Saat Ini. Loop berakhir ketikaMinute
sama dengan 0.sumber
Python, 112 byte
Cukup jelas.
sumber
Python - 159 byte
sumber
Mouse-2002 , 62 byte
Membutuhkan pengguna untuk menekan enter. Kupikir.
Oke, yah, sementara kita mengambil banyak byte dan tidak memenangkan apa pun, mari bersenang-senang sedikit.
Sampel:
Lihat, ini penghitung waktu mundur yang diperbarui di jam berikutnya! Itu memanfaatkan loop sementara, yang bahkan tidak melakukan apa pun akan menempati inti.
sumber
BASIC, 90 byte
Terus terang, golf menggunakan awalan jenis dan
End
pernyataan implisit . Biaya adalah hanya berfungsi dalam dialek FreeBasicfblite
.sumber
Befunge 98 -
6963 bytesKode tersebut berisi satu karakter yang tidak patut dicetak (direpresentasikan oleh
<ETB>
sebagai unsintables tampaknya tidak muncul di blok kode). Kode karakternya adalah 23 ( karakter blok transmisi Akhir ).Peringatan: Kode sebelumnya akan berjalan dalam loop sibuk dengan tumpukan semakin besar setiap pengulangan dan dengan demikian dapat menghabiskan banyak memori.
sumber
Jelly ,
4847 byte , tidak bersaing-1 byte berkat Erik the Golfer (gunakan "Leg" sebagai kata dalam kompresi)
TryItOnline! atau menjalankan versi uji dengan string-format-string
“59:57”
("mm: ss") yangdikodekan waktu.Komit pertama Jelly dibuat oleh Dennis hanya beberapa hari setelah dia menciptakan tantangan ini, saya tidak yakin pada tanggal berapa kode ini pertama kali bekerja, tetapi tidak bersaing dalam hal apa pun.
Ada, pada saat penulisan, hanya satu cara untuk mengakses waktu yaitu dengan cara string terformat
ŒT
,.Kode ini menghitung berapa lama menunggu dan kemudian tidur. Jika dipanggil,
hh:00:00
ia menunggu selama beberapa3600
detik: ia mengonversi"00:00"
untuk[0,0]
kemudian mengurangkannya dari59
untuk menghasilkan[59,59]
, mengonversinya dari basis enam puluh untuk diberikan3599
, kemudian menambahkan satu untuk periode tunggu total3600
detik.Mungkin satu lingkaran bisa dibuat; atau string terkompresi menggunakan seluruh kata "Legendaris" dapat digunakan entah bagaimana?
sumber
“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»
sebagai ganti“¤ßƇṪOƭ!½ȯƤxEẹ<Ȯ¹z7⁷»
.Leg
(dariLegen
) juga sebuah kata :) Juga, jawaban ini tidak valid, karena itu tergantung pada menit dan detik keduanya00
. Anda harus melakukan sesuatu dengan4ŒT
sebagai gantinya, karena ada aturan yang menyatakan bahwa,In the event that the program is started in the first second of a full hour, it should it wait for the next full hour.
00:00
karena tidak menguji kondisi itu - menghitung berapa detik hingga detik berikutnya"00:00"
dan kemudian menunggu. Jadi itu akan dikonversi"00:00"
untuk[0,0]
mengurangi dari59
menghasilkan[59,59]
konversi yang dari basis enam puluh untuk mendapatkan3599
dan kemudian menambahkan satu untuk mendapatkan3600
(mengujinya menggunakan versi tes dengan"00:00"
di tempat"59:57"
)60*(59-m)+(59-s)
pasti60*(59-m)+(59-s)+1
, yang kedua kali muncul?sleep x seconds then return y
- karena<dyad>@
dapat didefinisikan sebagai angka dua lain dengan arg bertukar.MathGolf , 39 byte
Cobalah online!
Hampir mengalahkan Pyth ...
Penjelasan
sumber
Pyth - 36 byte
Menunggu hingga menit adalah 0 dengan loop sementara.
sumber
:00:00
Java, 136 byte
Berapa milidetik yang berlalu sejak satu jam penuh terakhir adalah hasil dari
System.currentTimeMillis()
mod 3.600.000.Program monolitik setara adalah 159 byte:
sumber
QBIC , 58 byte
Penjelasan
sumber