Legen …รอเลย…


68

Dary!

ในเหตุการณ์ที่ไม่เกี่ยวข้องกับสิ่งที่หวังว่าจะเกิดขึ้นกับฉันในอีกไม่กี่วันข้างหน้าฉันขอให้คุณเขียนโค้ดที่ทำสิ่งต่อไปนี้:

  1. พิมพ์

    Legen... wait for it...
    

    ทันทีด้วยการขึ้นบรรทัดใหม่

  2. รอจนกระทั่งชั่วโมงเต็มถัดไป (เมื่อ cron งานสำหรับการให้รางวัลป้ายทำงาน)

  3. พิมพ์

    dary!
    

    ด้วยการขึ้นบรรทัดใหม่ที่เป็นตัวเลือก

กฎเพิ่มเติม

  • คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่นได้ แต่ผลลัพธ์จะต้องถูกพิมพ์ไปที่ STDOUT (หรือภาษาอื่นที่ใกล้เคียงที่สุด)

  • คุณต้องรอจนกระทั่งชั่วโมงเต็มถัดไปไม่ใช่แค่ 60 นาที หากรหัสรันที่ 6:58 ควรพิมพ์บรรทัดที่สองที่ 7:00

  • บรรทัดสุดท้ายจะต้องพิมพ์ไม่เกินหนึ่งวินาทีหลังจากเต็มชั่วโมงถัดไป

  • ในกรณีที่โปรแกรมเริ่มต้นในวินาทีแรกของชั่วโมงเต็มมันควรจะรอชั่วโมงเต็มถัดไป

  • คุณสามารถสอบถามเวลาท้องถิ่นหรือเวลา UTC

  • ใช้กฎมาตรฐานของ


1
ฉันไม่เข้าใจว่ากฎเพิ่มเติมข้อที่สามแตกต่างจาก "ขั้นพื้นฐานรอจนกว่าจะถึงชั่วโมงเต็ม"
Fatalize

2
@Fatalize นั่นเป็นเพียงชี้แจงว่าคุณจะต้องรอจนกว่าจะมีการเปลี่ยนแปลงชั่วโมงไม่ได้จนกว่านาทีและวินาทีมีทั้งที่00
Dennis

25
ตราสัญลักษณ์แห่งความสุข @Dennis!
Kritixi Lithos

36
@ ΚριτικσιΛίθοςขอบคุณ! (ขอบคุณพระเจ้าสำหรับการกรอกแท็บ)
Dennis

2
"ในชั่วโมง" จะเป็นมาตรฐานที่มากกว่า (และฉันเชื่อว่าชัดเจนกว่า) วิธีอธิบายสิ่งที่คุณเรียกว่า "ชั่วโมงเต็มถัดไป" (อย่างน้อยในภาษาอังกฤษแบบอเมริกัน)
jpmc26

คำตอบ:


12

Pyth, 42 41

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

ด้านล่างเป็นเลขฐานสิบหกของรหัส:

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

บันทึกแล้ว 1 ไบต์ขอบคุณ @isaacg

ใช้.dฟังก์ชันเพื่อรับค่าเวลาท้องถิ่นที่เกี่ยวข้อง .d6ส่งคืนชั่วโมงปัจจุบัน สิ่งนี้จะพิมพ์สตริงแรกจากนั้นรอจนกว่าชั่วโมงจะแตกต่างจากโฆษณาชั่วโมงที่เริ่มต้นโปรแกรมแล้วพิมพ์สตริงที่สอง

คุณสามารถลองทางออนไลน์ด้วย.d7หรือ.d8สำหรับนาที / วินาที แต่คอมไพเลอร์ออนไลน์จะพิมพ์อะไรก็ได้เมื่อโปรแกรมสิ้นสุดลง

ยินดีด้วยเดนนิส! :)


สตริงสามารถบีบอัดได้ 1 ไบต์โดยใช้ packing-str Hexdump:0000000: 2e22 2077 0c10 89e2 ab1b ad68 0f8c d660 ." w.......h...` 0000010: d9e1 a968 82b4 5e22 0a ...h..^".
isaacg

@isaacg อ๊ะฉันได้ตรวจสอบแล้ว แต่ฉันต้องทำใจให้ยุ่ง ฉันคิดว่ามันบีบอัดเพียง 1 ไบต์ดังนั้นส่วนเสริม.จะทำให้ความยาวเท่ากัน ข้อผิดพลาด Silly off-one: P
FryAmTheEggman

