Legen ... tunggu sebentar ...


68

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:

  1. Mencetak

    Legen... wait for it...
    

    segera, dengan baris baru yang tertinggal.

  2. Tunggu hingga satu jam penuh berikutnya (saat cron bekerja untuk pemberian lencana berjalan).

  3. 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 berlaku.


1
Saya tidak mengerti bagaimana aturan tambahan ketiga berbeda dari "tunggu sampai satu jam berikutnya"
Fatalize

2
@Fatalize Itu hanya klarifikasi bahwa Anda harus menunggu sampai jamnya berubah, tidak sampai menit dan detik keduanya di 00 .
Dennis

25
Lencana Legendaris Selamat, @Dennis!
Kritixi Lithos

36
@ ΚριτικσιΛίθος Terima kasih! (Terima kasih Tuhan untuk penyelesaian tab.)
Dennis

2
"Pada jam" akan menjadi cara yang lebih standar (dan saya percaya jauh lebih jelas) untuk menggambarkan apa yang Anda sebut "jam penuh berikutnya" (setidaknya dalam bahasa Inggris Amerika).
jpmc26

Jawaban:


12

Pyth, 42 41

J.d6." wâ«­hÖ`Ùá©h´^"WqJ.d6;"dary!

Di bawah ini adalah hexdump dari kode:

00000000  4a 2e 64 36 2e 22 20 77  0c 10 89 e2 ab 1b ad 68  |J.d6." w.......h|
00000010  0f 8c d6 60 d9 e1 a9 68  82 b4 5e 22 57 71 4a 2e  |...`...h..^"WqJ.|
00000020  64 36 3b 22 64 61 72 79  21                       |d6;"dary!|

Disimpan 1 byte berkat @isaacg

Menggunakan .dfungsi untuk mendapatkan nilai terkait waktu setempat. .d6mengembalikan 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 .d7atau .d8selama beberapa menit / detik tetapi kompiler online hanya mencetak apa saja ketika program berakhir.

Selamat, Dennis! :)


String dapat dikompresi dengan 1 byte menggunakan packed-str. Hexdump:0000000: 2e22 2077 0c10 89e2 ab1b ad68 0f8c d660 ." w.......h...` 0000010: d9e1 a968 82b4 5e22 0a ...h..^".
isaacg

@isaacg Ups, aku sudah memeriksanya, tapi aku pasti sudah salah menghitung. Saya pikir itu hanya dikompresi 1 byte sehingga ekstra .akan membuatnya sama panjang. Kesalahan off-by-one yang konyol: P
FryAmTheEggman

Hanya mencoba mencari tahu apa yang mungkin dilakukan ini (tanpa pengalaman dengan pyth sama sekali) membuat saya tertawa. Begitu dary, tapi tidak legen! Dan pyth mengklaim lebih mudah dipahami oleh yang terbiasa dengan pemrograman konvensional ...
Cyoce

@Cyoce Jika Anda melihat dalam sejarah edit, Anda dapat menemukan versi yang lebih mudah dibaca. The ."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 :)
FryAmTheEggman

26

JavaScript (ES6), 74 byte

Anda mungkin ingin mengubah jam sistem Anda sebelum pengujian, selamat jika Anda mendarat di sini pada 59 menit yang lalu.

setTimeout(a=alert,36e5-new Date%36e5,"dary!");a`Legen... wait for it...
`


11
Akan 36e5bekerja di tempat 3.6e6?
ETHproduk

8
@ EHProduk, Anda cantik!
George Reith

3
@ ETHproductions Itu adalah beberapa notasi ilmiah yang buruk . Saya tidak tahu itu bekerja pada Javascript. Belajar sesuatu hari ini !!!
Ismael Miguel

2
@Optimizer Ah tidak tahu setTimeoutWould evalbagi saya. Benar ... Saya awalnya mencoba menggunakan console.logtetapi itu bahkan tidak berfungsi ketika disimpan dalam variabel karena konteks. Kamu juga cantik!
George Reith

1
Anda dapat menggunakan setTimeoutdengan benar dan bahkan menghemat satu byte:alert`Legen…`;setTimeout(alert,36e5-new Date%36e5,"dary!")
Bergi

9

CJam, 49 48 byte

et3="Legen... wait for it...
"o{_et3==}g;"dary!"

