Legen góc chờ nó


68

dary

Trong các sự kiện hoàn toàn không liên quan đến những gì sẽ hy vọng xảy ra với tôi trong vài ngày tới, tôi giao cho bạn viết mã thực hiện như sau:

  1. In

    Legen... wait for it...
    

    ngay lập tức, với một dòng mới.

  2. Đợi cho đến giờ đầy đủ tiếp theo (khi công việc định kỳ để trao huy hiệu chạy).

  3. In

    dary!
    

    với một dòng mới tùy chọn .

Quy tắc bổ sung

  • Bạn có thể viết một chương trình hoặc một chức năng, nhưng đầu ra phải được in thành STDOUT (hoặc ngôn ngữ thay thế gần nhất với ngôn ngữ của bạn).

  • Bạn phải đợi đến giờ đầy đủ tiếp theo , không chỉ trong 60 phút. Nếu mã được chạy lúc 6:58, nó sẽ in dòng thứ hai lúc 7:00.

  • Dòng cuối cùng phải được in không muộn hơn một giây sau toàn bộ giờ tiếp theo.

  • Trong trường hợp chương trình được bắt đầu trong giây đầu tiên của toàn bộ giờ, nó sẽ đợi trong giờ đầy đủ tiếp theo.

  • Bạn có thể truy vấn thời gian địa phương hoặc UTC.

  • Luật tiêu chuẩn được áp dụng.


1
Tôi không hiểu quy tắc bổ sung thứ ba khác với quy tắc cơ bản "chờ đến giờ đầy đủ tiếp theo"
Fatalize

2
@Firthize Đó chỉ là một sự làm rõ rằng bạn phải đợi cho đến khi giờ thay đổi, không phải cho đến khi phút và giây đều ở mức 00 .
Dennis

25
Huy hiệu huyền thoại hạnh phúc, @Dennis!
Kritixi Lithos

36
@ Κρτκσς Cảm ơn! (Cảm ơn chúa vì đã hoàn thành tab.)
Dennis

2
"Vào giờ" sẽ là một cách tiêu chuẩn hơn (và tôi tin rõ ràng hơn nhiều) để mô tả cái mà bạn gọi là "toàn bộ giờ tiếp theo" (ít nhất là bằng tiếng Anh Mỹ).
jpmc26

Câu trả lời:


12

Bình thường, 42 41

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

Dưới đây là một hexdump của mã:

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

Đã lưu 1 byte nhờ @isaacg

Sử dụng .dchức năng để có được các giá trị liên quan đến thời gian địa phương. .d6trả về giờ hiện tại Thao tác này sẽ in chuỗi đầu tiên, sau đó đợi cho đến khi giờ khác với quảng cáo giờ bắt đầu chương trình và sau đó in chuỗi thứ hai.

Bạn có thể thử trực tuyến với .d7hoặc .d8trong vài phút / giây nhưng trình biên dịch trực tuyến chỉ in bất cứ thứ gì khi chương trình kết thúc.

Xin chúc mừng, Dennis! :)


Chuỗi có thể được nén bởi 1 byte bằng cách sử dụng pack-str. Hexdump:0000000: 2e22 2077 0c10 89e2 ab1b ad68 0f8c d660 ." w.......h...` 0000010: d9e1 a968 82b4 5e22 0a ...h..^".
isaacg

@isaacg Rất tiếc, tôi đã kiểm tra nhưng chắc tôi đã nhầm lẫn khi đếm. Tôi nghĩ rằng nó chỉ nén 1 byte nên phần bổ sung .sẽ làm cho nó có cùng độ dài. Lỗi ngớ ngẩn ngớ ngẩn: P
FryAmTheEggman

Chỉ cần cố gắng để tìm ra những gì điều này có thể làm (không có kinh nghiệm với pyth) làm tôi cười. Tôi thấy dary, nhưng không legen! Và pyth tuyên bố sẽ dễ hiểu hơn bởi những người đã sử dụng chương trình thông thường ...
Cyoce

