Deteksi Perjalanan Waktu

51

Komputer ada di mana-mana saat ini - di mobil, kereta, skateboard, bahkan reaktor nuklir. Kemungkinan perangkat lunak Anda akan berjalan dalam perangkat perjalanan waktu hanyalah masalah waktu. Bisakah Anda mengatasinya? Bisakah Anda setidaknya mendeteksinya?

Tugas Anda:

  1. Tulis sebuah program yang mengulang dan terus menanyakan waktu sistem, untuk mendeteksi perjalanan waktu.
  2. Jika waktu bergerak maju sehari atau lebih di antara dua kueri berturut-turut, itu adalah perjalanan waktu ke depan. Dalam hal ini, program Anda harus mencetak:
    TS TS: YYYY? You mean we're in the future?
  3. Jika waktu bergerak mundur, dengan jumlah berapa pun, di antara dua kueri berturut-turut, ini adalah perjalanan waktu mundur. Dalam hal ini, program Anda harus mencetak:
    TS TS: Back in good old YYYY.
  4. TS TSadalah cap waktu sebelum dan sesudah perjalanan waktu. YYYYadalah tahun tujuan.
  5. Stempel waktu dapat dalam format apa pun, yang mencakup setidaknya 4 digit tahun, bulan, hari, jam, menit, dan kedua, dipisahkan oleh non-digit.

Keterbatasan:

  1. Anda harus mendukung tanggal di abad 19, 20 dan 21, setidaknya.
  2. Anda harus menggunakan bahasa yang ada sebelum tantangan ini diposting.
  3. Anda harus memposting jawaban Anda hanya setelah tantangan ini diposting.
  4. Anda harus menggunakan bahasa yang ada sebelum jawaban Anda diposting.
  5. Anda dapat mengedit jawaban Anda hanya setelah mempostingnya.
  6. Program Anda tidak boleh mencetak output apa pun selain dari output yang dibutuhkan. Sesekali, "Great Scott!" Diperbolehkan.

Ini adalah kode-golf. Jawaban terpendek menang.
Referensi film yang relevan mungkin akan membuat jawaban Anda terlalu lama, tetapi mungkin membuat Anda tidak puas.

ugoren
sumber
31
Lebih banyak programmer kepalsuan percaya tentang waktu, # 36 : " Waktu selalu berjalan ke depan. "
Doorknob
4
Bisakah Anda sedikit lebih spesifik tentang # 5?
Mego
4
dipisahkan oleh nondigits? boo. YYYYMMDDHHmmSS adalah format cap waktu favorit saya.
Sparr
3
@Aequitas bagaimana Anda tahu? mungkin jam sistem sebenarnya tidak dapat diubah dan "pengaturan" itu sebenarnya adalah perjalanan waktu
Rune FS
5
Batasan 2,3,4,5 benar-benar keras, saya tidak tahu apakah saya bisa mengatasinya.
Surt

Jawaban:

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

Ini tidak berfungsi dengan penerjemah online.

Output sampel setelah menyesuaikan waktu komputer saya dua kali:

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.
Dennis
sumber
1
Mengapa itu tidak bekerja dengan penerjemah online (kecuali bahwa itu tidak membiarkan Anda mengutak-atik waktu)?
ugoren
1
Karena ini adalah infinite loop, dan juru bahasa online hanya menampilkan keluaran setelah program selesai.
Dennis
1
Jadi, bagaimana Anda menguji apakah itu berhasil?
ugoren
1
Menggunakan penerjemah 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

Stempel waktu dicetak dalam YYYY-MM-DD HH:MM:SSformat, dipisahkan dengan tanda titik koma. Beralih ke Python 2 dari 3 karena 2 karakter lebih pendek untuk dicetak. Spam terus digunakan Great Scott!untuk orang yang bukan pelancong, karena lebih mudah dan lebih murah untuk melakukannya daripada menyiapkan cetakan bersyarat.

Mego
sumber
Apakah itu mengharapkan waktu sebagai input? Ini bukan yang diminta (mungkin tidak jelas). Juga, sepertinya mencetak garis kosong ketika waktu berperilaku baik.
ugoren
Maksud saya menanyakan OS, bukan pengguna. Saya akan mengklarifikasi.
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);}());

Ini mungkin bisa dilakukan dengan beberapa penulisan ulang untuk membuatnya lebih efisien / kecil.

