Phát hiện du hành thời gian


51

Máy tính có mặt ở khắp mọi nơi ngày nay - trong xe hơi, xe lửa, ván trượt, thậm chí cả lò phản ứng hạt nhân. Khả năng phần mềm của bạn sẽ chạy trong một thiết bị du hành thời gian chỉ là vấn đề thời gian. Bạn có thể đối phó với nó? Bạn có thể ít nhất phát hiện ra nó?

Nhiệm vụ của bạn:

  1. Viết chương trình lặp và truy vấn thời gian hệ thống để phát hiện du hành thời gian.
  2. Nếu thời gian di chuyển về phía trước một ngày hoặc nhiều hơn giữa hai truy vấn liên tiếp, thì đó là thời gian chuyển tiếp. Trong trường hợp này, chương trình của bạn sẽ in:
    TS TS: YYYY? You mean we're in the future?
  3. Nếu thời gian quay ngược, với bất kỳ số lượng nào, giữa hai truy vấn liên tiếp, đó là thời gian ngược thời gian. Trong trường hợp này, chương trình của bạn sẽ in:
    TS TS: Back in good old YYYY.
  4. TS TSlà các dấu thời gian trước và sau khi du hành thời gian. YYYYlà năm đích
  5. Dấu thời gian có thể ở bất kỳ định dạng nào, bao gồm ít nhất năm 4 chữ số, tháng, ngày, giờ, phút và giây, cách nhau bởi các chữ số không.

Hạn chế:

  1. Bạn phải hỗ trợ ngày trong thế kỷ 19, 20 và 21, ít nhất.
  2. Bạn phải sử dụng một ngôn ngữ tồn tại trước khi thử thách này được đăng.
  3. Bạn phải đăng câu trả lời của bạn chỉ sau khi thử thách này được đăng.
  4. Bạn phải sử dụng một ngôn ngữ tồn tại trước khi câu trả lời của bạn được đăng.
  5. Bạn chỉ có thể chỉnh sửa câu trả lời của mình sau khi bạn đăng nó.
  6. Chương trình của bạn không được in bất kỳ đầu ra nào ngoài đầu ra cần thiết. Thỉnh thoảng "Great Scott!" được cho phép.

Đây là mã golf. Câu trả lời ngắn nhất sẽ thắng.
Tài liệu tham khảo phim có liên quan có thể sẽ khiến câu trả lời của bạn quá dài, nhưng có thể khiến bạn thăng hoa.


31
Các lập trình viên giả dối hơn tin vào thời gian, # 36 : " Thời gian luôn luôn tiến về phía trước. "
Doorknob

4
Bạn có thể nói rõ hơn một chút về # 5 không?
Mego

4
cách nhau bởi số không? boo. YYYYMMDDHHmmSS là định dạng dấu thời gian yêu thích của tôi.
Sparr

3
@Aequitas làm sao bạn biết? có lẽ đồng hồ hệ thống thực sự không thay đổi và "cài đặt" nó thực sự là thời gian di chuyển
Rune FS

5
Giới hạn 2,3,4,5 thực sự rất khắc nghiệt, tôi không biết liệu mình có thể xử lý được không.
Surt

Câu trả lời:


4

CJam, 118 byte