Menggunakan waktu setempat. Untuk tujuan pengujian, Anda dapat mengganti dua contoh 3dengan 4atau 5membuatnya 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 etyang memberi Anda array

[year month day hour minute second ms weekday utc_offset]

Berikut ini adalah rincian kode:

et3=       e# Get the current hour.
"Legen..." e# Push the first string including the linefeed.
o          e# Print it.
{          e# While the top of stack is truthy (which is popped)...
  _        e#   Copy the original hour.
  et3=     e#   Get the current hour.
  =        e#   Check for equality.
}g
;          e# Discard the original hour.
"dary!"    e# Push the second string which is printed automatically.

Bonus

Ini juga berfungsi untuk jumlah byte yang sama:

et4<"Legen... wait for it...
"o{et1$#!}g;"dary!"

Alih-alih memilih jam, kami memilih awalan dengan tanggal dan jam, dan membuat loop tetap sementara array datetime masih memiliki awalan itu.


9

AppleScript, 157 149 byte

Hah. Mengejutkan bersaing.

set d ke nomor 1 dalam string waktu (tanggal saat ini)
login "Legen ... tunggu ..."
ulangi sementara d = angka 1 dalam string waktu (tanggal saat ini)
akhir
log "dary!"

Sejak logdicetak 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:

string waktu (tanggal saat ini)

Keluaran:

5:02:03 PM

Ini akan mengambil angka pertama ( 5) sebelum titik dua.

Saya pikir itu akan jauh lebih lama dari ini, sebenarnya. xD


Jadi apa yang terjadi jika Anda menjalankannya pada 03:03:00?
Blacklight Shining

@BlacklightShining Ini akan mendapatkan angka 3 di depan dan menunggu sampai jam empat. Ia hanya mengetahui jumlah sebelum usus besar.
Addison Crump

Oh, aku merindukan itu. Baik. Anehnya, saya benar-benar mendapatkan hanya "1"dari number 1 in time string of(current date)...
Blacklight Shining

@BlacklightShining Anda kemungkinan menggunakan versi yang lebih lama - di El Capitan, ini setara dengan first number in time string of (current date).
Addison Crump

Saya di Yosemite, ya. first numberjuga memberi saya hanya digit pertama dari waktu ( "0"sekarang, jam 04:38).
Blacklight Shining

8

Snowman 1.0.2 , 70 69 byte

~"Legen... wait for it...
"sP3600000*vt#nDnC!*:vt+#nD!#nL;bD"dary!"sP

Penjelasan:

~              Make all variables active.
"..."sP        Print the first string.
3600000*vt#nD  Get the number of hours since the Unix epoch.
nC             Ceiling (round up), giving the time (divided by 36000) at which to
                 print the second string.
!*             Save that in a permavar.
:...;bD        Do the stuff in the block while its "return value" is truthy.
  vt+#nD       Again, get the number of hours since epoch.
  !#             Store the permavar that we saved earlier.
  nL             Is the current time less than the target time? (if so,
                   keep looping)
"..."sP        Print the second string.

7

PHP, 76, 70, 65, 62 51 byte

Legen... wait for it...
<?while(+date(is));?>dary!

Logika sebelumnya (63b):

Legen... wait for it...
<?for($h=date(G);date(G)==$h;)?>dary!

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 <?phpke versi pendek <?(thanks primo)
-1 byte dengan mengganti whilefor for
-3 bytes dengan mengganti date(G)!=$h+1ke date(G)==$h(terima kasih banyak)


Bagus, tapi {};dan echo?>akan menguranginya sedikit. Meskipun saya lebih sukaLegen... wait for it...↵<?php while(+date('is'));?>dary!
manatwork

1
Beberapa tips: Anda dapat menggunakan tag terbuka pendek (hanya <?daripada <?php). Menggunakan for(;;)sama panjangnya while(), tetapi memungkinkan Anda untuk memindahkan $htugas, tanpa perlu titik koma ( for($h=date(h);...). Itu {}tidak perlu, tetapi juga bukan ;sebelumnya ?>. Anda mungkin memiliki masalah dengan $h12, meskipun ( date(h)tidak akan pernah 13).
primo

Terima kasih keduanya, perbarui jawaban saya sesuai. Aku merasa tidak enak badan, kurasa aku tidak boleh melakukan pekerjaan penting hari ini, karena itu jelas menunjukkan haha
Martijn

2
Ubah date(G)!=$h+1ke date(G)==$h. Lebih pendek, dan menyelesaikan masalah jam;) Juga, hapus titik koma sebelumnya ?>.
primo

