ตรวจจับการเดินทางข้ามเวลา


51

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

งานของคุณ:

  1. เขียนโปรแกรมที่ลูปและทำการสืบค้นเวลาของระบบเพื่อตรวจจับการเดินทางข้ามเวลา
  2. หากเวลาเลื่อนไปข้างหน้าหนึ่งวันขึ้นไประหว่างการค้นหาสองครั้งติดต่อกันแสดงว่าเป็นการเดินทางข้ามเวลา ในกรณีนี้โปรแกรมของคุณควรพิมพ์:
    TS TS: YYYY? You mean we're in the future?
  3. หากเวลาย้อนกลับไประหว่างจำนวนข้อความค้นหาสองรายการติดต่อกันเป็นเวลาย้อนหลัง ในกรณีนี้โปรแกรมของคุณควรพิมพ์:
    TS TS: Back in good old YYYY.
  4. TS TSคือการประทับเวลาก่อนและหลังการเดินทางข้ามเวลา YYYYเป็นปีปลายทาง
  5. การประทับเวลาอาจอยู่ในรูปแบบใด ๆ ที่มีอย่างน้อย 4 หลักปี, เดือน, วัน, ชั่วโมง, นาทีและวินาทีโดยคั่นด้วยตัวเลขที่ไม่ใช่

ข้อ จำกัด :

  1. คุณต้องสนับสนุนวันที่ในศตวรรษที่ 19, 20 และ 21 อย่างน้อย
  2. คุณต้องใช้ภาษาที่มีอยู่ก่อนการโพสต์ความท้าทายนี้
  3. คุณต้องโพสต์คำตอบของคุณหลังจากโพสต์ความท้าทายนี้แล้วเท่านั้น
  4. คุณต้องใช้ภาษาที่มีอยู่ก่อนคำตอบของคุณโพสต์
  5. คุณสามารถแก้ไขคำตอบของคุณหลังจากคุณโพสต์แล้ว
  6. โปรแกรมของคุณจะต้องไม่พิมพ์ผลลัพธ์ใด ๆ นอกเหนือจากผลลัพธ์ที่ต้องการ "Great Scott!" เป็นครั้งคราว ได้รับอนุญาต.

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



4
คุณจะเจาะจงเกี่ยวกับ # 5 มากกว่านี้หน่อยได้ไหม?
Mego

4
คั่นด้วย nondigits ไหม หุยฮา YYYYMMDDHHmmSS เป็นรูปแบบเวลาที่ฉันชอบ
Sparr

3
@ Aequitas คุณรู้ได้อย่างไร? บางทีนาฬิการะบบอาจไม่เปลี่ยนรูปแบบและ "ตั้งค่า" เป็นเวลาเดินทางจริง ๆ
Rune FS

5
ข้อ จำกัด 2,3,4,5 ช่างโหดร้ายจริง ๆ ฉันไม่รู้ว่าจะจัดการกับมันได้ไหม
Surt

คำตอบ:


4

CJam, 118 ไบต์

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

สิ่งนี้ไม่ทำงานกับล่ามออนไลน์

เอาต์พุตตัวอย่างหลังจากปรับเวลาคอมพิวเตอร์ของฉันสองครั้ง:

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
ทำไมมันไม่ทำงานกับล่ามออนไลน์ (ยกเว้นว่ามันจะไม่ปล่อยให้คุณทำตามเวลา)
ugoren

1
เนื่องจากเป็นลูปแบบไม่สิ้นสุดและล่ามออนไลน์จะแสดงผลลัพธ์เฉพาะเมื่อโปรแกรมเสร็จสิ้น
เดนนิส

1
ดังนั้นคุณจะทดสอบว่ามันทำงานอย่างไร
ugoren

1
การใช้ล่าม Java
เดนนิส

9

Python 2, 210 ไบต์

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

Timestamps จะพิมพ์ในYYYY-MM-DD HH:MM:SSรูปแบบคั่นด้วยเครื่องหมายอัฒภาค เปลี่ยนเป็น Python 2 จาก 3 เนื่องจากสั้นกว่าเพื่อพิมพ์ 2 ตัวอักษร ส่งสแปมด้วยสายGreat Scott!การบินที่ไม่ใช่เวลานักเดินทางเพราะง่ายกว่าและถูกกว่าที่จะทำมากกว่าตั้งค่าการพิมพ์แบบมีเงื่อนไข