et:Tes{es_@-[TS*Set:TS*':S]\_864e5<{[1$et0="? You mean we're in the future?"N]o}|0<{[_"Back in good old "et0='.N]o}&}g

Điều này không làm việc với trình thông dịch trực tuyến.

Đầu ra mẫu sau khi điều chỉnh thời gian máy tính của tôi hai lần:

2015 10 21 11 2 45 1 3 -10800000 2015 10 23 11 2 45 0 5 -10800000: 2015? You mean we're in the future?
2015 10 23 11 2 53 448 5 -10800000 2015 10 21 11 2 52 0 3 -10800000: Back in good old 2015.

1
Tại sao nó không hoạt động với trình thông dịch trực tuyến (ngoại trừ việc nó không cho phép bạn sử dụng thời gian)?
ugoren

1
Bởi vì đây là một vòng lặp vô hạn và trình thông dịch trực tuyến chỉ hiển thị đầu ra sau khi chương trình kết thúc.
Dennis

1
Vì vậy, làm thế nào để bạn kiểm tra rằng nó hoạt động?
ugoren

1
Sử dụng trình thông dịch Java .
Dennis

9

Python 2, 210 byte

from datetime import*
o=0
while 1:n=datetime.now();o=o or n;print"%s;%s: %s? You mean we're in the future?"%(o,n,n.year)if(n-o).days>=1else"%s;%s: Back in good old %s."%(n,o,n.year)if(n<o)else"Great Scott!";o=n

Dấu thời gian được in ở YYYY-MM-DD HH:MM:SSđịnh dạng, phân tách bằng dấu chấm phẩy. Chuyển sang Python 2 từ 3 vì nó ngắn hơn 2 ký tự để in. Spamout stdout với Great Scott!những người bình thường không phải là người du hành thời gian, vì việc đó dễ dàng và rẻ hơn so với việc thiết lập một bản in có điều kiện.


Nó có mong đợi thời gian là đầu vào không? Đây không phải là những gì được hỏi (có thể nó mơ hồ). Ngoài ra, nó dường như in các dòng trống khi thời gian hoạt động tốt.
ugoren

Tôi có nghĩa là yêu cầu hệ điều hành, không phải người dùng. Tôi sẽ làm rõ.
ugoren

8

JavaScript (ES6), 263 byte

n=Date;o=n.now();(function g(){k=new n;j=new n(o);s=`${k} ${o} `;if(n.now()-o>86400)console.log(`${s}${k.getFullYear()}? You mean we're in the future?`);if(o-n.now()>84600){console.log(`${s}Back in good old ${k.getFullYear()}.`);}o=n.now();setTimeout(g,100);}());

Điều này có thể có thể làm với một số viết lại để làm cho nó hiệu quả hơn / nhỏ hơn.

Nguồn:

n=Date;
o=n.now();

(function go() {
   k=new n;
   j=new n(o);
   s=`${k} ${o} `;
   if (n.now() - o > 86400) {
      console.log(`${s}${k.getFullYear()}? You mean we're in the future?`);
   }
   if (o - n.now() > 84600) {
      console.log(`${s}Back in good old ${k.getFullYear()}.`);
   }
   o=n.now()
   setTimeout(go,100);
}());

1
Du lịch ngược được định nghĩa là di chuyển trở lại bởi bất kỳ số tiền nào, không phải một ngày. Ngoài ra, do nhiều now()cuộc gọi, nó có thể bỏ lỡ một sự kiện du lịch.
ugoren

Nỗ lực chơi gôn này: n = Date, o = n.now (); setInterval ("d = new n, s = d +` $ {new n (o)} `; f = d.getFullYear (); if ( n.now () - o> 8.64e + 7) console.log (s + f + `? Ý bạn là chúng ta trong tương lai?`); if (o> n.now ()) console.log (s + ` Quay lại tốt cũ $ {f} .`); o = n.now () ", 100);
Stefnotch

Tôi nghĩ rằng bạn có thể chơi golf phần đầu tiên o=(n=Date).now().
Conor O'Brien

+ Stefnotch 8.64e+7dài hơn hai ký tự 86400.
Florrie

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Rất tiếc! Tôi đã tự hỏi tại sao nó không hoạt động.
Florrie

5

Trăn 3, 195

from datetime import*
n=datetime.now
p=n()
while 1:
 c=n();f=(p,c,p.year);s=(0,("%s %s: %s? You mean we're in the future?"%f,"%s %s: Back in good old %s."%f)[p.day>c.day])[p>c];p=c
 if s:print(s)

Hiện tại không in Great Scott vì tôi không thể tìm thấy một cách hay chỉ làm cho nó thỉnh thoảng.


5

Bash + coreutils, 177

d()(date -d@"$@")
for((b=`date +%s`;a=`date +%s`;b=a)){
t=`d $a`\ `d $b`
((a<b))&&d $b "+$t: Back in good old %Y."
((a>b+86400))&&d $b "+$t: %Y? You mean we're in the future?"
}

3

Ruby, 194 byte

Tôi chưa có thời gian để thực sự cắt giảm kích thước này. Tôi chắc chắn có một vài tối ưu hóa ẩn trong đó.

require 'time';t=nil;while 1;n=Time.now;if t;s="#{t} #{n}: ";y=n.year;puts t>n ? "#{s}Back in good old #{y}" : (n>t+86400 ? "#{s}#{y}? You mean we're in the future?": "Great Scott!");end;t=n;end

Ungolfed (và rất nhiều dễ đọc hơn):

require 'time'
t=nil
while 1
  n=Time.now
  if t                                             # on second or later pass
    s="#{t} #{n}: "                                # prepare the timestamp
    y=n.year
    puts t>n ?                                     # if we go back
      "#{s}Back in good old #{y}" :                # timestamp + phrase
      (n>t+86400 ?                                 # else, more than one day forward
        "#{s}#{y}? You mean we're in the future?": # timestamp + future
        "Great Scott!")                            # Great Scott!
  end
  t=n                                              # set a new jump point
end

Chỉnh sửa: sửa chữa để yêu cầu hệ điều hành cho thời gian, chứ không phải là một con người.


2
Một vài khuyến nghị: Sử dụng loop{}thay vì while 1...endvà thử sử dụng +để nối chuỗi thay vì nội suy.
voikya

3

Lua 5.3, 174 byte

T=os.time P=print l=T()::a::t=T()b=l.." "..t..": "y=os.date('%Y',t)_=t<l and
P(b.."Back in good old "..y)or t>l+86399 and
P(b..y.."? You mean we're in the future?")l=t goto a

Điều này đang phát huy rất nhiều quy tắc "Dấu thời gian có thể ở bất kỳ định dạng nào" ... mà tôi đã tự do sử dụng định dạng "giây kể từ ngày 1 tháng 1 năm 1970"


Nếu tôi giữ cách diễn giải tạm thời về dấu thời gian in ấn và chấp nhận cấu trúc của MeepDarknessMeep, tôi (về mặt đạo đức) có thể ép nó xuống ...

155 byte

T=os.time::G::l=t or T()t=T()_=(t>l+86399or t<l)and
print(l.." "..t..": "..os.date(t<l
and"Back in good old %Y"or"%Y? You mean we're in the future?"))goto G

3
Timestamps may be in any format, that includes at least the 4-digit year, month, day, hour, minute and second, separated by non-digits.- điều đó không cho phép vài giây kể từ kỷ nguyên.
Mego

4
điều tốt là nó đã không "loại trừ" bất kỳ định dạng nào
thenumbernine

@ugoren Thực sự yêu cầu đó phải cụ thể hơn theo ý định của bạn
Mego

Tôi không hoàn toàn quen thuộc với lua nên tôi có thể sai, nhưng có vẻ như bản in này Back in good ol YYYYnhưng nó nên in Back in good old YYYY. (Lưu ý d trong cũ)
Pokechu22

Không nắm bắt tốt, tôi đã cố gắng cạo byte bất cứ nơi nào tôi có thể :-p
thenumbernine

2

Lua 5.3, 179 178 173 171 169 168 163 byte

q="%Y %c: "c=os.date::a::d=f f=os.time()_=d and(f-d>86399or f<d)and print(c(q,d)..c(q..(f<d and"Back in good old %Y."or"%Y? You mean we're in the future?")))goto a

Lưu ý bên lề: Nếu bạn không cần số năm, hãy trừ sáu byte. Lý do là lua's (hoặc windows 'hoặc ai đó!)% C không xuất ra cả năm. Bởi vì điều này, dấu thời gian có thể trông kỳ lạ!

Điều này cũng tận dụng các dấu thời gian có thể được tách biệt bởi bất kỳ ký tự không có chữ số nào!

Cảm ơn đã thông báo cho tôi về tài liệu tham khảo math.abs cũ của tôi và các cải tiến khác @thenumbernine :)