เพียงแค่พยายามคิดออกว่าสิ่งนี้อาจทำอะไร (ไม่มีประสบการณ์กับ pyth เลย) ทำให้ฉันหัวเราะ ฉันเห็นdaryแต่ไม่legen! และ pyth อ้างว่าเป็นง่ายต่อการเข้าใจโดยผู้ใช้ในการเขียนโปรแกรมแบบเดิม ...
Cyoce

@Cyoce หากคุณดูในประวัติการแก้ไขคุณสามารถค้นหารุ่นที่อ่านง่ายกว่า ."บ่งชี้ว่าสตริงควรจะมีการดำเนินการบางอย่างในการดำเนินการให้ได้รับสตริงจริง มันเป็นเพียงเคล็ดลับการบีบอัดสำหรับเล่นกอล์ฟ หากคุณตัดสินใจที่จะลองเรียนรู้ Pyth ขอให้โชคดี! อย่าลืมว่ามีห้องแชทด้วยเช่นกัน :)
FryAmTheEggman

26

JavaScript (ES6), 74 ไบต์

คุณอาจต้องการเปลี่ยนนาฬิการะบบของคุณก่อนการทดสอบขอแสดงความยินดีถ้าคุณลงจอดที่นี่เมื่อ 59 นาทีที่ผ่านมา

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


11
จะ36e5ทำงานในสถานที่ของ3.6e6?
ETHproductions

8
@ ETHproductions คุณสวย!
George Reith

3
@ ETHproductions นั่นเป็นสัญกรณ์ทางวิทยาศาสตร์ที่ไม่ดี ฉันไม่รู้ว่ามันใช้งานได้กับ Javascript เรียนรู้บางอย่างวันนี้ !!!
Ismael Miguel

2
@Optimizer Ah ไม่ทราบว่าsetTimeoutจะevalให้ฉัน จริง ... ตอนแรกฉันพยายามจะใช้console.logแต่นั่นไม่ได้ผลเมื่อเก็บไว้ในตัวแปรเนื่องจากบริบท คุณก็มีความสวยงามเช่นกัน!
George Reith

1
คุณสามารถใช้setTimeoutอย่างถูกต้องและประหยัดหนึ่งไบต์:alert`Legen…`;setTimeout(alert,36e5-new Date%36e5,"dary!")
Bergi

9

CJam, 49 48 ไบต์

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

ใช้เวลาท้องถิ่น สำหรับวัตถุประสงค์ในการทดสอบคุณสามารถแทนที่ทั้งสองอินสแตนซ์3ด้วย4หรือ5เพื่อให้พิมพ์ได้ที่จุดเริ่มต้นของนาที / วินาทีถัดไป

ทดสอบที่นี่ แต่โปรดทราบว่าล่ามออนไลน์จะไม่แสดงผลลัพธ์ใด ๆ จนกว่าโปรแกรมจะยุติ หรือคุณสามารถเรียกใช้งานได้ที่ลองใช้งานออนไลน์โดยที่เอาต์พุตจะปรากฏขึ้นเกือบจะทันทีแทนที่จะถูกบัฟเฟอร์ (แต่เมื่อคุณทดสอบด้วยวินาทีแทนที่จะเป็นชั่วโมงความล่าช้าจะสังเกตเห็นได้) ไม่ว่าในกรณีใดถ้าคุณเรียกใช้มันแบบโลคอลด้วยล่าม Java มันจะทำงานเหมือนมีเสน่ห์

คำอธิบาย

สิ่งนี้ใช้ประโยชน์จาก CJam etซึ่งช่วยให้คุณมี

[year month day hour minute second ms weekday utc_offset]

นี่คือรายละเอียดของรหัส:

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.

โบนัส

วิธีนี้ใช้ได้กับจำนวนไบต์เดียวกันด้วย:

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

แทนที่จะเลือกชั่วโมงเรากำลังเลือกคำนำหน้าด้วยวันที่และชั่วโมงและวนซ้ำไปเรื่อย ๆ ในขณะที่อาร์เรย์ datetime ยังคงมีคำนำหน้านั้นอยู่


9

AppleScript, 157 149 ไบต์

ฮะ. การแข่งขันที่น่าแปลกใจ

ตั้งค่า d เป็นหมายเลข 1 ในสตริงเวลาของ (วันที่ปัจจุบัน)
บันทึก "Legen ... รอมัน ... "
ทำซ้ำในขณะที่ d = หมายเลข 1 ในสตริงเวลาของ (วันที่ปัจจุบัน)
ปลาย
เข้าสู่ระบบ "Dary!"

