Legen… bekle…


68

dary!

Önümüzdeki birkaç gün içinde başıma geleceklerim ile tamamen ilgisiz olan olaylarda , aşağıdakileri yapan kodları yazmanızı rica ediyorum:

  1. baskı

    Legen... wait for it...
    

    derhal, takip eden bir newline ile.

  2. Bir sonraki tam saate kadar bekleyin (rozeti vermek için cron işi başladığında).

  3. baskı

    dary!
    

    bir ile isteğe bağlı firar yeni satır.

Ek kurallar

  • Bir program veya işlev yazabilirsiniz, ancak çıktının STDOUT'a (veya kendi dilinize en yakın alternatifi) yazdırılması gerekir.

  • Bir sonraki tam saate kadar beklemelisin , sadece 60 dakika. Kod 6: 58'de çalıştırılırsa, ikinci satırı saat 7: 00'de yazdırması gerekir.

  • Son satır, bir sonraki tam saatten bir saniye sonra basılmalıdır.

  • Programın tam bir saatin ilk saniyesinde başlatılması durumunda, bir sonraki tam saat için beklemesi gerekir.

  • Yerel veya UTC zamanını sorgulayabilirsiniz.

  • Standart kuralları geçerlidir.


1
Üçüncü ek kuralın temel "bir sonraki tam saate kadar bekle" den ne kadar farklı olduğunu anlamıyorum
Fatalize

2
@Fartalize Bu sadece dakika ve saniyenin her ikisi de 00 olana kadar saat değişene kadar beklemeniz gereken bir açıklamadır .
Dennis

25
Mutlu Efsanevi Rozeti, @Dennis!
Kritixi Lithos

36
@ ΚριτικσιΛίθος Teşekkürler! (Tab tamamlama için Tanrıya şükür.)
Dennis

2
"Bir saatte", daha sonraki bir saat ("en azından Amerikan İngilizcesi") olarak adlandırdığınız şeyi tarif etmenin daha standart (ve çok daha net olduğuna inanıyorum) bir yoludur.
jpmc26

Yanıtlar:


12

Pyth, 42 41

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

Aşağıda kodun altıgen bir dökümü bulunmaktadır:

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!|

@İsaacg sayesinde 1 bayt kaydedildi

.dYerel zamana bağlı değerleri almak için işlevi kullanır . .d6o anki saati döndürür. Bu ilk dizgiyi yazdırır, sonra saat programın başlangıcındaki saat ve saatten farklı olana kadar bekler ve ardından ikinci dizgiyi yazdırır.

Çevrimiçi .d7veya .d8dakika / saniye boyunca çevrimiçi deneyebilirsiniz, ancak çevrimiçi derleyici yalnızca program sonlandığında bir şey yazdırır.

Tebrikler Dennis! :)


Dize paketlenmiş str kullanarak 1 bayt ile sıkıştırılabilir. Hexdump:0000000: 2e22 2077 0c10 89e2 ab1b ad68 0f8c d660 ." w.......h...` 0000010: d9e1 a968 82b4 5e22 0a ...h..^".
isaacg

@isaacg Hata! Bunu kontrol etmiştim ama saymayı berbat etmeliyim. Sadece 1 byte sıkıştırıldığını düşündüm, bu yüzden fazladan .onu aynı uzunlukta yapabilirdi. Aptal off-by-one hataları: P
FryAmTheEggman

Sadece bunun neler yapabileceğini anlamaya çalışıyorum (hiçbir zaman pyth deneyimim olmadan) beni güldürdü. Anladım daryama hayır legen! Ve pyth, geleneksel programlamaya
alışanlar

@Cyoce Düzenleme geçmişine bakarsanız, okunması daha kolay bir sürümünü bulabilirsiniz. ."Dize gerçek dize almak için onun gerçekleştirilen bazı işlemler olması gerektiğini belirtir. Bu sadece golf oynamak için bir sıkıştırma hilesi. Pyth'u öğrenmeye karar verirseniz, bol şans! Bunun için bir sohbet odası olduğunu unutma :)
FryAmTheEggman

26

JavaScript (ES6), 74 bayt

Testten önce sistem saatinizi değiştirmek isteyebilir, 59 dakika sonra buraya geldiğiniz için tebrikler.

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


11
36e5Yerine işe yarar mıydı 3.6e6?
ETHProductions

8
@ETHproductions Size güzellik!
George Reith