Lua 5.3, 151 byte

Đây là 'sao chép' từ phương thức hiển thị thời gian của @ thenumbernine bằng cách chỉ hiển thị dấu thời gian thay vì ngày thực tế. Điều này không cạnh tranh vì tôi nghĩ đó là một chút gian lận, chỉ cần đăng nó lên đây để hiển thị công việc của tôi :)

::a::d=f f=os.time()_=d and(f-d>86399or f<d)and print(d.." "..f..os.date(f<d and": Back in good old %Y."or": %Y? You mean we're in the future?"))goto a

1
Chúng tôi đã đăng cả hai câu trả lời Lua của chúng tôi gần như cùng một lúc. Điều đó phải nói một cái gì đó về du hành thời gian.
thenumbernine

À, cảm ơn @thenumbernine! Cuối cùng tôi đã có khả năng bình luận của mình :)
MeepDarknessMeep

2

C: 363 byte

Giảm thiểu bằng cách sử dụng tập lệnh tiện dụng này :

#include<stdio.h>
#include<time.h>
void p(time_t*t){char b[64];strftime(b,64,"%FT%T",localtime(t));printf("%s ",b);}int main(void){time_t a,b,d=60*60*24;int y;time(&a);while(1){time(&b);y=localtime(&b)->tm_year+1900;if(b<a){p(&a);p(&b);printf("Back in good old %d\n",y);}else if(b>a+d){p(&a);p(&b);printf("%d? You mean we're in the future?\n",y);}a=b;sleep(1);}}