Sumber:

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);
}());
Florrie
sumber
1
Perjalanan mundur didefinisikan sebagai bergerak mundur dengan jumlah berapa pun, bukan satu hari. Juga, karena beberapa now()panggilan mungkin melewatkan acara perjalanan.
ugoren
Upaya bermain golf ini: n = Tanggal, o = n.sekarang (); setInterval ("d = new n, s = d +` $ {new n (o)} `; f = d.getFullYear (); if ( n.sekarang () - o> 8.64e + 7) console.log (s + f + `? Maksudmu kita di masa depan?`); jika (o> n.now ()) console.log (s + ` Kembali ke $ {f} .`) lama yang baik; o = n.sekarang () ", 100);
Stefnotch
Saya pikir Anda dapat golf bagian pertama o=(n=Date).now().
Conor O'Brien
+ Stefnotch 8.64e+7lebih panjang dari dua karakter 86400.
Florrie
1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Ups! Saya bertanya-tanya mengapa itu tidak berhasil.
Florrie
5

Python 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)

Saat ini tidak mencetak Great Scott karena saya tidak dapat menemukan cara yang baik hanya membuatnya sesekali.

Morgan Thrapp
sumber
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?"
}
Trauma Digital
sumber
3

Ruby, 194 byte

Saya belum punya waktu untuk benar-benar mengurangi ukuran ini. Saya yakin ada beberapa optimasi yang bersembunyi di sana.

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

Tidak digabungkan (dan lebih mudah dibaca):

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

Sunting: dikoreksi untuk meminta OS untuk waktu, daripada manusia.

PotatoOmeletteSandwich
sumber
2
Beberapa rekomendasi: Gunakan loop{}sebagai ganti while 1...end, dan coba gunakan +untuk penggabungan string alih-alih interpolasi.
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

Ini sangat berperan dalam aturan "Stempel waktu mungkin dalam format apa pun" ... yang saya ambil dengan bebas menggunakan format "detik sejak 1 Januari 1970"


Jika saya mempertahankan interpretasi buruk saya tentang stempel waktu pencetakan, dan mengadopsi struktur MeepDarknessMeep, saya dapat (tidak etis) menekan ini ke ...

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
lalunomor
sumber
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.- itu tidak memungkinkan detik sejak zaman.
Mego
4
Untung itu tidak "mengecualikan" format apa pun
thenumbernine
@ugoren Sungguh, persyaratan itu harus lebih spesifik untuk niat Anda
Mego
Saya tidak sepenuhnya akrab dengan lua jadi saya mungkin salah, tapi sepertinya ini dicetak Back in good ol YYYYtetapi harus dicetak Back in good old YYYY. (Catat d lama)
Pokechu22
tidak tangkapan yang bagus, saya mencoba untuk mencukur byte di mana pun saya bisa :-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

Catatan: Jika Anda menghilangkan kebutuhan untuk angka setahun penuh maka kurangi enam byte. Alasannya adalah bahwa lua (atau windows 'atau seseorang!)% C tidak menghasilkan setahun penuh. Karena itu, cap waktu mungkin terlihat aneh!

Ini juga memanfaatkan cap waktu yang dapat dipisahkan oleh karakter non-digit!

Terima kasih telah memberi tahu saya tentang referensi math.abs lama saya dan peningkatan lainnya @thenumbernine :)

Lua 5.3, 151 byte

Ini 'menyalin' dari metode @ thenumbernine untuk menampilkan waktu hanya dengan menunjukkan stempel waktu alih-alih tanggal yang sebenarnya. Ini tidak kompetitif karena saya pikir ini sedikit curang, cukup posting di sini untuk memajang karya saya :)

::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
MeepDarknessMeep
sumber
1
Kami memposting kedua jawaban Lua kami pada waktu yang hampir bersamaan. Itu harus mengatakan sesuatu tentang perjalanan waktu.
thenumbernine
Ahah, Terima kasih @numbernine! Saya akhirnya mendapat kemampuan saya untuk berkomentar :)
MeepDarknessMeep
2

C: 363 byte

Diminimalkan menggunakan skrip praktis ini :

#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);}}

Asli:

#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);
  }
}

Contoh dijalankan:

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!

Saya bisa menghilangkan 10 byte dengan menghapus sleepkurasa.

Ngomong-ngomong, beberapa kecekatan untuk 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!
Andrew E
sumber
Jangan ragu untuk menjatuhkannya sleep.
ugoren
2

JavaScript (ES6) 181 174 170 Bytes

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

Catatan: Belum diuji dengan mesin waktu nyata.