3
@ETHproductions Bu bazı kötü bilimsel gösterimdir. Javascript üzerinde çalıştığını bilmiyordum. Bugün bir şey öğrendim !!!
Ismael Miguel

2
@Optimizer Ah benim için setTimeoutolacağını bilmiyordu eval. Doğru ... Aslında kullanmaya çalışıyordum console.logama bu bağlamda bir değişkende saklandığında bile işe yaramaz. Sen de güzelsin!
George Reith

1
setTimeoutDüzgün kullanmak ve hatta bir byte tasarruf edebilirsiniz:alert`Legen…`;setTimeout(alert,36e5-new Date%36e5,"dary!")
Bergi

9

CJam, 49 48 bayt

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

Yerel saati kullanır. Test amacıyla, iki dakikayı bir sonraki dakika / saniyenin başlangıcında yazdırmak için veya 3ile değiştirebilirsiniz .45

Burada test et. Ancak, çevrimiçi tercümanın program sona erene kadar herhangi bir çıktı göstermediğini unutmayın. Alternatif olarak, çalıştırabilirsiniz Çevrimiçi deneyin , çıktının tamponlama yerine hemen hemen gösterildiği (ancak saat yerine saniyelerle test ettiğinizde gecikme fark edilir). Her durumda, yerel olarak Java tercümanı ile çalıştırıyorsanız, bir cazibe işlevi görür.

açıklama

Bu etsize bir dizi verir CJam'ın kullanımını sağlar

[year month day hour minute second ms weekday utc_offset]

İşte kod bir dökümü:

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

Bu aynı byte sayısı için de geçerlidir:

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

Saati seçmek yerine, tarih ve saat ile ön eki seçiyoruz ve datetime dizisi hala bu ön eke sahipken döngüyü devam ettiriyoruz.


9

AppleScript, 157 149 bayt

Huh. Şaşırtıcı şekilde yarışıyor.

dizgesini d ile 1 numaraya ayarlayın (geçerli tarih)
log "Legen ... bekle ..."
d = d = 1 olduğunda (geçerli tarih) sayı 1
son
"Dary!" Log

Yana logSenaryo Editör Mesajlar bölmesine baskılar, ben STDOUT en yakın çıkış olarak görüyoruz. Temel olarak, geçerli tarihin zaman dizesini alırsanız, şöyle bir şey yapacaktır:

Kod:

saat dizesi (geçerli tarih)

Çıktı:

5:02:03 PM

Kolondan önceki ilk sayıyı ( 5) alacaktır .

Aslında bundan daha uzun olacağını düşünmüştüm. xD


Peki 03: 03: 00'da çalıştırırsanız ne olur?
Blacklight

@BlacklightShining Öndeki 3 sayısını alır ve dört olana kadar bekler. Sadece kolondan önceki sayının farkındadır.
Addison Crump

Ah, bunu özledim. Tamam. Garibi, aslında sadece alıyorum "1"dan number 1 in time string of(current date)...
Blacklight Shining

@BlacklightShining Muhtemelen daha eski bir versiyon kullanıyorsunuz - El Capitan'da buna eşdeğerdir first number in time string of (current date).
Addison Crump,

Evet, Yosemite'deyim. first numberAyrıca bana sadece zamanın ilk basamağını verir ( "0"şu an 04:38 de).
Blacklight

8

Kardan adam 1.0.2 , 70 69 bayt

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

Açıklama:

~              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 bayt

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

Önceki mantık (63b):

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

Bu tür bir kodlama sizi işinizi kaybeder, ancak bu süre init'ten 1 saat daha geçene kadar döngüler.

-1 değiştirerek bayt {}için süre afer ;(sayesinde manatwork)
-5 bayt değiştirerek echo'dary!';için ?>dary!(sayesinde manatwork)
-4 bayt yerine <?phpkısa sürümüne <?(sayesinde primo)
-1 bayt değiştirerek whilebir için for
değiştirerek -3 bayt date(G)!=$h+1için date(G)==$h(teşekkürler primo)


Güzel olanı, ancak {};ve echo?>onu biraz azaltır. Tercih Legen... wait for it...↵<?php while(+date('is'));?>dary!
etsem de