Nguyên:

#include <stdio.h>
#include <time.h>

void p(time_t * t) {
  char b[64];
  strftime(b, 64, "%FT%T", localtime(t));
  printf("%s ", b);
}

int main(void) {
  time_t a, b, d = 60*60*24;
  int y;

  time(&a);
  while(1) {
    time(&b);
    y = localtime(&b)->tm_year+1900;
    if (b < a) {
      p(&a); p(&b); printf("Back in good old %d\n", y);

    } else if (b > a + d) {
      p(&a); p(&b); printf("%d? You mean we're in the future?\n", y);
    }
    a = b;
    sleep(1);
  }
}

Chạy ví dụ:

2015-10-23T23:30:03 1985-06-14T16:27:00 Back in good old 1985   
1985-06-14T16:27:07 1999-02-09T14:15:00 1999? You mean we're in the future?
1999-02-09T14:15:09 2015-02-09T14:15:00 2015? You mean we're in the future?
2015-02-09T14:15:36 2015-10-21T07:28:00 2015? You mean we're in the future?
2015-10-21T07:29:06 1985-10-26T09:00:00 Back in good old 1985
1985-10-26T09:00:28 2055-11-12T06:38:00 2055? You mean we're in the future?
2055-11-12T06:38:12 1919-10-07T00:09:57 Back in good old 1919
1919-10-07T00:09:57 2055-11-12T06:38:14 2055? You mean we're in the future?  # tried to go to 1955 - fail.
2055-11-12T06:39:09 2015-10-23T23:32:03 Back in good old 2015  # auto-time back to 2015 because my laptop didn't like the jump to 2055!

Tôi có thể loại bỏ 10 byte bằng cách loại bỏ sleeptôi đoán.

Nhân tiện, một số tiện ích nhảy vọt thời gian cho Mac / Linux:

sudo date 1026090085  # Sat 26 Oct 1985 09:00:00
sudo date 1021072815  # Wed 21 Oct 2015 07:28:00
sudo date 1112063855  # Intended to be 1955 but is 2055. Don't use!

Cảm thấy tự do để thả sleep.
ugoren

2

JavaScript (ES6) 181 174 170 byte

for(a=Date;c=b||a.now(),b=d();e=new a(b).getFullYear(),f=`${a(c)} ${a(b):`})b>c+864e5?(g=alert)`${f} ${e}? You mean we're in the future?`:c>b&&g`${f} Back in good old `+e

Lưu ý: Chưa được thử nghiệm với máy thời gian thực.

Mã này chạy trong Firefox, Chrome, Edge, Node.js Harmony (hoặc io.js cho vấn đề đó). Nhưng, tôi sử dụng alert, do đó sẽ phải được thay thế bằng console.logcho NodeIo suport: (187 Bytes)