Kode ini berjalan di Firefox, Chrome, Edge, Node.js Harmony (atau io.js dalam hal ini). Tapi, saya menggunakan alert, jadi itu harus diganti oleh console.loguntuk Node dan Io 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}.`

Dijelaskan:

// 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
MayorMonty
sumber
Saya berhasil menulis yang lebih pendek, Anda mungkin ingin melihatnya dan mungkin membuat Anda lebih baik. Juga, saya pikir itu hebat!
Stefnotch
Seberapa besar solusimu, aku ingin tahu apakah aku bisa mengalahkannya? ;)
MayorMonty
Gulir ke bawah atau klik tautan: codegolf.stackexchange.com/a/61544/33160 Juga, Anda hampir saja bisa mengalahkannya! : 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

Ini berutang banyak pada jawaban Morgan Thrapp. Trik utama di sini adalah normalisasi timedelta, yang dengan mudah membuat timedelta.days negatif ketika bergerak sedikit ke masa lalu, dan 0 saat bergerak kurang dari sehari ke masa depan.

han
sumber
Setelah itu import*Anda tidak perlu datetime.awalan.
ugoren
@ugoren: import*memungkinkan seseorang untuk menulis datetime.now()bukan datetime.datetime.now(). Agak masuk akal, dengan cara ...
han
Dengan cara yang membingungkan, itu benar.
ugoren
1

Caché ObjectScript, 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

Masalah ini dipecahkan di gondok tua polos, tetapi akan menjadi tidak masuk akal panjang, karena ANSI gondok kekurangan yang $ZD[ATE]T[IME]fungsi intrinsik untuk memformat tanggal dalam cap waktu terbaca-manusia.

Program ini mungkin tidak akan mendeteksi perjalanan waktu sebelum 1 Jan 1841, atau waktu-perjalanan ke setelah 31 Des 9999, karena ini adalah batas-batas yang $H[OROLOG]intrinsik ketepatan waktu . Program ini juga hanya memiliki tingkat presisi kedua; gangguan waktu sub-tingkat kedua mundur kemungkinan akan luput dari perhatiannya.

senshin
sumber
1

TSQL, 355 byte

Di tempat kerja sehingga tidak ada languges keren yang keren tetap dengan server produksi SQL Server Anda =)

Versi golf

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

Versi lebih mudah dibaca dengan perubahan kecil.

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 tidak terlalu buruk dalam hal cap waktu karena ini adalah tipe data kelas satu.

Demi golf, kami menggunakan tipe dengan presisi 3 milidetik. Pengulangan itu sendiri membutuhkan waktu lebih sedikit dari itu untuk mengulang (tergantung dari server Anda). Kuncinya di sini adalah internal bahwa cap waktu adalah pelampung dan tipe bilangan bulat menghitung berapa hari berlalu. Ini tidak berfungsi dengan baik pada 1 Januari 1753, hingga 31 Desember 9999 rentang tanggal.

jean
sumber
1

VBA, 258 Bytes

Berlari dengan: Excel 2007 di Windows 7

305 byte jika Usability diperlukan

PERINGATAN MUNGKIN INI Maksimalkan CPU dan Crash Excel / Windows Anda jika Anda menggunakan komputer single-threaded Single Core (Kemungkinan besar ditemukan pada tahun 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

Jika Anda ingin Kode ini "Dapat Diuji" kemudian tambahkan Application.Wait (Now() + TimeValue("0:00:01"))setelahh=t

Keluaran

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.

Di bawah ini adalah file uji yang saya gunakan. Saya Jujur Terkejut melihat betapa sedikitnya keamanan yang dimiliki Windows. Mungkin tidak berjalan seperti yang diharapkan di semua komputer

Jalankan dengan Risiko Sendiri, Bisa Memiliki Efek Samping Besar yang Tahan Lama !!!!
Sub DOC() t = 31346.6868055556 Date = DateSerial(Year(t), Month(t), Day(t)) Time = TimeSerial(Hour(t), Minute(t), Second(t)) q End Sub

JimmyJazzx
sumber
1

Javascript 173 169 162 byte

Javascript cukup populer ...

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?`))

Penjelasan (Versi kode yang lebih lama):

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
Stefnotch
sumber
0

Memproses, 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()+": ");}

Diperluas:

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()+": ");
}

Output sampel:

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
Kevin Workman
sumber
0

Ruby, 160 157 155 154 byte

Banyak hal untuk bermain golf di sini

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}
Peter Lenkefi
sumber
0

Mathematica, 295 byte

Program meminta OS setiap detik untuk TS baru.

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,"."})]];

Keluaran

Diuji dengan memberi makan secara manual pada tanggal / waktu.

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.

Pasti bisa memformat output yang lebih baik. Itu memenuhi persyaratan seperti yang dinyatakan.

Hilang dalam Pengetahuan
sumber
kenapa kamu pintas LocalTime[]? Itu muncul hanya sekali dalam kode berikut.
Michael Stern
Pada satu titik, saya menggunakannya dua kali. Tangkapan yang bagus.
Hilang dalam Pengetahuan
Hapus dan Anda simpan tiga karakter.
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}
K. Klassen
sumber
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());
} 
akhil7886
sumber