1
Birkaç ipucu: kısa açık etiketler kullanabilirsiniz (sadece <?değil <?php). Kullanımı for(;;), aynı uzunluktadır while()ancak $hyarı-kolona ( for($h=date(h);...) ihtiyaç duymadan ödevi hareket ettirmenizi sağlar . {}Gerekli değildi, ama ne olduğunu ;önceki ?>. $hBununla birlikte 12 yaşında bir problemin olabilir ( date(h)asla 13 olmayacak).
primo

İkinize de teşekkür ediyorum, cevabımı buna göre güncelledim. Kendimi iyi hissetmiyorum, bugün önemli bir iş yapmamalıyım, çünkü açıkça gösteriyor ki haha
Martijn

2
Değişim date(G)!=$h+1için date(G)==$h. Daha kısa ve saat problemini çözer;) Ayrıca, önce yarı-kolonu çıkarın ?>.
primo

1
@ yönetim, kodun çalışıp çalışmadığını HH:00:00, yani tam bir saatin ilk saniyesinde bekleyemez .
primo


5

Javascript 94 90 87 bayt

O kadar golf oynamam ...

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

Downgoat'ın versiyonu:

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

Geçerli saati kaydeder ve "eski" saat geçerli olana eşit olduğu sürece döngüler. Saat değiştiğinde, gerisini basacak! : D

Feragatname: Tarayıcınız beğenmezse, uyarılırsınız.


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

@Downgoat Teşekkürler! (Şu anda golf oynamaya çalışıyorum ..)
Stefnotch