for(a=Date,b=0;c=b||(d=a.now)(),b=d();e=new a(b).getFullYear(),f=`${a(c)} ${a(b):`})b>c+864e5?(g=console.log)`${f} ${e}? You mean we're in the future?`:c>b&&g`${f} Back in good old ${e}.`

Giải thích:

// Using for like a while loop, defining relevant variables:
  for (a = Date, b = 0;
// Defing b and c: c becomes b, b becomes now. Also defining a shorthand for Date.now:                                
  c = b || a.now(),
  b = d();
// Defining Variables Relevant to this loop: e is the year according to b, f is the "TS TS:" string:                        
  e = new a(b).getFullYear(),
  f = `${a(c)} ${a(b):`
  )
// If b is greater than c plus a day (in milliseconds):
  b > c + 864e5 ?
  // Alert Time Forwand String: 
    (g = alert)
    `${f} ${e}? You mean we're in the future?`:
// else if c is greater than b:
  c > b &&
  // Alert Time Back String: 
    g `${f} Back in good old `+e

Tôi quản lý để viết một cái thậm chí ngắn hơn, bạn có thể muốn xem nó và có thể làm cho bạn tốt hơn. Ngoài ra, tôi nghĩ rằng nó là tuyệt vời!
Stefnotch

Giải pháp của bạn lớn đến mức nào, tôi muốn xem liệu tôi có thể đánh bại nó không? ;)
Thị trưởngMonty

Cuộn xuống hoặc nhấp vào liên kết: codegolf.stackexchange.com/a/61544/33160 Ngoài ra, bạn khá gần với việc đánh bại nó! : D
Stefnotch

2

Python, 170 165 byte

from datetime import*
n=datetime.now
c=n()
while 1:
 p=c;c=n()
 if(c-p).days:print p,"%s:"%c,["%s? You mean we're in the future?","Back in good old %s."][c<p]%c.year

Điều này nợ rất nhiều câu trả lời của Morgan Thrapp. Thủ thuật chính ở đây là chuẩn hóa timedelta, thuận tiện khiến timedelta.days trở nên tiêu cực khi di chuyển thậm chí một chút về quá khứ và 0 khi di chuyển ít hơn một ngày tới tương lai.


Sau khi import*bạn không cần datetime.tiền tố.
ugoren

@ugoren: import*cho phép một người viết datetime.now()thay vì datetime.datetime.now(). Theo một cách nào đó, thật có ý nghĩa ...
han

Trong một cách khó hiểu, nó làm.
ugoren

1

Đối tượng bộ nhớ cache, 199 byte

l s k=86400 f  s e=+$H,t=$P($H,",",2) s:'d d=e,s=t s z=$ZDT(h)_" "_$ZDT($H)_": ",y=h\365+1841 w:e>d !,z,y,"? You mean we're in the future?" w:(k*t+e)<(k*s+d) !,z,"Back in good old ",y s h=$H,d=e,s=t

Vấn đề này là có thể giải quyết trong quai bị cũ đơn giản, nhưng sẽ là bất hợp lý kéo dài, kể từ ANSI quai bị thiếu các $ZD[ATE]T[IME]chức năng nội tại để định dạng ngày vào timestamps con người có thể đọc được.

Chương trình này có thể sẽ không phát hiện thời gian đi đến trước ngày 01 tháng 1 năm 1841, cũng không phải thời gian đi lại sau 31 tháng 12 9999, vì đây là những giới hạn của các $H[OROLOG]bên chấm công . Chương trình này cũng chỉ có độ chính xác cấp hai; các trục trặc thời gian ngược cấp độ thứ hai có thể sẽ thoát khỏi thông báo của nó.


1

TSQL, 355 byte

Tại nơi làm việc, không có languges thú vị nào gắn bó với máy chủ sản xuất SQL Server của bạn =)

Phiên bản chơi gôn