@Cyoce Nếu bạn nhìn vào lịch sử chỉnh sửa, bạn có thể tìm thấy phiên bản dễ đọc hơn. Dấu ."hiệu cho thấy chuỗi cần thực hiện một số thao tác trên chuỗi để có được chuỗi thực. Nó chỉ là một mẹo nén để chơi gôn. Nếu bạn quyết định cố gắng học Pyth, chúc may mắn! Đừng quên có một phòng chat cho nó :)
FryAmTheEggman

26

JavaScript (ES6), 74 byte

Bạn có thể muốn thay đổi đồng hồ hệ thống của mình trước khi thử nghiệm, xin chúc mừng nếu bạn đã hạ cánh ở đây lúc 59 phút trước.

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


11
Sẽ 36e5làm việc thay 3.6e6thế?
Sản xuất ETH

8
@ETHproductions Bạn làm đẹp!
George Reith

3
@ETHproductions Đó là một số ký hiệu khoa học xấu . Tôi không biết nó hoạt động trên Javascript. Đã học được điều gì hôm nay !!!
Ismael Miguel

2
@Optimizer Ah không biết setTimeoutsẽ evalcho tôi. Đúng ... Ban đầu tôi đã cố gắng sử dụng console.lognhưng nó thậm chí không hoạt động khi được lưu trữ trong một biến do bối cảnh. Bạn cũng xinh!
George Reith

1
Bạn có thể sử dụng setTimeoutđúng cách và thậm chí tiết kiệm một 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!"

Sử dụng giờ địa phương. Đối với mục đích thử nghiệm, bạn có thể thay thế hai trường hợp 3bằng 4hoặc 5để làm cho nó được in vào đầu phút / giây tiếp theo.

Kiểm tra nó ở đây. Nhưng lưu ý rằng trình thông dịch trực tuyến không hiển thị bất kỳ đầu ra nào cho đến khi chương trình kết thúc. Ngoài ra, bạn có thể chạy nó trên Dùng thử trực tuyến , trong đó đầu ra được hiển thị gần như ngay lập tức thay vì được đệm (nhưng khi bạn kiểm tra nó bằng giây thay vì hàng giờ, độ trễ sẽ đáng chú ý). Trong mọi trường hợp, nếu bạn chạy nó cục bộ với trình thông dịch Java, nó hoạt động như một bùa mê.

Giải trình

Điều này làm cho việc sử dụng của CJam etcung cấp cho bạn một loạt

[year month day hour minute second ms weekday utc_offset]

Đây là một sự cố của 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.

Thêm

Điều này cũng hoạt động cho cùng một số byte:

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

Thay vì chọn giờ, chúng tôi sẽ chọn tiền tố với ngày giờ và giữ cho vòng lặp tiếp tục trong khi mảng datetime vẫn có tiền tố đó.


9

AppleScript, 157 149 byte

Huh. Đáng ngạc nhiên tranh cãi.

đặt d thành số 1 trong chuỗi thời gian của (ngày hiện tại)
đăng nhập "Legen ... chờ đợi nó ..."
lặp lại trong khi d = số 1 trong chuỗi thời gian của (ngày hiện tại)
kết thúc
đăng nhập "dary!"

login ra khung Tin nhắn của Script Editor, tôi coi nó là đầu ra gần nhất với STDOUT. Về cơ bản, nếu bạn có được chuỗi thời gian của ngày hiện tại, nó sẽ làm một cái gì đó như thế này:

Mã số:

chuỗi thời gian của (ngày hiện tại)

Đầu ra:

5:02:03

Nó sẽ lấy số đầu tiên ( 5) trước dấu hai chấm.

Tôi nghĩ rằng nó sẽ dài hơn thế này rất nhiều. xD


Vậy chuyện gì sẽ xảy ra nếu bạn chạy nó lúc 03:03:00?
Blacklight Shining

