Brexit은 일어났다 . 그리고 천재 인 Sky News는 버스 옆에 카운트 다운을 만들기로 결정했습니다.
당신의 임무는 비슷한 일을하는 것입니다. 영국은 2019 년 3 월 31 일 EU를 떠나고 매 초마다 변경되는 디지털 카운트 다운을 만들어야합니다 (0.05 초 편차 허용).
입력
당신의 프로그램은 절대 입력을받지 않아야합니다. 금지되어 있습니다!
산출
Brexit까지의 시간을 형식으로 출력해야합니다 ddd:hh:mm:ss
. 선행 및 후행 줄 바꿈은 허용되지만 표시는 매번 같은 위치에 있어야합니다. 마치 실제로 감소하는 것처럼 보일 것입니다. @AnthonyPham이 지적한 것처럼 이것은 화면을 “지우기”에 충분한 줄 바꿈을 인쇄한다는 것을 의미하지는 않습니다. 이는 실제로 화면을 지워야한다는 것을 의미합니다.
이와 같은 출력은 허용되지 않습니다 :
100:20:10:05
100:20:10:04
이것도 아닙니다
100:20:10:05
*A thousand newlines*
100:20:10:04
그들은 둘 이상의 라인에 있기 때문에.
Brexit 후에 걱정할 필요가 없습니다. 귀하의 프로그램은 2019 년 3 월 31 일까지만 작동해야합니다.
규칙
- 표준 허점 은 허용되지 않습니다
- 이것은 코드 골프 이므로 바이트 단위의 가장 짧은 코드가 승리합니다.
- 오류 메시지 (어떻게 생각할 수는 없지만)는 허용되지 않습니다.
- 코드는 2 년 후에 (영국이 EU를 떠날 때) 실행될 수 있어야하고 실제 시간을 표시해야하며 730에서 다시 시작하지 않아야합니다 (아래 참조).
카운트 다운 규칙
카운트 다운은 하드 코딩되어서는 안되며 Brexit이 끝나기 전에 언제든지 실행할 수 있어야하며 올바른 결과를 얻을 수 있습니다. 새로운 날이 시작되면 시간은 아래 형식을 따라야합니다
712:00:00:01
712:00:00:00
711:23:59:59
다시 말하지만 Brexit이 끝나는 날짜는 자정에 31/3/2019입니다 (31 : 3 : 19 00:00:00 또는 31 : 3 : 2019 00:00:00 또는 원하는 다른 형식)
NB : 모든 것이 있다고 생각하지만 샌드 박스에 게시하지 않았습니다. 그렇지 않으면 타이밍이 해제되었을 수 있습니다. 완벽하지 않기 때문에 개선에 대한 제안 사항을 게시하십시오.
답변
자바 스크립트, 134 (129) 113 바이트
setInterval("d=-new Date;document.body.innerHTML=`<pre>${d/864e5+17986|0}:`+new Date(d).toJSON().slice(11,19)",1)
편집 : @Shaggy 덕분에 2 바이트가 절약되었습니다. @ l4m2 덕분에 11 바이트를 절약했습니다.
답변
PowerShell, 70 63 55 53 바이트
@Joey 덕분에 큰 따옴표를 제외하고 쉽게 -2
for(){cls;(date 31Mar19)-(date)|% T* ddd\:hh\:mm\:ss}
이것을 슬립으로 실행하면 8 바이트가 추가되지만 입력없이 슬립으로 실행하면 입력은 보이지 않습니다 (슬립이있는 버전 (63 바이트)).
for(){cls;(date 31/3/19)-(date)|% T* ddd\:hh\:mm\:ss;sleep 1}
for()
무한 루프이며 그 루프 내에서 ..
cls
화면을 지우려면
남은 시간을 줄 수 31/3/19
있는 DateTime
객체와 -
현재 날짜를 가져와 올바른 형식으로 .ToString()
( |% T*
) 가져옵니다.
brexit 후 음의 시간이 표시됩니다.
답변
Excel VBA, 91 84 82 바이트
JoeMalpass 덕분에 Excel에서 날짜가 숫자로 표시됨을 지적하여 7 바이트가 절약되었습니다.
JoeMalpass 덕분에 2 바이트 절약
Sub b()
Do
t=CDec(43555-Now)
Cells(1,1)=Int(t) &Format(t,":hh:mm:ss")
Loop
End Sub
출력은 A1
활성 Excel 시트에서 셀로 출력됩니다 .
답변
파이썬 3.6, 146 바이트
from datetime import*
x=datetime
while 1:d=x(2019,3,31)-x.now();s=d.seconds;a=s%3600;print(end=f"\r{d.days:03}:{s//3600:02}:{a//60:02}:{s%60:02}")
답변
C #을 173 172 156 150 127 바이트
using System;class P{static void Main(){for(;;)Console.Write($"\r{new DateTime(2019,3,31)-DateTime.Now:d\\:hh\\:mm\\:ss} ");}}
@Bob 덕분에 16 바이트 절약 @ Søren D. Ptæus 덕분에 6 바이트 절약
형식화 된 버전 :
using System;
class P
{
static void Main()
{
for (;;)
Console.Write($"\r{new DateTime(2019, 3, 31) - DateTime.Now:d\\:hh\\:mm\\:ss} ");
}
}
답변
자바 스크립트 ES5, 320 319 316 305 295 284 바이트
setInterval(function(){a=Math,b=a.floor,c=console,d=Date,e="00",f=new d(2019,2,31),g=a.abs(f-new d)/1e3,h=b(g/86400);g-=86400*h;var i=b(g/3600)%24;g-=3600*i;var j=b(g/60)%60;g-=60*j,c.clear(),c.log((e+h).slice(-3)+":"+(e+i).slice(-2)+":"+(e+j).slice(-2)+":"+(e+a.ceil(g)).slice(-2))})
참조 Math
를위한 @Fels, 참조를위한 @dgrcodeconsole
언 골프
setInterval(function() {
var math = Math, floor = math.floor, c = console, d = Date;
var leadings = "00";
// set our brexit date
var brexit = new d(2019, 2, 31);
// get total seconds between brexit and now
var diff = math.abs(brexit - new d()) / 1000;
// calculate (and subtract) whole days
var days = floor(diff / 86400);
diff -= days * 86400;
// calculate (and subtract) whole hours
var hours = floor(diff / 3600) % 24;
diff -= hours * 3600;
// calculate (and subtract) whole minutes
var minutes = floor(diff / 60) % 60;
diff -= minutes * 60;
// what's left is seconds
// clear the console (because OP said it must print in the same place)
c.clear();
// log the countdown, add the leadings and slice to get the correct leadings 0's
c.log((leadings + days).slice(-3) + ":" + (leadings + hours).slice(-2) + ":" + (leadings + minutes).slice(-2) + ":" + (leadings + math.ceil(diff)).slice(-2));
});
답변
PHP, 84 바이트
for(;$c=DateTime;)echo(new$c('@1553990400'))->diff(new$c)->format("\r%a:%H:%I:%S ");
매우 간단합니다. 1553990400은 31-3-2019 00:00:00 (UTC)의 타임 스탬프입니다. DateTime-> diff ()-> format ()을 사용하여 남은 시간을 출력하기 위해 무한 반복됩니다. Brexit이 발생한 후 0부터 카운트 업을 시작합니다.
댓글 / 더 읽기 쉬운 버전 :
// Infinite loop, assign DateTime (as a string) to $class
for (; $class = DateTime;) {
echo (new $class('@1553990400')) // Create a new DateTime object for the brexit date/time.
->diff(new $class) // Caulculate the difference to the current date/time.
->format("\r%a:%H:%I:%S "); // Format it according to the specification, starting with a \r character to move to the start of the line and overwrite the previous output.
}