เนื่องจากlogพิมพ์ไปที่บานหน้าต่างข้อความของ Script Editor ฉันคิดว่ามันเป็นเอาต์พุตที่ใกล้เคียงกับ STDOUT มากที่สุด โดยทั่วไปหากคุณได้รับสตริงเวลาของวันที่ปัจจุบันมันจะทำสิ่งนี้:

รหัส:

สตริงเวลาของ (วันที่ปัจจุบัน)

เอาท์พุท:

5:02:03 PM

มันจะจับหมายเลขแรก ( 5) หน้าเครื่องหมายโคลอน

ฉันคิดว่ามันจะนานกว่านี้อีกมาก xD


แล้วจะเกิดอะไรขึ้นถ้าคุณรันที่ 03:03:00
แบล็กไลท์ส่องแสง

@ BlacklightShining มันจะได้หมายเลข 3 ที่ด้านหน้าและรอจนกว่ามันจะเป็นสี่ มันเป็นเพียงการรับรู้ถึงจำนวนก่อนที่ลำไส้ใหญ่
Addison Crump

โอ้ฉันคิดถึงเรื่องนั้น ถูก ผิดปกติพอฉันได้รับเพียง"1"จากnumber 1 in time string of(current date)...
Blacklight Shining

@BlacklightShining คุณจะใช้รุ่นเก่า - ใน El Capitan first number in time string of (current date)นี้เทียบเท่ากับ
Addison Crump

ฉันอยู่บนโยเซมิตีใช่ first numberยังให้ฉันหลักแรกของเวลา ( "0"ตอนนี้ที่ 04:38)
แบล็กไลท์ส่องแสง

8

Snowman 1.0.2 , 70 69 bytes

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

คำอธิบาย:

~              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 ไบต์

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

ตรรกะก่อนหน้า (63b):

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

การเขียนโค้ดชนิดนี้ทำให้คุณสูญเสียงานของคุณ แต่จะวนซ้ำจนกว่าเวลาจะนานกว่า 1 ชั่วโมง

-1 byte โดยแทนที่{}afer ไปเป็นเวลา;(ขอบคุณ manatwork)
-5 bytes โดยแทนที่echo'dary!';เป็น?>dary!(ขอบคุณ manatwork)
-4 bytes โดยแทนที่<?phpเป็นเวอร์ชั่นสั้น<?(ขอบคุณ primo)
-1 byte โดยแทนที่whileเป็นfor
-3 bytes โดยแทนที่date(G)!=$h+1เป็นdate(G)==$h(ขอบคุณพรีโม่)


เป็นคนดี แต่{};และecho?>จะลดลงเล็กน้อย แม้ว่าฉันจะชอบLegen... wait for it...↵<?php while(+date('is'));?>dary!
จัดการ

1
เคล็ดลับ: คุณสามารถใช้แท็กเปิดสั้น ๆ ( <?แทนที่จะเป็น<?php) การใช้for(;;)มีความยาวเท่าwhile()กัน แต่อนุญาตให้คุณย้ายการ$hบ้านโดยไม่ต้องใช้เซมิโคลอน ( for($h=date(h);...) {}ไม่จำเป็น แต่ไม่เป็นก่อนหน้านี้; ?>คุณอาจมีปัญหากับ$hคือ 12 แม้ว่า ( date(h)จะไม่เป็น 13)
โม่

ขอบคุณทั้งคู่อัพเดทคำตอบของฉัน อิ่มไม่รู้สึกดีเกินไปคิดว่าผมควรจะทำผลงานที่สำคัญในวันนี้เพราะมันแสดงให้เห็นชัดเจนฮ่าฮ่า
Martijn

2
เปลี่ยนไปdate(G)!=$h+1 date(G)==$hสั้นกว่าและแก้ปัญหาชั่วโมง;) ?>นอกจากนี้ยังเอากึ่งลำไส้ใหญ่ก่อน
โม่

1
@ การจัดการมันจะล้มเหลวในการรอถ้ามีการเรียกใช้รหัสHH:00:00เช่นภายในวินาทีแรกของชั่วโมงเต็ม
โม่

7

Perl 6 , 60 bytes

sleep 60²-now%60²+say 'Legen... wait for it..';say 'dary!'

4
ฉันต้องการที่จะทราบว่า60²เพิ่งถูกเพิ่มเมื่อไม่กี่วันที่ผ่านมา
แบรดกิลเบิร์ต b2gills

