태그 보관물: code-golf

code-golf

Brexit은 언제 발생합니까? 허용되지만 표시는 매번 같은 위치에 있어야합니다.

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