@BlacklightShining Nó sẽ nhận được số 3 ở phía trước và đợi cho đến khi nó là bốn. Nó chỉ nhận thức được số trước đại tràng.
Addison Crump

Ồ, tôi đã bỏ lỡ điều đó. Được chứ. Lạ lùng thay, tôi thực sự nhận được chỉ "1"từ number 1 in time string of(current date)...
Blacklight Shining

@BlacklightShining Có thể bạn đang sử dụng phiên bản cũ hơn - trong El Capitan, điều này tương đương với first number in time string of (current date).
Addison Crump

Tôi đang ở Yosemite, yeah. first numbercũng chỉ cho tôi chữ số đầu tiên của thời gian ( "0"ngay bây giờ, lúc 04:38).
Blacklight Shining

8

Người tuyết 1.0.2 , 70 69 byte

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

Giải trình:

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

Logic trước (63b):

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

Loại mã hóa này làm cho bạn mất việc, nhưng vòng lặp này cho đến khi thời gian còn hơn 1 giờ so với init.

-1 byte bằng cách thay thế {}afer các thời gian để ;(nhờ manatwork)
-5 byte bằng cách thay thế echo'dary!';để ?>dary!(nhờ manatwork)
-4 byte bằng cách thay thế <?phpcho phiên bản ngắn <?(nhờ primo)
-1 byte bằng cách thay thế whilecho một for
-3 byte bằng cách thay thế date(G)!=$h+1để date(G)==$h(cảm ơn


Đẹp một, nhưng {};echo?>sẽ giảm một chút. Mặc dù tôi thíchLegen... wait for it...↵<?php while(+date('is'));?>dary!
manatwork

1
Một vài mẹo: bạn có thể sử dụng các thẻ mở ngắn (chỉ <?hơn là <?php). Việc sử dụng for(;;)có cùng độ dài với while(), nhưng cho phép bạn di chuyển $hbài tập mà không cần dấu chấm phẩy ( for($h=date(h);...). Các {}không cần thiết, nhưng không phải là ;trước ?>. Bạn có thể có một vấn đề với $hlà 12, mặc dù ( date(h)sẽ không bao giờ là 13).
primo

Cảm ơn cả hai, cập nhật câu trả lời của tôi cho phù hợp. Tôi cảm thấy không khỏe lắm, đoán tôi không nên làm việc quan trọng hôm nay, vì nó cho thấy rõ haha
Martijn

2
Thay đổi date(G)!=$h+1thành date(G)==$h. Ngắn hơn và giải quyết vấn đề giờ;) Ngoài ra, loại bỏ dấu chấm phẩy trước ?>.
primo

1
@manatwork nó sẽ không chờ nếu mã được chạy vào HH:00:00, tức là trong giây đầu tiên của một giờ.
primo


5

Javascript 94 90 87 byte

Không chơi gôn nhiều ...

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

Phiên bản của hạ cấp:

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

Nó lưu trữ giờ hiện tại và các vòng lặp miễn là giờ "cũ" bằng với giờ hiện tại. Ngay khi giờ đã thay đổi, nó sẽ in phần còn lại! :CƯỜI MỞ MIỆNG

Tuyên bố miễn trừ trách nhiệm: Nếu trình duyệt của bạn không thích nó, bạn đã được cảnh báo.


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

@Downgoat Cảm ơn! (Tôi đang cố gắng đánh gôn ngay bây giờ ..)
Stefnotch

1
Thậm chí ngắn hơn (85 byte):(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`
Hạ cấp

2
@Downgoat Một byte ngắn hơn: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!')

Khá tự giải thích. Đầu tiên, tạo một tay cầm chức năng để lấy giờ hiện tại của đồng hồ hệ thống. Sau đó, hiển thị Legen... wait for it...với lợi nhuận vận chuyển, và sau đó chúng tôi đi vào một whilevòng lặp trong đó chúng tôi tiếp tục kiểm tra xem giờ hiện tại được thêm bằng 1 không bằng với giờ hiện tại. Nếu có, hãy tiếp tục lặp. Chỉ cho đến khi tức thì khi giờ tiếp theo xảy ra, chúng tôi sẽ hiển thị dary!và trở lại vận chuyển xảy ra sau đó.

Giờ của MATLAB dựa trên lập chỉ mục 24 giờ, do đó, modhoạt động với cơ sở 24 là bắt buộc để xử lý tràn từ 11 giờ tối (23:00) đến nửa đêm (00:00).

Lưu ý nhỏ

Các hourchức năng đòi hỏi Financial Time Series hộp công cụ. Các nowchức năng không phụ thuộc vào giới hạn này, nhưng nó lấy ngày hiện tại và thời gian như một số serial mà hourdo đó sử dụng để tính toán giờ hiện hành.

Bạn muốn chạy cái này trong Octave?

Chắc chắn rồi! Vì Octave không có hộp công cụ này, chúng tôi chỉ cần sửa đổi hourhàm để nó gọi datevechàm vectơ gồm 6 phần tử - một phần tử cho mỗi năm, tháng, ngày, giờ, phút và giây. Bạn chỉ cần trích xuất phần tử thứ tư của đầu ra:

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

Các ký tự bổ sung làm cho giải pháp lên tới 98 byte, nhưng bạn sẽ có thể chạy nó trong Octave. Lưu ý lập chỉ mục tại chỗ mà không có biến tạm thời trong hàm xử lý.

Không có hộp công cụ chuỗi thời gian tài chính?

Nếu bạn muốn chạy cái này trong MATLAB mà không có Hộp công cụ chuỗi thời gian tài chính, bởi vì bạn không thể lập chỉ mục thành các biến ngay lập tức mà không có tạm thời, điều này sẽ mất thêm một chút byte để viết:

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

Điều này đầu tiên có được thời gian và ngày hiện tại và lưu trữ nó vào biến hcũng như lưu trữ này vào biến tự động được gọi ans. Sau đó, chúng tôi tiếp tục lặp và kiểm tra xem giờ hiện tại không bằng giờ tiếp theo. Ở mỗi lần lặp, chúng tôi tiếp tục cập nhật biến tự động với thời gian và ngày hiện tại. Ngay sau giờ tiếp theo khớp với ngày giờ hiện tại, chúng tôi sẽ hiển thị phần cuối của chuỗi và thoát. Điều này đẩy số byte lên 114.


Cũng lưu ý rằng bạn không thể thử trực tuyến này. Thông dịch viên Octave trực tuyến sẽ có giới hạn thời gian khi mã thực thi và vì đây là whilevòng lặp chờ giờ tiếp theo xảy ra, bạn sẽ có thời gian chờ trong khi chờ mã chạy. Điều tốt nhất bạn có thể làm là chạy nó trên máy của riêng bạn và kiểm tra xem nó có hoạt động không.


Trong lần đầu tiên, bạn có thể lưu 3 byte bằng cách kiểm tra nowtrong vòng lặp while : a=@()disp('Legen... wait for it...');while floor(mod(now*86400,3600))end;disp('dary!'). Bạn cũng có thể lưu thêm 5 byte bằng cách loại bỏ a=@()bit vì mã này tạo thành một chương trình đầy đủ. Mã đính kèm cũng không yêu cầu hộp công cụ FTS.
Tom Carpenter

Làm thế nào trên trái đất bạn đã biết về hourchức năng Hộp công cụ tài chính ? :-)
Luis Mendo

Bây giờ tôi hiểu ý của bạn về nhận xét của bạn về việc cần các biến trung gian để lập chỉ mục ...
Luis Mendo

4

Toán học, 85 84 81 byte

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

Tôi nghĩ bạn có thể tiết kiệm 2 byte bằng cách thực hiện "dary!" đầu ra biểu thức.
Máy

@CatsAreFluffy Sau đó, nó sẽ chỉ là một đoạn trích và không phải là một chương trình đầy đủ.
LegionMammal978

Vì thế? Đầu ra biểu thức không được chấp nhận trong Mathicala, hay tôi thiếu thứ gì?
Máy

Các kịch bản @CatsAreFluffy Mathematica tồn tại, do đó, bất kỳ chương trình đầy đủ nhất định nào cũng được dự kiến ​​sẽ chạy trong một.
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
Chào mừng đến với PPCG!
Erik the Outgolfer

155 byte (đừng bận tâm chạy nó trên TIO, nó sẽ không kết thúc, hết thời gian sau một phút)
MD XF

3

Kính hiển vi II, 45 byte

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

Cuối cùng, sử dụng cho Dhướng dẫn.

In chuỗi đầu tiên, liên tục mất thời gian UTC tính bằng mili giây modulo 3.600.000 cho đến khi điều này mang lại 0, và sau đó tạo ra chuỗi thứ hai được in ngầm. 3.600.000 được thể hiện trong mã là 36x10 5 .


Bạn có thể thêm một lời giải thích? c:
Addison Crump

@VoteToC Đóng Xong
SuperJedi224

3

TI-BASIC, 70 64 byte

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

Nguyền rủa những chữ cái viết thường hai byte!

getTimetrả về danh sách ba phần tử {hours minutes seconds}, do đó tổng từ phần tử thứ 1 đến phần 1 là số giờ. Khi có sự khác biệt giữa giờ bắt đầu và giờ hiện tại, vòng lặp kết thúc. Cảm ơn @FryAmTheEggman cho quan sát này.


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

Danh tiếng quá thấp để bình luận. Phiên bản Python 2 của giải pháp Alexander Nigl. Lưu các ký tự bị mất trên ngoặc. Ngoài ra, 3600 không cần thiết trong tính toán thời gian ngủ.

7 ký tự được lưu tổng thể.

Chỉnh sửa: -1 byte nhờ @Kevin Cruijssen


1
Một byte bổ sung có thể được lưu bằng cách xóa dấu ;ở cuối chương trình. Có vẻ để làm việc tốt mà không có nó. :) Mặc dù câu trả lời rất hay, vì vậy +1 từ tôi (bây giờ bạn có thể nhận xét).
Kevin Cruijssen

cảm ơn tải @KevinCruijssen
Henry T

2

Tập lệnh lệnh Windows, 87 byte

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

Điều này liên tục so sánh một biến số giờ được lưu trữ khi bắt đầu so với giờ hiện tại và thành công nếu khác nhau.


2

Perl, 62 byte

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

Biến đặc biệt $^T(aka $BASETIME) ghi lại số giây kể từ epoch từ khi tập lệnh được bắt đầu. May mắn thay, tổng số giây không được tính trong tổng số, do đó, các giá trị sau là tương đương:

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

Đáng ngạc nhiên, biến này không chỉ đọc.


Không tính -Edường như phổ biến ở đây, vì vậy bạn có thể tiết kiệm 5 byte bằng cách sử dụng say.
Dennis

Từ mô tả thách thức: "Bạn có thể viết một chương trình hoặc một chức năng." Mã chạy từ dòng lệnh là không.
primo

Tôi thấy điểm của bạn. Tuy nhiên, hạn chế đối với các chương trình hoặc chức năng áp dụng cho tất cả các thử thách theo mặc định, tuy nhiên chúng tôi vẫn cho phép perl -Egửi và ngôn ngữ chỉ có thông dịch viên trực tuyến.
Dennis

Tôi không đồng ý rằng -Enên được cho phép theo mặc định. Trong hầu hết các trường hợp, sự cải thiện là tầm thường và không thú vị, dù sao.
primo

2

Japt , 72 61 byte

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

Mỗi ?đại diện cho một char không thể in Unicode. Đây là cách để có được toàn văn:

  1. Mở trình thông dịch trực tuyến .
  2. Dán mã này vào hộp Mã:
Oc"`\{setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\\n'}
  1. Chạy mã, sau đó xóa nó khỏi hộp Mã.
  2. Chọn nội dung của hộp đầu ra và kéo vào hộp Mã. Sao chép sẽ không hoạt động .
  3. Thay thế không gian đầu tiên bằng một không gian không phá vỡ.
  4. (tùy chọn) Đặt đồng hồ trên máy tính của bạn thành xx: 59.
  5. Chạy mã.

Ngoài ra, đây là một hexdump (hy vọng có thể đảo ngược):

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

Mã này dựa trên câu trả lời JavaScript của George Reith , với một vài thay đổi cụ thể của Japt. Tôi đã phát hiện ra một ngày khác rằng nếu bạn nén mã và chèn nó vào một chuỗi được bao bọc bởi backtick, nó sẽ tự động giải nén. Đây là cách nó được xử lý thông qua việc biên dịch:

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

Trong JS, một cặp dấu ngoặc đơn sẽ trả về giá trị cuối cùng bên trong; do đó, mã này đặt sự kiện được định thời gian, sau đó trả về 'Legen...'chuỗi, được tự động gửi đến STDOUT. Vì Japt hiện không có cách nào để thêm nội dung vào STDOUT ngoài đầu ra tự động khi biên dịch, thay vào đó tôi đã sử dụng chức năng vanilla JS alertcho đầu ra được định thời gian. Tôi hy vọng điều này được cho phép.


Bạn có thể gửi một hexdump của điều này?
một spaghetto

@quartata Xong. Tôi tin đó là chính xác.
Sản phẩm ETH

2

Powershell, 52 51 byte

-1 byte cảm ơn @Veskah

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

Biểu thức này Date|% M*enhận giá trị từ thuộc Minutetính từ giá trị DateTime hiện tại. Vòng lặp kết thúc khi Minutebằng 0.


1
Bạn sẽ có thể đặt 'dary' trực tiếp sau khi niềng răng, hoặc ít nhất là bạn có thể trong 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!"

Khá tự giải thích.


Có thể lưu 2 bằng cách loại bỏ khoảng trắng giữa các câu lệnh in và các chuỗi sau. :)
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

Chuột-2002 , 62 byte

Yêu cầu người dùng nhấn enter. Tôi nghĩ.

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

Được rồi, tốt, trong khi chúng ta đang lấy rất nhiều byte và không giành được bất cứ điều gì, hãy vui vẻ một chút.

"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

Mẫu vật:

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

Hãy xem, đó là đồng hồ đếm ngược tại chỗ cập nhật đến giờ tiếp theo! Nó sử dụng tốt vòng lặp while, thậm chí không làm gì cả sẽ chiếm một lõi.


1

CƠ BẢN, 90 byte

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

Nói thẳng, chơi gôn bằng cách sử dụng tiền tố loại và Endcâu lệnh ngầm . Chi phí là nó chỉ hoạt động trong phương ngữ FreeBasicfblite .


1

Befunge 98 - 69 63 byte

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

Mã chứa một ký tự không thể in được (đại diện <ETB>là không thể in được dường như không hiển thị trong các khối mã). Mã ký tự của nó là 23 (một ký tự khối truyền kết thúc ).

Cảnh báo: Mã trước sẽ chạy trong một vòng lặp bận rộn với ngăn xếp ngày càng lớn hơn mỗi lần lặp lại và do đó có thể tiêu thụ một lượng lớn bộ nhớ.


1

Jelly , 48 47 byte , không cạnh tranh

-1 byte nhờ vào Erik the Golfer (sử dụng "Leg" làm từ trong quá trình nén)

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

Dùng thử trực tuyến! hoặc chạy phiên bản thử nghiệm với chuỗi định dạng thời gian được mã hóa cứng của“59:57”("mm: ss").

Cam kết đầu tiên của Jelly được thực hiện bởi Dennis chỉ vài ngày sau khi anh ấy tạo ra thử thách này, tôi không chắc ngày mã này sẽ hoạt động vào ngày nào, nhưng nó không cạnh tranh trong mọi trường hợp.
Tại thời điểm viết, chỉ có một cách để truy cập thời gian bằng chuỗi được định dạng , ŒT.

Mã này tính toán thời gian chờ đợi và sau đó ngủ. Nếu được gọi tại hh:00:00nó chờ trong 3600vài giây: nó chuyển đổi "00:00"thành [0,0]sau đó trừ đi từ 59năng suất [59,59], chuyển đổi từ cơ sở sáu mươi để cung cấp 3599, sau đó thêm một cho tổng thời gian chờ của 3600giây.

Có lẽ một vòng lặp có thể được thực hiện; hoặc một chuỗi nén sử dụng toàn bộ từ "Huyền thoại" có thể được sử dụng bằng cách nào đó?

“ÇỴġƒḃ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
Sử dụng “ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»thay vì “¤ßƇṪOƭ!½ȯƤxEẹ<Ȯ¹z7⁷». Leg(từ Legen) cũng là một từ :) Ngoài ra, câu trả lời này không hợp lệ, vì nó phụ thuộc vào số phút và số giây cả hai 00. Bạn nên làm một cái gì đó với 4ŒTthay vào đó, vì có một quy tắc nói rằng,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

Thật tuyệt, "Chân" tiết kiệm một byte, cảm ơn. Tuy nhiên, liên kết không hoạt động khi được gọi 00:00vì nó không kiểm tra điều kiện đó - nó tính toán bao nhiêu giây cho đến lần tiếp theo "00:00"và sau đó chờ. Vì vậy, nó sẽ chuyển đổi "00:00"để [0,0]trừ đi 59để mang lại [59,59]chuyển đổi từ cơ sở sáu mươi để có được 3599và sau đó thêm một để nhận 3600(thử nghiệm bằng phiên bản thử nghiệm "00:00"thay cho "59:57")
Jonathan Allan

1
Oh. Dường như tôi không thể đọc được mã Jelly dài và tôi không thể biết được công dụng và mong đợi của mọi người :) Mặc dù, trong phần giải thích, tôi nghĩ rằng 60*(59-m)+(59-s)phải 60*(59-m)+(59-s)+1thay vào đó, lần thứ hai nó xuất hiện?
Erik the Outgolfer