1
Hatta daha kısa (85 bayt):(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`
Downgoat

2
@Downgoat Bir bayt kısa:for((a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();z==b(););a`dary!`
Ismael Miguel

4

MATLAB - 89 bayt

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

Oldukça kendini açıklayıcı. İlk olarak, sistem saatinin o andaki saatini almak için bir işlev tutamacı oluşturun. Ardından, Legen... wait for it...satır başı gösterildiğinde ekrana gelir ve ardından while1 ile eklenen geçerli saatin mevcut saate eşit olup olmadığını kontrol etmeye devam ettiğimiz bir döngüye gireriz. Eğer öyleyse, döngü devam edin. Sadece bir sonraki saatin gerçekleştiği an olana kadar görüntüleriz dary!ve satır başı sonra gelir.

MATLAB'ın saati, 24 saatlik endekslemeye dayanmaktadır, bu nedenle modtaban 24 ile operasyonun, öğleden sonradan 23: 00'ten gece yarısına (00: 00) kadar işlemesi gerekir.

Küçük Not

hourFonksiyon Mali Zaman Serisi araç kutusunu gerektirir. nowFonksiyon bu kısıtlamaya tabi değildir, ama bir seri numarası olarak geçerli tarih ve saati alır hourböylece şimdiki saat hesaplamak için kullanır.

Bunu Octave'da mı çalıştırmak istiyorsun?

Elbette! Octave bu araç kutusuna sahip olmadığından, sadece 6 elemanlı bir vektör döndüren , hourfonksiyonu datevecyıl, ay, gün, saat, dakika ve saniye olarak değiştirecek şekilde değiştirmek zorundayız . Çıktının dördüncü öğesini çıkarmanız gerekir:

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

Ek karakterler çözümü 98 bayta kadar çıkarır, ancak bunu Octave'da çalıştırabilirsiniz. İşlev tanıtıcısında geçici bir değişken olmadan yerinde dizin oluşturmayı unutmayın.

Finansal Zaman Serisi Araç Kutusu Yok mu?

Bunu Mali Zaman Serisi Araç Kutusu olmadan MATLAB'da çalıştırmak istiyorsanız , geçici olanında olmadan değişkenlere hemen endeksleyemezsiniz, bu yazmak biraz daha bayt alır:

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

Bu, ilk önce o andaki saat ve tarihi alır ve onu değişkene hkaydeder ve bunun adı verilen otomatik değişkene kaydeder ans. Ardından, mevcut saatin bir sonraki saate eşit olup olmadığını kontrol etmeye devam ediyoruz. Her yinelemede, otomatik değişkeni mevcut saat ve tarihle güncellemeye devam ediyoruz. Bir sonraki saat şu anki saat ve tarihle eşleştiğinde, dizenin son bölümünü görüntüleriz ve çıkarız. Bu, bayt sayısını 114'e çıkarır.


Ayrıca bunu çevrimiçi deneyemediğinizi unutmayın. Çevrimiçi ortamda Octave tercümanları, kod yürütüldüğünde bir zaman sınırına sahip olacak ve bu, bir whilesonraki saatin gerçekleşmesini bekleyen bir döngü olduğundan , kodun çalışmasını beklerken zaman aşımına uğrayacaksınız. Yapabileceğiniz en iyi şey kendi makinenizde çalıştırmak ve çalışıp çalışmadığını kontrol etmek.


İlk birinde yerine kontrol ederek 3 bayt kurtarabilecek nowsüre döngüde: a=@()disp('Legen... wait for it...');while floor(mod(now*86400,3600))end;disp('dary!'). Ayrıca a=@()biti kaldırarak 5 bayt daha kaydedebilirsiniz, çünkü kod tam bir programdır. Ekteki kod ayrıca FTS araç kutusunu gerektirmez.
Tom Carpenter

Finansal Araç Kutusu hourişlevi hakkında nasıl bir bilginiz var ? :-)
Luis Mendo

Şimdi indeksleme için ara değişkenlere ihtiyaç duyma konusundaki yorumunuzla ne kastettiğinizi anlıyorum ...
Luis Mendo

4

Mathematica, 85 84 81 bayt

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

Sanırım "bay" diyerek 2 bayttan tasarruf edebilirsiniz. ifade çıktısı.
Hesap MakinesiFeline

@CatsAreFluffy O zaman tam bir program değil, bir snippet olurdu.
LegionMammal978

Yani? İfade çıktısı Mathematica'da kabul edilebilir değil mi, yoksa bir şey mi eksik?
Hesap MakinesiFeline

@CatsAreFluffy Mathematica komut dosyaları var, bu nedenle verilen herhangi bir tam programın birinde çalışması bekleniyor.
LegionMammal978,

4

C, 163 bayt

#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
PPCG'ye Hoşgeldiniz!
Outgolfer Erik

155 bayt (onu TIO'da çalıştırmadan zahmet etme, bitmeyecek, bir dakika sonra zaman aşımına uğrayacak)
MD XF

3

Mikroscript II, 45 bayt

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

Son olarak, Dtalimat için bir kullanım .

İlk diziyi yazdırır, arka arkaya 0 verene kadar UTC zamanını milisaniye cinsinden 3,600,000 olarak alır ve ardından örtük olarak basılan ikinci dizeyi üretir. 3,600,000 36x10 gibi kod temsil edilir 5 .


Bir açıklama ekleyebilir misiniz? c:
Addison Crump

@VoteToClose Tamamlandı
SuperJedi224 26:15

3

TI-BASIC, 70 64 bayt

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

Bu iki baytlık küçük harflere lanet olsun!

getTimeüç elemanlı bir liste döndürür {hours minutes seconds}, bu nedenle 1. öğeden 1. öğeye kadar olan toplam saattir. Başlangıçtaki saatlerle mevcut saat arasında bir fark olduğunda, döngü sona erer. Bu gözlem için @FryAmTheEggman'a teşekkürler.


3

R - 97 bayt

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

3

Python 3 - 92 89 bayt

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

3

Python 2, 82 81 bayt

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

Yorum yapmak için çok az itibar. Alexander Nigl'in çözümünün Python 2 versiyonu. Parantez içinde kaybolan karakterleri kaydeder. Ayrıca, 3600 uyku zamanı hesaplamasında gerekli değil.

Toplam 7 karakter kaydedildi.

Düzenleme: -1Kevin Cruijssen sayesinde -1 bayt


1
;Programın sonunda izi kaldırarak bir ek bayt kaydedilebilir . Onsuz iyi çalışıyor gibi görünüyor. :) Güzel cevap olsa da, benden +1 (şimdi yorum yapabilirsiniz).
Kevin Cruijssen

Teşekkürler @KevinCruijssen
Henry T

2

Windows Komut Denetimi, 87 bayt

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

Bu, sürekli başlangıçta depolanan bir saat değişkenini geçerli saate karşı karşılaştırır ve farklıysa başarılı olur.


2

Perl, 62 bayt

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

Özel değişken $^T(aka $BASETIME), betiğin başlatıldığı andan bu yana geçen saniye sayısını gösterir. Neyse ki, artık saniye toplamları sayılmaz, böylece aşağıdakiler eşittir:

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

Şaşırtıcı bir şekilde, bu değişken salt okunur değildir.


-EBurada sayma yapmama olağan bir durum gibi görünüyor, bu yüzden 5 bayt kullanarak tasarruf edebilirsiniz say.
Dennis,

Görev tanımından: "Bir program veya işlev yazabilirsiniz." Komut satırından çalıştırılan kod da değil.
primo

Senin değinmek istediğin noktayı anlıyorum. Ancak, programlar veya işlevlerle ilgili kısıtlamalar varsayılan olarak tüm zorluklara uygulanır , ancak yine perl -Ede yalnızca çevrimiçi tercümanları olan gönderilere ve dillere izin veriyoruz .
Dennis

Ben katılmıyorum o -Evarsayılan olarak izin verilmelidir. Çoğu durumda, iyileştirme yine de önemsiz ve ilgi çekicidir.
primo

2

Japt , 72 61 bayt

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

Her biri ?bir Unicode yazdırılamaz karakterini temsil eder. İşte tam metnin nasıl alınacağı:

  1. Çevrimiçi tercümanı açın .
  2. Bu kodu Kod kutusuna yapıştırın:
Oc"`\{setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\\n'}
  1. Kodu çalıştırın, ardından Kod kutusundan silin.
  2. Çıktı kutusunun içeriğini seçin ve Kod kutusuna sürükleyin . Kopyala yapıştırma çalışmaz .
  3. İlk boşluğu aralıksız boşlukla değiştirin.
  4. (isteğe bağlı) Bilgisayarınızın saatini xx: 59 olarak ayarlayın.
  5. Kodu çalıştır.

Alternatif olarak, burada (umarım geri dönüşümlü) bir hexdump bulunur:

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'}

Bu kod, birkaç Japoncaya özgü değişiklikle birlikte George Reith'in JavaScript yanıtına dayanmaktadır. Geçen gün öğrendim ki, eğer kodu sıkıştırıp ters sarılmış bir dizgiye eklerseniz, otomatik olarak çözülecek. İşte derleme yoluyla nasıl işlendiği:

`{?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')+""

JS'de, bir parantez çifti içindeki son değeri döndürür; bu nedenle, bu kod zamanlanmış olayı ayarlar, ardından 'Legen...'otomatik olarak STDOUT'a gönderilen dizeyi döndürür . Japt şu anda STDOUT'a derleme sırasında otomatik çıktı dışında içerik ekleyememediğinden, bunun yerine alertzamanlanmış çıktı için vanilya JS işlevini kullandım . Umarım buna izin verilir.


Bundan bir hexdump gönderebilir misiniz?
Bir spaghetto

@quartata Tamamlandı. Doğru olduğuna inanıyorum.
ETHProductions, 27:15

2

Powershell, 52 51 bayt

-1 bayt teşekkürler @Veskah

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

Bu ifade Date|% M*edeğeri alır MinuteGüncel DateTime değerinden mülk. Döngü Minute, 0'a eşit olduğunda sona erer .


1
'Kızı' dirseklerden hemen sonra ya da en azından PSv5'e koyabilirsin.
Veskah

1

Python, 112 bayt

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!"

Oldukça kendini açıklayıcı.


Yazdırma ifadeleri ve aşağıdaki dizgiler arasındaki boşluklardan kurtularak 2 biriktirebilir :)
Henry T,

1

Python - 159 bayt

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

Fare-2002 , 62 bayt

Kullanıcının enter tuşuna basmasını gerektirir. Bence.

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

Tamam, pek çok byte alıyoruz ve hiçbir şey kazanmıyorken, biraz eğlenelim.

"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

Numune:

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

Bakın, bir sonraki saate kadar yerinde güncelleme geri sayım sayacı! While döngüsünü iyi kullanır, ki hiçbir şey yapmamak bile bir çekirdeği işgal eder.


1

TEMEL, 90 bayt

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

Basit, tür öneklerini ve üstü kapalı Endifadeyi kullanarak golf oynadı . Maliyet, sadece FreeBasic lehçesinde işe yaramasıdırfblite .


1

Befunge 98 - 69 63 bayt

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

Kod, yazdırılamayan bir karakter içeriyor ( <ETB>yazdırılamaz olarak temsil edilen kod bloklarında görünmüyor gibi görünüyor). Karakter kodu 23'tür (bir Son iletim bloğu karakteri ).

Uyarı: Yukarıdaki kod, her tekrarlamada daha büyük olan yığınla meşgul bir döngüde çalışacaktır ve bu nedenle büyük miktarda bellek tüketebilir.


1

Jöle , 48 47 bayt , rakipsiz

Erik Golfçü sayesinde -1 bayt (sıkıştırmada bir kelime olarak "Bacak" kullanın)

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

TryItOnline! veyasabit bir kodlanmış zaman formatlı dizgeni("mm: ss")olan bir deneme sürümünü çalıştırın“59:57” .

Jelly'in ilk taahhüdü Dennis, bu mücadeleyi yaratmasından sadece birkaç gün sonra yapıldı, bu kodun hangi tarihte işe yaradığı konusunda emin değilim, ancak hiçbir durumda rekabet etmiyor.
Yazma sırasında biçimlendirilmiş bir dizeyle zamana erişmenin sadece bir yolu vardır ŒT.

Bu kod ne kadar bekleyip uyuyacağını hesaplar. Buna çağrılırsa saniye hh:00:00bekler 3600: sonra dönüştürür "00:00", verimi [0,0]çıkarır, altmıştan vermeyi dönüştürür , sonra toplam bekleme süresi için bir tane ekler .59[59,59]35993600

Belki bir döngü yapılabilir; ya da "Legendary" kelimesini kullanan sıkıştırılmış bir dize bir şekilde kullanılabilir mi?

“ÇỴġƒḃ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
Yerine “ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»kullanın “¤ßƇṪOƭ!½ȯƤxEẹ<Ȯ¹z7⁷». Leg(from Legen) da bir kelime :) Ayrıca, bu cevap geçersiz çünkü hem dakikalara hem de saniyelere bağlı 00. Bunun 4ŒTyerine bir şey yapmalısınız , çünkü şunu belirten bir kural vardır,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.
Outgolfer Erik 19

Cool, "Bacak" bir bayt kazandırır, teşekkürler Bununla birlikte, 00:00bu durum için test edilmediğinde çağrıldığı zaman bağlantı çalışır - bir sonraki kadar kaç saniye "00:00"bekler ve sonra bekler. Yani dönüştürmek istiyorum "00:00"için [0,0]çıkarma 59verimi için [59,59]tabanın altmış almak olduğunu dönüştürmek 3599için bir tane ekleyin ve sonra 3600(test sürümünü kullanarak test "00:00"yerine "59:57")
Jonathan Allan

1
Ah. Görünen o ki, uzun Jelly kodunu okuyamıyorum ve herkesin kullanımlarını ve beklentilerini bilemiyorum :) Açıklamada, bunun yerine ikinci kez görünmesi 60*(59-m)+(59-s)gerektiğini düşünüyorum. 60*(59-m)+(59-s)+1
Outgolfer Erik,

Sorun değil - yorum yazdığım en net yorum değil.
Jonathan Allan

Eğer güçlük alamıyorsanız, onu düzenleyebilirim. Ayrıca, x / sleep x seconds then return yy'yi sola / sağa yapmayı tavsiye ederim ve sadece şunu söyleyin <dyad>@;
Outgolfer Erik,

1

MathGolf , 39 bayt

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

Çevrimiçi deneyin!

Neredeyse pıt yendi ...

açıklama

Æ     ▼  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)

"Neredeyse"? Yaptığın gibi görünüyor.
Patrick Roberts

@PatrickRoberts, 36 byte'lık başka bir pyth çözümü daha var.
maxb

Ah bu. Yanlış, yoruma bak.
Patrick Roberts

@PatrickRoberts "00: 00'da çalıştırılırsa bir saat beklemelisin" kriteri üzerinde başarısız olabilirim, ancak 3600000'e bölünebilen milisaniyelerdeki Unixtime'ı aynı bayt sayısıyla kontrol etmek için değiştirebilirim. milisaniye, her zaman çalışması gerekir
maxb

0

Pyth - 36 bayt

Bir süre döngü ile dakika 0 olana kadar bekler.

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

11
Dakikalar ve saniyeler 0 olana kadar beklemeniz ve ayrıca programın çalıştırılması durumunda tam bir saat beklemeniz gerekiyor:00:00
lirtosiast 26:15

0

Java, 136 bayt

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

Son tam saatten bu yana kaç milisaniye geçti, System.currentTimeMillis()3.600.000 mod sonucudur .

Eşdeğer monolitik program 159 bayttır:

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 bayt

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

açıklama

?@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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.