ว้าวใกล้ถึงจะไม่มีสิทธิ์รับความท้าทายนี้!
แมว

ขอแสดงความยินดีกับ 10k!
MD XF

5

Javascript 94 90 87 ไบต์

ไม่เล่นกอล์ฟมากนัก ...

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

รุ่นของ Downgoat:

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

มันเก็บชั่วโมงปัจจุบันและลูปตราบเท่าที่ชั่วโมง "เก่า" เท่ากับหนึ่งในปัจจุบัน ทันทีที่เวลาเปลี่ยนไปมันจะพิมพ์ส่วนที่เหลือ! : D

คำเตือน: หากเบราว์เซอร์ของคุณไม่ชอบแสดงว่าคุณได้รับคำเตือนแล้ว


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

@ ลงไปขอบคุณ! (ฉันกำลังพยายามตีกอล์ฟตอนนี้ .. )
Stefnotch

1
ยิ่งสั้น (85 ไบต์):(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`
Downgoat

2
@Downgoat สั้นลงหนึ่งไบต์:for((a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();z==b(););a`dary!`
Ismael Miguel

4

MATLAB - 89 ไบต์

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

สวยอธิบายตนเอง ขั้นแรกให้สร้างตัวจัดการฟังก์ชันเพื่อจับชั่วโมงปัจจุบันของนาฬิการะบบ จากนั้นแสดงLegen... wait for it...ด้วย carriage return และจากนั้นเราจะเข้าไปในwhileลูปที่เราทำการตรวจสอบเพื่อดูว่าชั่วโมงปัจจุบันที่เพิ่มด้วย 1 นั้นไม่เท่ากับชั่วโมงปัจจุบัน ถ้าเป็นเช่นนั้นให้วนซ้ำ จนกว่าจะถึงเวลาทันทีเมื่อชั่วโมงถัดไปเกิดขึ้นเราจะแสดงdary!และการขึ้นบรรทัดใหม่จะเกิดขึ้นหลังจากนั้น

ชั่วโมงของ MATLAB ขึ้นอยู่กับการจัดทำดัชนี 24 ชั่วโมงดังนั้นการmodดำเนินการด้วยฐาน 24 จึงจำเป็นต้องมีการจัดการการรั่วไหลจาก 23.00 น. (23:00 น.) ถึงเที่ยงคืน (00:00)

หมายเหตุเล็กน้อย

hourฟังก์ชั่นที่ต้องใช้เวลาในกล่องเครื่องมือทางการเงินซีรี่ส์ nowฟังก์ชั่นไม่อยู่ภายใต้ข้อ จำกัด นี้ แต่จะดึงเอาวันและเวลาปัจจุบันเป็นหมายเลขซึ่งhourทำให้ใช้ในการคำนวณชั่วโมงปัจจุบัน

ต้องการใช้งานใน Octave หรือไม่?

แน่นอน! เนื่องจากอ็อกเทฟไม่มีกล่องเครื่องมือนี้เราเพียงแค่ต้องปรับเปลี่ยนhourฟังก์ชั่นเพื่อให้สามารถเรียกใช้datevecซึ่งส่งคืนเวกเตอร์ 6 องค์ประกอบ - หนึ่งรายการสำหรับแต่ละปีเดือนวันชั่วโมงนาทีและวินาที คุณเพียงแค่ต้องแยกองค์ประกอบที่สี่ของผลลัพธ์:

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

ตัวละครเพิ่มเติมทำให้การแก้ปัญหาไปถึง 98 ไบต์ แต่คุณจะสามารถเรียกใช้ใน Octave หมายเหตุการทำดัชนีแบบแทนที่ไม่มีตัวแปรชั่วคราวในตัวจัดการฟังก์ชัน

ไม่มีกล่องเครื่องมือซีรี่ส์เวลาทางการเงินหรือไม่

หากคุณต้องการเรียกใช้งานใน MATLAB โดยไม่มีชุดเครื่องมือการเงินเวลาเพราะคุณไม่สามารถจัดทำดัชนีเป็นตัวแปรได้ทันทีโดยไม่ต้องใช้งานชั่วคราวสิ่งนี้จะใช้เวลาเขียนไบท์อีกเล็กน้อย:

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

นี่เป็นครั้งแรกที่ได้รับเวลาปัจจุบันและวันที่และร้านค้าลงในตัวแปรเช่นเดียวกับการจัดเก็บนี้ลงในตัวแปรอัตโนมัติที่เรียกว่าh ansหลังจากนั้นเราจะวนซ้ำและตรวจสอบว่าชั่วโมงปัจจุบันไม่เท่ากับชั่วโมงถัดไป ในการทำซ้ำแต่ละครั้งเราจะอัปเดตตัวแปรอัตโนมัติด้วยเวลาและวันที่ปัจจุบัน ทันทีที่ชั่วโมงถัดไปตรงกับเวลาและวันที่ปัจจุบันเราจะแสดงส่วนสุดท้ายของสตริงและออก นี่จะเพิ่มจำนวนไบต์เป็น 114


โปรดทราบว่าคุณไม่สามารถลองออนไลน์ได้ นักแปลระดับแปดเสียงทางออนไลน์จะมีการ จำกัด เวลาเปิดใช้งานเมื่อโค้ดทำงานและเนื่องจากนี่เป็นการwhileวนซ้ำที่รอให้ชั่วโมงถัดไปเกิดขึ้นคุณจะได้รับการหยุดพักชั่วคราวขณะรอให้โค้ดทำงาน สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือรันบนเครื่องของคุณเองและตรวจสอบว่ามันใช้งานได้


หนึ่งในครั้งแรกของคุณคุณสามารถประหยัด 3 ไบต์โดยแทนการตรวจสอบในวงในขณะที่:now a=@()disp('Legen... wait for it...');while floor(mod(now*86400,3600))end;disp('dary!')คุณสามารถบันทึกอีก 5 ไบต์ได้โดยการลบa=@()บิตเนื่องจากรหัสนี้เป็นโปรแกรมเต็ม รหัสที่แนบมานั้นไม่จำเป็นต้องใช้กล่องเครื่องมือ FTS
Tom Carpenter

คุณทราบเกี่ยวกับhourฟังก์ชันกล่องเครื่องมือทางการเงินบนโลกได้อย่างไร :-)
Luis Mendo

ตอนนี้ผมเห็นสิ่งที่คุณหมายโดยความคิดเห็นของคุณเกี่ยวกับต้องตัวแปรกลางสำหรับการทำดัชนี ...
หลุยส์ Mendo

4

Mathematica, 85 84 81 ไบต์

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

ฉันคิดว่าคุณสามารถบันทึก 2 ไบต์ด้วยการทำ "dary!" การแสดงออกการส่งออก
CalculatorFeline

@CatsAreFluffy แล้วมันก็จะเป็นตัวอย่างและไม่ใช่โปรแกรมเต็มรูปแบบ
LegionMammal978

ดังนั้น? นิพจน์ผลงานที่ยอมรับไม่ได้ใน Mathematica หรือฉันขาดอะไรไป?
CalculatorFeline

มี @CatsAreFluffy Mathematica อยู่ดังนั้นโปรแกรมเต็มรูปแบบใด ๆ ก็ตามที่คาดว่าจะทำงานในโปรแกรมเดียว
LegionMammal978

4

C, 163 ไบต์

#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!
Erik the Outgolfer

155 ไบต์ (ไม่ต้องกังวลว่าจะเรียกใช้บน TIO มันจะไม่เสร็จก็หมดเวลาหลังจากหนึ่งนาที)
MD XF

3

Microscript II, 45 ไบต์

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

ในที่สุดใช้สำหรับการDเรียนการสอน

พิมพ์สตริงแรกใช้เวลา UTC ซ้ำ ๆ ในหน่วยมิลลิวินาทีโมดูโล 3,600,000 จนกว่าจะได้ผลลัพธ์เป็น 0 จากนั้นสร้างสตริงที่สองซึ่งพิมพ์โดยปริยาย 3,600,000 เป็นตัวแทนในรหัสเป็น 36x10 5


คุณสามารถเพิ่มคำอธิบายได้ไหม? c:
Addison Crump

@VoteToClose เสร็จสิ้น
SuperJedi224

3

TI-BASIC, 70 64 ไบต์

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

สาปแช่งตัวอักษรตัวพิมพ์เล็กสองไบต์เหล่านี้!

getTimeส่งคืนรายการสามองค์ประกอบ{hours minutes seconds}ดังนั้นผลรวมจากองค์ประกอบที่ 1 ถึงที่ 1 คือชั่วโมง เมื่อมีความแตกต่างระหว่างชั่วโมงที่เริ่มต้นและเวลาปัจจุบันลูปจะสิ้นสุดลง ขอบคุณ @FryAmTheEggman สำหรับการสังเกตนี้




3

Python 2, 82 81 ไบต์

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

ชื่อเสียงต่ำเกินไปที่จะแสดงความคิดเห็น โซลูชันของ Alexander Nigl รุ่น Python 2 บันทึกอักขระที่หายไปในวงเล็บ นอกจากนี้ยังไม่จำเป็นต้องใช้ 3600 ในการคำนวณเวลาพักเครื่อง

บันทึกได้ 7 ตัวอักษรโดยรวม

แก้ไข: -1 ไบต์ขอบคุณ @Kevin Cruijssen


1
สามารถเพิ่มหนึ่งไบต์เพิ่มเติมได้โดยการลบส่วนท้าย;เมื่อสิ้นสุดโปรแกรม ดูเหมือนว่าจะทำงานได้ดีโดยไม่มีมัน :)คำตอบที่ดีดังนั้น +1 จากฉัน (ตอนนี้คุณสามารถแสดงความคิดเห็น)
Kevin Cruijssen

ขอบคุณโหลด @KevinCruijssen
Henry T

2

สคริปต์คำสั่งของ Windows, 87 ไบต์

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

สิ่งนี้จะเปรียบเทียบตัวแปรชั่วโมงที่เก็บไว้อย่างต่อเนื่องเมื่อเริ่มต้นเทียบกับชั่วโมงปัจจุบันและประสบความสำเร็จหากแตกต่างกัน


2

Perl, 62 ไบต์

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

ตัวแปรพิเศษ$^T(aka $BASETIME) บันทึกจำนวนวินาทีตั้งแต่ยุคเมื่อเริ่มต้นสคริปต์ โชคดีที่วินาทีกระโดดไม่นับรวมทั้งหมดเพื่อให้สิ่งต่อไปนี้เทียบเท่า:

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

น่าแปลกที่ตัวแปรนี้ไม่ได้เป็นแบบอ่านอย่างเดียว


ไม่นับ-Eที่ดูเหมือนว่าจะเป็นเรื่องธรรมดาที่นี่เพื่อให้คุณสามารถบันทึก 5 sayไบต์โดยใช้
เดนนิส

จากคำอธิบายการท้าทาย: "คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่น" การรันโค้ดจากบรรทัดคำสั่งไม่ใช่
โม่

ฉันเห็นประเด็นของคุณ อย่างไรก็ตามข้อ จำกัด ของโปรแกรมหรือฟังก์ชั่นใช้กับความท้าทายทั้งหมดตามค่าเริ่มต้น แต่เรายังอนุญาตperl -Eการส่งและภาษาที่มีล่ามออนไลน์เท่านั้น
Dennis

ฉันไม่เห็นด้วยที่-Eควรอนุญาตตามค่าเริ่มต้น ในกรณีส่วนใหญ่การปรับปรุงนั้นไม่สำคัญและไม่น่าสนใจเลย
โม่

2

Japt , 72 61 ไบต์

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

แต่ละอัน?แสดงถึงอักขระ Unicode ที่ไม่สามารถพิมพ์ได้ ต่อไปนี้เป็นวิธีรับข้อความทั้งหมด:

  1. เปิดล่ามออนไลน์
  2. วางรหัสนี้ลงในกล่องรหัส:
Oc"`\{setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\\n'}
  1. เรียกใช้รหัสจากนั้นลบออกจากกล่องรหัส
  2. เลือกเนื้อหาของกล่องผลลัพธ์และลากไปยังกล่องรหัส คัดลอกวางจะไม่ทำงาน
  3. แทนที่ช่องว่างแรกด้วยช่องว่างไม่แตก
  4. (ไม่บังคับ) ตั้งค่านาฬิกาของคอมพิวเตอร์เป็น xx: 59
  5. เรียกใช้รหัส

อีกวิธีหนึ่งนี่คือ hexdump (หวังว่าจะย้อนกลับได้):

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

รหัสนี้เป็นไปตามคำตอบจาวาสคริปต์ของ George Reithพร้อมกับการเปลี่ยนแปลงเฉพาะของ Japt ฉันค้นพบเมื่อวันก่อนว่าถ้าคุณบีบอัดโค้ดและใส่ลงในสตริงที่ห่อด้วย backtick มันจะคลายการบีบอัดโดยอัตโนมัติ นี่คือวิธีการประมวลผลผ่านการรวบรวม:

`{?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 วงเล็บหนึ่งคู่จะคืนค่าสุดท้ายภายใน ดังนั้นรหัสนี้จะตั้งค่าเหตุการณ์ที่กำหนดแล้วส่งกลับ'Legen...'สตริงซึ่งจะถูกส่งไปยัง STDOUT โดยอัตโนมัติ เนื่องจาก Japt ไม่มีวิธีเพิ่มเนื้อหาใน STDOUT นอกเหนือจากเอาท์พุทอัตโนมัติในการรวบรวมฉันจึงใช้ฟังก์ชั่น vanilla JS alertแทนเอาต์พุตหมดเวลา ฉันหวังว่าสิ่งนี้จะได้รับอนุญาต


คุณสามารถโพสต์ hexdump นี้ได้หรือไม่?
ปาเก็ตตี้

@quartata เรียบร้อยแล้ว ฉันเชื่อว่ามันถูกต้อง
ETHproductions

2

Powershell, 52 51 ไบต์

-1 ไบต์ขอบคุณ @Veskah

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

นิพจน์นี้Date|% M*eรับค่าจากMinuteคุณสมบัติจากค่า DateTime ปัจจุบัน ลูปสิ้นสุดลงเมื่อMinuteเท่ากับ 0


1
คุณควรใส่ 'dary' โดยตรงหลังวงเล็บปีกกาหรืออย่างน้อยก็ใน PSv5
Veskah

1

Python ขนาด 112 ไบต์

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

สวยด้วยตนเองอธิบาย


สามารถบันทึก 2 โดยกำจัดช่องว่างระหว่างคำสั่งการพิมพ์และสตริงต่อไปนี้ :)
Henry T

1

Python - 159 ไบต์

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 ไบต์

ต้องการให้ผู้ใช้กด Enter ฉันคิด.

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

โอเคในขณะที่เรากำลังไบต์จำนวนมากและไม่ชนะอะไรเลยมาสนุกกันหน่อย

"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

ตัวอย่าง:

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

ดูว่ามันเป็นตัวจับเวลาถอยหลังที่อัปเดตเป็นชั่วโมงต่อไป! มันใช้ประโยชน์ได้ดีในขณะที่วนซ้ำซึ่งแม้จะไม่ทำอะไรเลยก็จะเป็นแกนหลัก


1

พื้นฐาน, 90 ไบต์

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

ตรงไปตรงมาใช้คำนำหน้าประเภทและEndคำสั่งโดยนัย ค่าใช้จ่ายก็คือว่ามันจะทำงานเฉพาะในFreeBASICfbliteภาษา


1

Befunge 98 - 69 63 bytes

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

รหัสมีอักขระที่ไม่สามารถพิมพ์ได้หนึ่งตัว (แสดง<ETB>เป็นแบบที่ไม่สามารถพิมพ์ได้ดูเหมือนจะไม่ปรากฏในบล็อคโค้ด) รหัสอักขระคือ 23 ( อักขระบล็อกการส่งข้อมูลแบบ End )

คำเตือน: รหัสก่อนหน้านี้จะทำงานในการวนรอบที่ยุ่งกับสแต็กที่ใหญ่ขึ้นแต่ละครั้งและดังนั้นจึงอาจใช้หน่วยความจำจำนวนมาก


1

เยลลี่ , 48 47 ไบต์ , ไม่ใช่การแข่งขัน

-1 ไบต์ขอบคุณ Erik the Golfer (ใช้ "ขา" เป็นคำในการบีบอัด)

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

TryItOnline! หรือรันเวอร์ชันทดสอบด้วยสตริงที่จัดรูปแบบเวลาแบบฮาร์ดโค้ดของ“59:57”("mm: ss")

ความมุ่งมั่นครั้งแรกของเยลลี่ถูกสร้างขึ้นโดยเดนนิสเพียงไม่กี่วันหลังจากที่เขาสร้างความท้าทายนี้ฉันไม่แน่ใจว่าวันที่รหัสนี้จะใช้งานได้ครั้งแรก แต่มันก็ไม่ใช่การแข่งขันในกรณีใด ๆ นั่นคือในขณะที่เขียนเพียงวิธีหนึ่งที่จะเข้าถึงเวลาซึ่งเป็นโดยวิธีการของสตริงที่จัดรูปแบบ
ŒT

รหัสนี้คำนวณระยะเวลารอและจากนั้นพัก ถ้าเรียกว่าที่hh:00:00มันรอ3600วินาทีจะแปลง"00:00"ไป[0,0]แล้วลบที่มาจาก59ผลผลิต[59,59]แปลงที่จากฐานหกสิบที่จะให้3599แล้วเพิ่มหนึ่งสำหรับระยะเวลารอรวมของ3600วินาที

อาจมีการวนซ้ำ หรือสตริงที่ถูกบีบอัดโดยใช้คำว่า "Legendary" ทั้งหมดสามารถนำไปใช้ประโยชน์ได้บ้าง?

“ÇỴġƒḃ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
ใช้แทน“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv» (จาก) นอกจากนี้ยังเป็นคำ :) นอกจากนี้คำตอบนี้ไม่ถูกต้องเพราะมันขึ้นอยู่กับนาทีและวินาทีทั้งคู่เป็น คุณควรทำอะไรกับแทนเนื่องจากมีกฎที่ระบุว่า“¤ßƇṪOƭ!½ȯƤxEẹ<Ȯ¹z7⁷»LegLegen004ŒTIn 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

เยี่ยมมาก "เลก" บันทึกไบต์ด้วยขอบคุณ อย่างไรก็ตามลิงก์จะทำงานเมื่อมีการเรียกใช้00:00เนื่องจากไม่ได้ทำการทดสอบสำหรับเงื่อนไขนั้น - มันจะคำนวณจำนวนวินาทีจนกระทั่งวินาทีถัดไป"00:00"และรอ ดังนั้นมันจะแปลง"00:00"เป็นการ[0,0]ลบจาก59เพื่อให้ได้ผลการ[59,59]แปลงจากฐานหกสิบเพื่อรับ3599แล้วเพิ่มอีกหนึ่งค่าเพื่อรับ3600(ทดสอบโดยใช้เวอร์ชันทดสอบด้วยการ"00:00"แทนที่"59:57")
Jonathan Allan

1
โอ้ ดูเหมือนว่าฉันไม่สามารถอ่านรหัส Jelly ที่ยาวและฉันไม่รู้ว่าการใช้และความคาดหวังของทุกคนเป็นอย่างไร :) แม้ว่าในคำอธิบายฉันคิดว่ามัน60*(59-m)+(59-s)ต้องเป็น60*(59-m)+(59-s)+1ครั้งที่สองที่มันปรากฏขึ้นแทน?
Erik the Outgolfer

ไม่มีปัญหา - ความเห็นไม่ใช่ที่ชัดเจนที่สุดที่ฉันเคยเขียน
Jonathan Allan

ถ้าคุณไม่ยุ่งยากฉันสามารถแก้ไขมันได้นอกจากนี้ฉันขอแนะนำให้ทำ x / y เป็นซ้าย / ขวาแล้วพูดว่าsleep x seconds then return y- เพราะ<dyad>@สามารถนิยามได้ว่าเป็น dyad ชนิดอื่นที่มีการสลับสับเปลี่ยน
Erik the Outgolfer

1

MathGolf , 39 ไบต์

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

ลองออนไลน์!

เกือบเอาชนะ pyth ...

คำอธิบาย

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

"เกือบ"? ดูเหมือนว่าคุณจะทำ
Patrick Roberts

@PatrickRoberts มีวิธีการแก้ปัญหาแบบ pyth อื่นที่ 36 ไบต์ไม่สามารถไปถึงที่นั่นได้แม้จะมีสตริงที่บีบอัดและเทคนิคอื่น ๆ
maxb

โอ้นั่น มันผิดดูที่ความคิดเห็น
Patrick Roberts

@PatrickRoberts ฉันอาจล้มเหลวใน "ต้องรอหนึ่งชั่วโมงหากทำงานใน 00:00" เกณฑ์เกินไป แต่ฉันสามารถเปลี่ยนเพื่อตรวจสอบ Unixtime ในหน่วยมิลลิวินาทีในการหารด้วย 3600000 ด้วยจำนวนไบต์เดียวกันเนื่องจากการพิมพ์ครั้งแรกควรใช้เวลามากกว่า มิลลิวินาทีควรทำงานเสมอ
maxb

0

Pyth - 36 ไบต์

รอจนกระทั่งนาทีเป็น 0 ขณะที่ลูป

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

11
คุณต้องรอจนกระทั่งนาทีและวินาทีเป็น 0 และรอหนึ่งชั่วโมงเต็มหากโปรแกรมทำงาน:00:00
lirtosiast

0

Java, 136 ไบต์

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

จำนวนมิลลิวินาทีที่ผ่านไปนับตั้งแต่เต็มชั่วโมงล่าสุดเป็นผลมาจากSystem.currentTimeMillis()mod 3,600,000

โปรแกรมเสาหินที่เทียบเท่าคือความยาว 159 ไบต์:

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 ไบต์

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

คำอธิบาย

?@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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.