1
@manatwork akan gagal menunggu jika kode dijalankan HH:00:00, yaitu dalam detik pertama dari satu jam penuh.
primo


5

Javascript 94 90 87 byte

Tidak bermain golf sebanyak itu ...

alert`Legen... wait for it...`,l=l=>~~(Date.now()/36e5);for(z=l();z==l(););alert`dary!`

Versi Downgoat:

(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`

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.


2
87 byte:(a=alert)`Legen... wait for it...`,l=new Date,z=(b=l.getHours)();for(;z==b(););a`dary!`
Downgoat

@Downgoat Terima kasih! (Saya mencoba untuk bermain golf sekarang ..)
Stefnotch

1
Bahkan lebih pendek (85 byte):(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`
Downgoat

2
@Downgoat Satu byte lebih pendek:for((a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();z==b(););a`dary!`
Ismael Miguel

4

MATLAB - 89 byte

a=@()hour(now);disp('Legen... wait for it...');while(mod(a()+1,24)~=a())end;disp('dary!')

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 ke whileloop 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 menampilkan dary!dan carriage return terjadi setelahnya.

Jam MATLAB didasarkan pada pengindeksan 24 jam, sehingga modoperasi dengan basis 24 diperlukan untuk menangani tumpahan mulai dari jam 11 malam (23:00) hingga tengah malam (00:00).

Catatan Kecil

The hourFungsi membutuhkan waktu Keuangan Series toolbox. The nowFungsi tidak dikenakan pembatasan ini, tetapi mengambil tanggal dan waktu sebagai nomor seri yang hourdemikian menggunakan untuk menghitung jam saat ini.

Ingin menjalankan ini di Oktaf?

Tentu! Karena Oktaf tidak memiliki kotak alat ini, kami hanya perlu memodifikasi hourfungsi sehingga ia memanggil datevecyang mengembalikan vektor 6 elemen - satu untuk masing-masing tahun, bulan, hari, jam, menit dan detik. Anda hanya perlu mengekstrak elemen keempat dari output:

a=@()datevec(now)(4);disp('Legen... wait for it...');while(mod(a()+1,24)~=a())end;disp('dary!')

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:

disp('Legen... wait for it...');h=datevec(now);ans=h;while(mod(h(4)+1,24)~=ans(4)),datevec(now);end;disp('dary!');

Ini pertama kali mendapatkan waktu dan tanggal saat ini dan menyimpannya ke dalam variabel hserta menyimpannya ke dalam variabel otomatis yang disebut ans. 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 whileperulangan 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.


Dalam satu pertama Anda, Anda bisa menyimpan 3 byte oleh bukannya memeriksa nowdi 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 menghapus a=@()bit karena kode as-is merupakan program lengkap. Kode terlampir juga tidak memerlukan kotak alat FTS.
Tom Carpenter

Bagaimana Anda tahu tentang hourfungsi Financial Toolbox ? :-)
Luis Mendo

Sekarang saya mengerti apa yang Anda maksud dengan komentar Anda tentang perlunya variabel perantara untuk pengindeksan ...
Luis Mendo

4

Mathematica, 85 84 81 byte

c=Print;c@"Legen... wait for it...";a:=DateValue@"Hour";b=a;While[a==b];c@"dary!"

Saya pikir Anda dapat menyimpan 2 byte dengan membuat "dary!" keluaran ekspresi.
CalculatorFeline

@CatsAreFluffy Maka itu hanya akan menjadi cuplikan dan bukan program penuh.
LegionMammal978

Begitu? Bukankah output ekspresi dapat diterima di Mathematica, atau saya kehilangan sesuatu?
CalculatorFeline

Skrip Mathematica @CatsAreFluffy Matematika ada, sehingga setiap program lengkap yang diberikan diharapkan berjalan dalam satu skrip.
LegionMammal978

4

C, 163 byte

#include<time.h>
f(){puts("Legen... wait for it...");time_t t=time(0);struct tm l=*localtime(&t);while(l.tm_min+l.tm_sec)t=time(0),l=*localtime(&t);puts("dary!");}

3
Selamat datang di PPCG!
Erik the Outgolfer

155 byte (jangan repot-repot menjalankannya di TIO, itu tidak akan selesai, akan habis setelah satu menit)
MD XF

3

Microscript II, 45 byte

"Legen... wait for it..."P[36s5E*sD%_]"dary!"

Akhirnya, gunakan untuk Dinstruksi.

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 .


Bisakah Anda menambahkan penjelasan? c:
Addison Crump

@VoteToClose Done
SuperJedi224

3

TI-BASIC, 70 64 byte

getTime
Disp "Legen... wait for it...
Repeat sum(getTime-Ans,1,1
End
"dary

Kutuk huruf kecil dua byte ini!

getTimemengembalikan 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.


3

R - 97 byte

cat('Legen... wait for it...\n')
Sys.sleep(1)
while(as.double(Sys.time())%%3600>0){}
cat('dary!')

3

Python 3 - 92 89 byte

from time import*;print("Legen... wait for it...");sleep(3600-time()%3600);print("dary!")

3

Python 2, 82 81 byte

from time import*;print'Legen... wait for it...';sleep(-time()%3600);print'dary!'

Reputasi 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


1
Satu byte tambahan dapat disimpan dengan menghapus trailing ;di akhir program. Tampaknya bekerja dengan baik tanpa itu. :) Jawaban yang bagus, jadi +1 dari saya (sekarang Anda dapat berkomentar).
Kevin Cruijssen

terima kasih banyak @KevinCruijssen
Henry T

2

Skrip Perintah Windows, 87 byte

@set.=%time:~,2%&echo.Legen... wait for it...
:.
@if %.%==%time:~,2% goto:.
@echo.dary!

Ini secara terus-menerus membandingkan variabel jam yang disimpan pada awal dengan jam saat ini dan berhasil jika berbeda.


2

Perl, 62 byte

sleep -++$^T%3600+print'Legen... wait for it...
';print'dary!'

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:

print$^T%3600;
@T=gmtime;print$T[1]*60+$T[0];

Anehnya, variabel ini bukan hanya baca.


-ESepertinya tidak masuk hitungan lumrah di sini, jadi Anda bisa menghemat 5 byte dengan menggunakan say.
Dennis

Dari deskripsi tantangan: "Anda dapat menulis sebuah program atau fungsi." Kode yang dijalankan dari baris perintah adalah tidak.
primo

Saya mengerti maksud Anda. Namun, pembatasan untuk program atau fungsi berlaku untuk semua tantangan secara default, namun kami masih mengizinkan perl -Epengiriman dan bahasa yang hanya memiliki penerjemah online.
Dennis

Saya tidak setuju bahwa -Eharus diizinkan secara default. Dalam kebanyakan kasus, perbaikan itu sepele dan tidak menarik.
primo

2

Japt , 72 61 byte

`{?tT?e?t(Ã?t,36e5-?w D?e%36e5,'ÜÝ!'),'Leg?... Ø2 f? ?...\n'}

Masing-masing ?mewakili karakter Unicode yang tidak dapat dicetak. Berikut cara mendapatkan teks lengkap:

  1. Buka penerjemah online .
  2. Rekatkan kode ini ke dalam kotak Kode:
Oc"`\{setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\\n'}
  1. Jalankan kode, lalu hapus dari kotak Kode.
  2. Pilih konten kotak Output dan seret ke kotak Kode. Copy-paste tidak akan berfungsi .
  3. Ganti ruang pertama dengan ruang tidak putus.
  4. (opsional) Atur jam komputer Anda ke xx: 59.
  5. Jalankan kodenya.

Atau, berikut adalah hexdump (semoga dapat dibalik):

00000000: 607b a074 548b 658c 7428 c300 742c 3336 65    `{ tT?e?t(Ã?t,36e
00000011: 352d 9a77 2044 8565 2533 3665 352c 27dc dd    5-?w D?e%36e5,'ÜÝ
00000022: 2127 293b 274c 6567 812e 2e2e 20d8 3220 66    !'),'Leg?... Ø2 f
00000033: 8e20 8a2e 2e2e 5c6e 277d                      ? ?...\n'}

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:

`{?tT?e?t(Ã?t,36e5-?w D?e%36e5,'ÜÝ!'),'Leg?... Ø2 f? ?...\n'}
"{setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\n'}"
""+(setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\n')+""

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 JS alertuntuk output berjangka waktu. Saya harap ini diizinkan.


Bisakah Anda memposting hexdump ini?
spaghetto

@quartata Selesai. Saya percaya itu benar.
ETHproduksi

2

Powershell, 52 51 byte

-1 byte terima kasih @Veskah

'Legen... wait for it...'
for(;Date|% M*e){}'dary!'

Ekspresi ini Date|% M*emendapat nilai dari Minuteproperti dari nilai DateTime Saat Ini. Loop berakhir ketika Minutesama dengan 0.


1
Anda harus bisa meletakkan 'dary' langsung setelah kawat gigi, atau setidaknya Anda bisa di PSv5.
Veskah

1

Python, 112 byte

import time as t;print "Legen... wait for it...";n=t.ctime();t.sleep((60-n.tm_min)*60+60-n.tm_sec);print "dary!"

Cukup jelas.


Dapat menghemat 2 dengan menghilangkan spasi di antara pernyataan cetak dan string berikut. :)
Henry T

1

Python - 159 byte

from datetime import*;from threading import*;p=print;n=datetime.now();p('Legen... wait for it...');Timer(3600-(n.minute*60+n.second),lambda:p('dary!')).start()

1

Mouse-2002 , 62 byte

Membutuhkan pengguna untuk menekan enter. Kupikir.

"Legen... wait for it..."?&HOUR 1+x:(&HOUR x.=["dary"33!'0^])

Oke, yah, sementara kita mengambil banyak byte dan tidak memenangkan apa pun, mari bersenang-senang sedikit.

"Legen... wait for it... "?     ~ print & require keypress

&HOUR 1+ x:                     ~ get hr, add 1 and assign
(                               ~ while(1)
  &HOUR x. =                    ~ cmp current hr, stored hr
  [                             ~ if same
    #B;                           ~ backspace
    "dary"36!'                    ~ print this string and a !
    0^                            ~ exit cleanly
  ]                             ~ fi
  &MIN 59 - &ABS !              ~ get min, subtract from 59, abs & print
  ":"                           ~ record sep
  &SEC 59 - &ABS !              ~ same for second
  #B;                           ~ backspace
)
$B 8!' 8 !' 8 !' 8 !' 8 !'@     ~ backspace 5*
$                               ~ \bye

Sampel:

$ mouse legend.m02
Legen... wait for it... 20:32

Lihat, ini penghitung waktu mundur yang diperbarui di jam berikutnya! Itu memanfaatkan loop sementara, yang bahkan tidak melakukan apa pun akan menempati inti.


1

BASIC, 90 byte

Print"Legen... wait for it...":x$=Left(Time,2):Do:Loop Until x$<>Left(Time,2):Print"dary!"

Terus terang, golf menggunakan awalan jenis dan Endpernyataan implisit . Biaya adalah hanya berfungsi dalam dialek FreeBasicfblite .


1

Befunge 98 - 69 63 bytes

 v
v>a"...ti rof tiaw ...negeL<ETB>"k,
>"EMIT"4(MS+_"!yrad"5k,@

Kode 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.


1

Jelly , 48 47 byte , tidak bersaing

-1 byte berkat Erik the Golfer (gunakan "Leg" sebagai kata dalam kompresi)

“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»Ṅø3ŒTṣ”:V_@59ḅ60‘œS@“dary!”

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:00ia menunggu selama beberapa 3600detik: ia mengonversi "00:00"untuk [0,0]kemudian mengurangkannya dari 59untuk menghasilkan [59,59], mengonversinya dari basis enam puluh untuk diberikan 3599, kemudian menambahkan satu untuk periode tunggu total 3600detik.

Mungkin satu lingkaran bisa dibuat; atau string terkompresi menggunakan seluruh kata "Legendaris" dapat digunakan entah bagaimana?

“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»Ṅø3ŒTṣ”:V_@59ḅ60‘œS@“dary!” - Main link: no arguments
“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»                            - compressed "Legen... wait for it..."
                    Ṅ                           - print z + '\n', return z
                     ø                          - niladic chain separation
                      3ŒT                       - '011' (3) time formatted string = "mm:ss"
                         ṣ”:                    - split on ':' -> ["mm","ss"]
                            V                   - eval -> [m,s]
                             _@59               - subtract from 59 - > [59-m, 59-s]
                                 ḅ60            - convert from base 60 -> 60*(59-m)+(59-s)
                                    ‘           - increment -> 60*(59-m)+(59-s) = y
                                        “dary!” - "dary!" = x
                                     œS@        - sleep y seconds then return x
                                                - implicit print

1
Gunakan “ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»sebagai ganti “¤ßƇṪOƭ!½ȯƤxEẹ<Ȯ¹z7⁷». Leg(dari Legen) juga sebuah kata :) Juga, jawaban ini tidak valid, karena itu tergantung pada menit dan detik keduanya 00. Anda harus melakukan sesuatu dengan 4ŒTsebagai 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.
Erik the Outgolfer

Keren, "Leg" menyimpan satu byte, terima kasih. Namun, tautan berfungsi pada saat dipanggil 00:00karena 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 dari 59menghasilkan [59,59]konversi yang dari basis enam puluh untuk mendapatkan 3599dan kemudian menambahkan satu untuk mendapatkan 3600(mengujinya menggunakan versi tes dengan "00:00"di tempat "59:57")
Jonathan Allan

1
Oh Sepertinya saya tidak bisa membaca kode Jelly panjang, dan saya tidak bisa tahu kegunaan dan harapan semua orang :) Meskipun, dalam penjelasannya, saya pikir itu 60*(59-m)+(59-s)pasti 60*(59-m)+(59-s)+1, yang kedua kali muncul?
Erik the Outgolfer

Tidak masalah - komentarnya bukan yang paling jelas yang pernah saya tulis.
Jonathan Allan

Nah, jika Anda tidak dapat mengambil kerumitan, saya dapat mengeditnya. Juga, saya akan merekomendasikan melakukan x / y sebagai kiri / kanan, dan katakan saja sleep x seconds then return y- karena <dyad>@dapat didefinisikan sebagai angka dua lain dengan arg bertukar.
Erik the Outgolfer

1

MathGolf , 39 byte

"Legen... wait for it..."pÆt♪/╚÷▼"dary!

Cobalah online!

Hampir mengalahkan Pyth ...

Penjelasan

Æ     ▼  Repeat the next 5 characters while false
 t       push unix time in milliseconds
  ♪/     divide by 1000
    ╚÷   check if divisible by 3600 (tio solution has 3 in its place)

"Hampir"? Sepertinya Anda melakukannya.
Patrick Roberts

@ PatrickRoberts ada solusi pyth lain yang 36 byte, tidak bisa sampai di sana bahkan dengan string terkompresi dan trik lainnya.
Maks.

Oh itu. Itu salah, lihat komentar.
Patrick Roberts

@ PatrickRoberts saya mungkin gagal pada kriteria "harus menunggu satu jam jika dijalankan pada 00:00" juga, tetapi saya bisa mengubahnya untuk memeriksa Unixtime dalam milidetik yang dapat dibagi oleh 3600000 dengan jumlah byte yang sama. Karena cetakan pertama harus lebih dari satu milidetik, seharusnya selalu bekerja
maxb

0

Pyth - 36 byte

Menunggu hingga menit adalah 0 dengan loop sementara.

"Legen... wait for it..."W.d7)"dary!

11
Anda harus menunggu hingga menit dan detik adalah 0, dan juga menunggu satu jam penuh jika program dijalankan pada:00:00
lirtosiast

0

Java, 136 byte

class a{void A(){System.out.println("Legen... wait for it...");while(System.currentTimeMillis()%3600000!=0);System.out.print("dary!");}}

Berapa milidetik yang berlalu sejak satu jam penuh terakhir adalah hasil dari System.currentTimeMillis()mod 3.600.000.

Program monolitik setara adalah 159 byte:

interface a{static void main(String[]A){System.out.println("Legen... wait for it...");while(System.currentTimeMillis()%3600000!=0);System.out.print("dary!");}}

0

QBIC , 58 byte

?@Legen... wait for it...|#Dary!|{~mid$$|(_d,4,2)=@00||_XB

Penjelasan

?@Legen... wait for it...|     Define string literal "Leg[..]it..." and print it
#Dary!|                        Define string B as "Dary!", but don't use it yet
{                              Opens an indefinite DO loop
~mid$$|(...)=@00|              Translates to IF MID$(...) = C$, where C$ is "00"
    The MID$ takes two characters, starting from pos 4, from the system's time (_d)
    So, if the string "11:00" has "00" starting at pos 4,
_XB                            Terminate the program and print string B
(The DO loop and the IF are closed implicitly)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.