declare @a datetime=getdate(),@b datetime,@d float,@ char(99),@y char(4)while 0=0begin select @b=getdate(),@d=cast(@b as float)-cast(@a as float),@y=' '+DATEPART(y,@b),@=cast(@a as char(20))+' '+cast(@a as char(20))+': 'if @d>=1set @=@+@y+'? You mean we''re in the future?'if @d<0set @=@+'Back in good old '+@y+'.'print @ set @a=@b end

Phiên bản dễ đọc hơn với những thay đổi nhỏ.

declare @t0 datetime = getdate(), @t1 datetime, @d float, @m varchar(99), @y char(4)

while 0=0
begin

    set @t1 = getdate()
    set @d = cast(@t1 as float) - cast(@t0 as float)
    set @y = ' ' + DATEPART(yy, @t1)
    set @m = cast(@t0 as varchar(30)) + ' ' + cast(@t0 as varchar(30)) + ': '

    if @d >= 1 set @m = @m + @y + '? You mean we''re in the future?'
    if @d < 0 set @m = @m +  'Back in good old ' + @y + '.'

    print @m

    set @t0 = @t1
end

SQL không tệ đối với dấu thời gian vì đây là loại dữ liệu hạng nhất.

Vì lợi ích của golf, chúng tôi đang sử dụng loại có độ chính xác 3 mili giây. Vòng lặp tự nó mất ít hơn mà lặp đi lặp lại (tùy thuộc vào máy chủ của bạn). Chìa khóa ở đây là dấu thời gian là dấu phẩy và kiểu số nguyên đếm số ngày đã trôi qua. Nó hoạt động tốt vào ngày 1 tháng 1 năm 1753, cho đến ngày 31 tháng 12, phạm vi ngày 9999.


1

VBA, 258 byte

Chạy với: Excel 2007 trong Windows 7

305 byte nếu khả năng sử dụng là bắt buộc

CẢNH BÁO Điều này có thể tối đa CPU và sự cố Excel / Windows của bạn nếu bạn đang ở trên một máy tính lõi đơn có luồng (Rất có thể được tìm thấy vào năm 1985)

Sub q()
h=CDbl(Now())
While 1
t=CDbl(Now())
If t>h+1 Then Debug.Print (CDate(t) & " " & CDate(h) & ":" & Year(t) & "? You mean we're in the future?")
If t<h Then Debug.Print (CDate(t) & " " & CDate(h) & ": Back in good old " & Year(t) & ".")
h=t
Wend
End Sub

Nếu bạn muốn Mã này là "Có thể kiểm tra" thì hãy thêm Application.Wait (Now() + TimeValue("0:00:01"))sauh=t

Đầu ra

10/22/2015 3:04:45 PM 10/22/2015 3:04:43 PM:2015?You mean we're in the future?
10/22/2015 3:06:48 PM 10/22/2015 3:06:46 PM: Back in good old 2015.

Dưới đây là tập tin thử nghiệm tôi đã sử dụng. Tôi thực sự ngạc nhiên về sự bảo mật của Windows đôi khi. Có thể không chạy như mong đợi trên tất cả các máy tính

Chạy với rủi ro riêng có thể có tác dụng phụ lớn kéo dài !!!!
Sub DOC() t = 31346.6868055556 Date = DateSerial(Year(t), Month(t), Day(t)) Time = TimeSerial(Hour(t), Minute(t), Second(t)) q End Sub


1

Javascript 173 169 162 byte

Javascript khá phổ biến ...

for(e=Date,n=e.now;o=n(a=alert);)d=new e,f=d.getFullYear(n(o>n(s=d+` ${e(o)}:`)&&a(s+`Back in good old ${f}.`))-o>864e5&&a(s+f+`? You mean we're in the future?`))

Giải thích (Phiên bản cũ hơn của mã):

for(e=Date,n=e.now,a=alert,o=n();;o=n()) //Set up the variables and update o, the previous time

d=new e,s=d+` ${e(o)} `,f=d.getFullYear(), //d is the date, s is a string with the 2 timestamps, f is the year
n()-o>8.64e7&&a(s+f+`? You mean we're in the future?`), //Future check
o>n()&&a(s+`Back in good old ${f}.`) //Past check