มันคาดว่าเวลาเป็นอินพุตหรือไม่ นี่ไม่ใช่สิ่งที่ถาม (อาจจะคลุมเครือ) นอกจากนี้ดูเหมือนว่าจะพิมพ์บรรทัดว่างเมื่อเวลาทำงานได้ดี
ugoren

ฉันหมายถึงการถามระบบปฏิบัติการไม่ใช่ผู้ใช้ ฉันจะชี้แจง
ugoren

8

JavaScript (ES6), 263 ไบต์

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

นี่อาจเป็นเรื่องของการเขียนใหม่เพื่อให้มีประสิทธิภาพ / เล็กมากขึ้น

ที่มา:

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
การเดินทางย้อนหลังหมายถึงการเคลื่อนที่ย้อนกลับตามจำนวนใด ๆ ไม่ใช่หนึ่งวัน นอกจากนี้เนื่องจากการnow()โทรหลายครั้งอาจทำให้พลาดกิจกรรมการเดินทาง
ugoren

ความพยายามในการเล่นกอล์ฟ: n = วันที่, 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 + `คุณหมายถึงเรากำลังจะเกิดขึ้นในอนาคตหรือไม่?) ถ้า (o> n.now ()) console.log (s +` กลับมาดีอีกครั้ง $ {f} .`); o = n.now () ", 100);
Stefnotch

ฉันคิดว่าคุณสามารถเล่นกอล์ฟในส่วนแรกo=(n=Date).now()ได้
Conor O'Brien

+ Stefnotch เป็นตัวละครสองตัวนานกว่า8.64e+7 86400
Florrie

1
@ CᴏɴᴏʀO'Bʀɪᴇɴอ๊ะ! ฉันสงสัยว่าทำไมมันไม่ทำงาน
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)

ปัจจุบันไม่ได้พิมพ์ Great Scott เพราะฉันไม่สามารถหาวิธีที่ดีในการทำให้เป็นครั้งคราวเท่านั้น



3

Ruby, 194 ไบต์

ฉันยังไม่ได้มีเวลาที่จะลดขนาดลงจริงๆ ฉันแน่ใจว่ามีการเพิ่มประสิทธิภาพบางอย่างซ่อนอยู่ในนั้น

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 (และสามารถอ่านได้มากขึ้น):

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

แก้ไข: แก้ไขเพื่อขอเวลาสำหรับระบบปฏิบัติการแทนที่จะเป็นมนุษย์


2
คำแนะนำเล็ก ๆ น้อย ๆ : ใช้loop{}แทนwhile 1...endและลองใช้+สำหรับการต่อสตริงแทนการแก้ไข
voikya

3

Lua 5.3, 174 ไบต์

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

สิ่งนี้กำลังเล่นอย่างหนักในกฎ "Timestamps อาจอยู่ในรูปแบบใด ๆ ... ซึ่งฉันใช้เสรีภาพในการใช้รูปแบบของ" วินาทีตั้งแต่ 1 มกราคม 1970 "


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

155 ไบต์

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.- ที่ไม่อนุญาตให้มีวินาทีตั้งแต่ยุค
Mego

4
สิ่งที่ดีมันไม่ได้ "ยกเว้น" รูปแบบใด ๆ
จำนวน

@ugoren จริง ๆ แล้วความต้องการนั้นควรเจาะจงมากขึ้นตามความตั้งใจของคุณ
Mego

ฉันไม่ได้อย่างเต็มที่คุ้นเคยกับหลัวดังนั้นผมอาจจะผิด แต่ดูเหมือนว่าพิมพ์นี้แต่มันควรจะพิมพ์Back in good ol YYYY Back in good old YYYY(สังเกตวันเก่า)
Pokechu22

ไม่ดีฉันพยายามโกนไบต์ทุกที่ที่ทำได้ :-p
thenumbernine

2

Lua 5.3, 179 178 173 171 169 168 163 ไบต์

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

หมายเหตุด้านข้าง: หากคุณต้องการตัวเลขเต็มปีจากนั้นลบหกไบต์ เหตุผลก็คือ% ของ lua (หรือ windows 'หรือใครบางคน!)% c ไม่ส่งออกทั้งปี ด้วยเหตุนี้การประทับเวลาอาจดูแปลก!

นอกจากนี้ยังใช้ประโยชน์จากการประทับเวลาที่สามารถแยกจากตัวละครที่ไม่ใช่ตัวเลขได้!

ขอบคุณที่แจ้งให้ฉันทราบถึงการอ้างอิง math.abs เก่าและการปรับปรุงอื่น ๆ @thenumbernine :)

Lua 5.3, 151 bytes

นี่คือ 'คัดลอก' ออกจากวิธีการของ @ thenumbernine ในการแสดงเวลาโดยเพียงแค่แสดงการประทับเวลาแทนที่จะเป็นวันที่ที่เกิดขึ้นจริง นี่ไม่ใช่การแข่งขันเพราะฉันคิดว่ามันเป็นการโกงเพียงโพสต์ที่นี่เพื่อแสดงผลงานของฉัน :)

::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
เราโพสต์คำตอบ Lua ทั้งสองของเราในเวลาใกล้เคียงกัน ต้องบอกบางอย่างเกี่ยวกับการเดินทางข้ามเวลา
thenumbernine

Ahah ขอบคุณ @thenumbernine! ในที่สุดฉันก็มีความสามารถในการแสดงความคิดเห็น :)
MeepDarknessMeep

2

C: 363 ไบต์

ลดขนาดโดยใช้สคริปต์ที่มีประโยชน์นี้ :

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

เดิม:

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

ตัวอย่างการเรียกใช้:

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!

ฉันสามารถกำจัด 10 ไบต์โดยการลบsleepฉันเดา

อย่างไรก็ตามความสะดวกในการข้ามเวลาสำหรับ 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!

sleepรู้สึกอิสระที่จะวาง
ugoren

2

JavaScript (ES6) 181 174 170 ไบต์

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

บันทึก:ยังไม่ได้ทดสอบกับเครื่องตามเวลาจริง

รหัสนี้ทำงานใน Firefox, Chrome, Edge, Node.js Harmony (หรือio.jsสำหรับเรื่องนั้น) แต่ผมใช้alertเพื่อที่จะต้องถูกแทนที่ด้วยconsole.logสำหรับNodeและไอโอ Suport: (187 ไบต์)

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

อธิบาย:

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

ฉันจัดการเขียนย่อให้สั้นลงคุณอาจต้องการดูและอาจทำให้ดีขึ้น นอกจากนี้ฉันคิดว่ามันยอดเยี่ยม!
Stefnotch

โซลูชันของคุณใหญ่แค่ไหนฉันต้องการดูว่าฉันสามารถเอาชนะได้หรือไม่ ;)
จันทร์ที่

เลื่อนลงหรือคลิกที่ลิงค์: codegolf.stackexchange.com/a/61544/33160 นอกจากนี้คุณยังอยู่ใกล้ที่จะตีมัน! : D
Stefnotch

2

Python, 170 165 ไบต์

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

นี่เป็นจำนวนมากสำหรับคำตอบของ Morgan Thrapp เคล็ดลับหลักของที่นี่คือการทำให้เป็นมาตรฐานของ timedelta ซึ่งทำให้ timedelta.days เป็นค่าลบเมื่อเคลื่อนย้ายไปทางอดีตเล็กน้อยและ 0 เมื่อเคลื่อนที่น้อยกว่าหนึ่งวันสู่อนาคต


หลังจากที่import*คุณไม่ต้องการdatetime.คำนำหน้า
ugoren

@ugoren: import*ช่วยให้หนึ่งในการเขียนแทนdatetime.now() datetime.datetime.now()ชนิดของมันทำให้รู้สึกในทาง ...
ฮัน

ในทางที่สับสนก็ทำ
ugoren

1

Caché ObjectScript ขนาด 199 ไบต์

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

ปัญหานี้จะแก้ไขได้ในคางทูมเก่าธรรมดา แต่จะมีความยาวเกินสมควรเนื่องจาก ANSI คางทูมขาดฟังก์ชั่นที่แท้จริง$ZD[ATE]T[IME]สำหรับการจัดรูปแบบวันที่เข้า timestamps มนุษย์สามารถอ่านได้

โปรแกรมนี้อาจจะไม่ได้ตรวจสอบเวลาการเดินทางไปก่อน 1 มกราคม 1841 หรือเวลาการเดินทางไปหลังจากที่ 31 ธันวาคม 9999 ตั้งแต่เหล่านี้มีขอบเขตของจับเวลาที่แท้จริง โปรแกรมนี้มีความแม่นยำระดับที่สองเท่านั้น ข้อผิดพลาดครั้งถัดไปที่ระดับย่อยวินาทีมีแนวโน้มที่จะหลบหนีการแจ้งเตือน$H[OROLOG]


1

TSQL, 355 ไบต์

ในที่ทำงานดังนั้นไม่ควรใช้ languges cool cool กับเซิร์ฟเวอร์การผลิตเซิร์ฟเวอร์ SQL ของคุณ =)

รุ่น golfed

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

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

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 นั้นไม่ได้เลวร้ายในแง่ของการประทับเวลาเนื่องจากเป็นชนิดข้อมูลชั้นหนึ่ง

เพื่อประโยชน์ของสนามกอล์ฟเราใช้แบบที่มีความแม่นยำ 3 มิลลิวินาที การวนซ้ำนั้นใช้เวลาน้อยลงในการวนซ้ำ (ขึ้นอยู่กับเซิร์ฟเวอร์ของคุณ) กุญแจที่นี่คือการฝึกงานที่การประทับเวลาเป็นแบบลอยและชนิดจำนวนเต็มนับว่าผ่านไปกี่วัน มันทำงานได้ไม่ดีในวันที่ 1 มกราคม 1753 ถึง 31 ธันวาคม 9999 ช่วงวันที่


1

VBA, 258 ไบต์

วิ่งไปกับ: Excel 2007 ใน Windows 7

305 ไบต์หากจำเป็นต้องใช้งาน

คำเตือนนี้อาจเพิ่ม CPU และ Crash Excel / Windows ของคุณหากคุณอยู่ในคอมพิวเตอร์แกนเดียวแบบเธรดเดียว (พบได้มากที่สุดในปี 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

หากคุณต้องการให้รหัสนี้เป็น "แบบทดสอบได้" ให้เพิ่มApplication.Wait (Now() + TimeValue("0:00:01"))หลังจากนั้นh=t

เอาท์พุต

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.

ด้านล่างเป็นไฟล์ทดสอบที่ฉันใช้ ฉันประหลาดใจจริง ๆ ที่ Windows มีความปลอดภัยเพียงเล็กน้อยในบางครั้ง อาจไม่ทำงานตามที่คาดไว้ในคอมพิวเตอร์ทุกเครื่อง

ทำงานด้วยความเสี่ยงของตัวเองอาจมีผลข้างเคียงที่สำคัญ !!!!
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 ไบต์

Javascript เป็นที่นิยมพอสมควร ...

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

คำอธิบาย (รหัสรุ่นเก่ากว่า):

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

กำลังประมวลผล 270 ไบต์

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

ขยาย:

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

ตัวอย่างผลลัพธ์:

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

มีหลายสิ่งให้เล่นกอล์ฟที่นี่

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

Mathematica ขนาด 295 ไบต์

โปรแกรมจะถาม OS ทุกวินาทีเพื่อหา TS ใหม่

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

เอาท์พุต

ทดสอบโดยให้อาหารด้วยตนเองในวันที่ / เวลา

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.

สามารถจัดรูปแบบผลลัพธ์ได้ดีขึ้นอย่างแน่นอน มันจะตอบสนองความต้องการตามที่ระบุไว้


ทำไมคุณลัดLocalTime[]? มันจะปรากฏเพียงครั้งเดียวในรหัสต่อไปนี้
Michael Stern

จนถึงจุดหนึ่งฉันใช้มันสองครั้ง จับดีแม้ว่า
หลงทางในความรู้

ลบออกและคุณบันทึกอักขระสามตัว
Michael Stern

0

Groovy ขนาด 244 ไบต์

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

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