Không có vấn đề gì - bình luận không phải là rõ ràng nhất tôi từng viết.
Jonathan Allan

Chà, nếu bạn không gặp rắc rối, tôi có thể chỉnh sửa nó. Ngoài ra, tôi khuyên bạn nên thực hiện x / y là trái / phải, và chỉ cần nói sleep x seconds then return yrằngbbb Because <dyad>@có thể được định nghĩa là một dyad khác với các đối số hoán đổi.
Erik the Outgolfer

1

MathGolf , 39 byte

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

Hãy thử trực tuyến!

Gần như đánh bại ...

Giải trình

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

"Hầu hết"? Có vẻ như bạn đã làm.
Patrick Roberts

@PatrickRoberts có một giải pháp thứ ba khác là 36 byte, không thể hoàn toàn đến đó ngay cả với các chuỗi nén và các thủ thuật khác.
maxb

Ồ cái đó Đó là sai, nhìn vào bình luận.
Patrick Roberts

Tài khoản @Patrick mili giây, nó sẽ luôn hoạt động.
maxb

0

Pyth - 36 byte

Chờ đến phút là 0 với một vòng lặp while.

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

11
Bạn cần đợi cho đến khi số phút và giây bằng 0, và cũng phải đợi cả tiếng đồng hồ nếu chương trình được chạy vào lúc: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!");}}

Có bao nhiêu mili giây trôi qua kể từ giờ đầy đủ cuối cùng là kết quả của System.currentTimeMillis()mod 3.600.000.

Chương trình nguyên khối tương đương dài 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

Giải trình

?@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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.