0

Đang xử lý, 270 byte

int p;long x=System.currentTimeMillis();void draw(){int q=millis(),y=year();if(q<p){t(p);print("Back in good old "+y+".");}if(q>p+86400000){t(p);print(y+"? You mean we're in the future?");}p=q;}void t(int m){print(new java.util.Date(x+m)+" "+new java.util.Date()+": ");}

Mở rộng:

int p;
long x=System.currentTimeMillis();
void draw() {
  int q=millis(), y=year();
  if (q<p) {
    t(p);
    print("Back in good old "+y+".");
  }
  if (q>p+86400000) {
    t(p);
    print(y+"? You mean we're in the future?");
  }
  p=q;
}
void t(int m) {
  print(new java.util.Date(x+m)+" "+new java.util.Date()+": ");
}

Đầu ra mẫu:

Wed Oct 21 13:21:59 EDT 2015 Mon Oct 19 13:21:59 EDT 2015: Back in good old 2015.
Mon Oct 19 13:22:08 EDT 2015 Wed Oct 21 13:22:08 EDT 2015: 2015? You mean we're in the future

0

Ruby, 160 157 155 154 byte

Có rất nhiều thứ để chơi golf ở đây

a=Time.new;loop{b,s,y=Time.new,"#{a} #{b}: ",b.year;$><<(a>b ? s+"Back in good old #{y}.\n":b>a+86400 ? s+"#{y}? You mean we're in the future?\n":"");a=b}

0

Toán học, 295 byte

Chương trình yêu cầu HĐH mỗi giây cho TS mới.

f:=LocalTime[]
p=Print;
y:=DateString[#,"Year"]&
s:=ToString[#]<>" "&
d:=QuantityMagnitude@DateDifference[a,b]
j=StringJoin;
While[True,
  a=b;
  b=f;
  Pause@1;
  Which[d>=0,
   p@(j@@{s@a,s@b,": ",y@b, 
       "? You mean we are in the future?"}),
   d<0,
   p@(j@@{s@a,s@b," Back in good old ",y@b,"."})]];

Đầu ra

Kiểm tra bằng cách cho ăn bằng tay trong ngày / thời gian.

DateObject[{2015, 10, 23}, TimeObject[{18, 36, 17.9618}], TimeZone -> \
-4.] DateObject[{2015, 10, 25}, TimeObject[{18, 42, 0.264913}], \
TimeZone -> -4.] : 2015? You mean we are in the future?

DateObject[{2015, 10, 23}, TimeObject[{18, 43, 0.141572}], TimeZone -> -4.] DateObject[{2015, 10, 23}, TimeObject[{18, 42, 3.30681}], TimeZone -> -4.]  Back in good old 2015.

Chắc chắn có thể có định dạng đầu ra tốt hơn. Nó không đáp ứng các yêu cầu như đã nêu.


tại sao bạn tắt LocalTime[]? Nó chỉ xuất hiện một lần trong đoạn mã sau.
Michael Stern

Tại một thời điểm, tôi đã sử dụng nó hai lần. Bắt tốt mặc dù.
Mất kiến ​​thức

Xóa nó và bạn lưu ba ký tự.
Michael Stern

0

Groovy, 244 byte

def s=9999,d={new Date()},y={it.year+1900},f={t,n->"$t $n: ${y(n)}? You mean we're in the future?"},p={t,n->"$t $n: Back in good old ${y(n)}."},t=d()
while(!sleep(s)){n=d()
c=n.time-t.time
println c<0?p(t,n):c>s*2?f(t,n):'Great Scott!'
t=n}

0

Java, 378 byte.

function detect()
{
int diffInDays = (int)( (newerDate.getTime() - olderDate.getTime()) 
                 / (1000 * 60 * 60 * 24) );
if(diffInDays>0) 
System.out.println(olderDate+" "+newerDate+": "+newerDate.getYear()+"? You mean we're in the future?");
else if(diffInDays<0) 
System.out.println(olderDate+" "+newerDate+": "+"Back in good old "+newerDate.getYear());
} 
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.