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:
- Tulis sebuah program yang mengulang dan terus menanyakan waktu sistem, untuk mendeteksi perjalanan waktu.
- 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?
- 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.
TS TS
adalah cap waktu sebelum dan sesudah perjalanan waktu.YYYY
adalah tahun tujuan.- Stempel waktu dapat dalam format apa pun, yang mencakup setidaknya 4 digit tahun, bulan, hari, jam, menit, dan kedua, dipisahkan oleh non-digit.
Keterbatasan:
- Anda harus mendukung tanggal di abad 19, 20 dan 21, setidaknya.
- Anda harus menggunakan bahasa yang ada sebelum tantangan ini diposting.
- Anda harus memposting jawaban Anda hanya setelah tantangan ini diposting.
- Anda harus menggunakan bahasa yang ada sebelum jawaban Anda diposting.
- Anda dapat mengedit jawaban Anda hanya setelah mempostingnya.
- 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.
Jawaban:
CJam, 118 byte
Ini tidak berfungsi dengan penerjemah online.
Output sampel setelah menyesuaikan waktu komputer saya dua kali:
sumber
Python 2, 210 byte
Stempel waktu dicetak dalam
YYYY-MM-DD HH:MM:SS
format, dipisahkan dengan tanda titik koma. Beralih ke Python 2 dari 3 karena 2 karakter lebih pendek untuk dicetak. Spam terus digunakanGreat Scott!
untukorang yangbukan pelancong, karena lebih mudah dan lebih murah untuk melakukannya daripada menyiapkan cetakan bersyarat.sumber
JavaScript (ES6), 263 byte
Ini mungkin bisa dilakukan dengan beberapa penulisan ulang untuk membuatnya lebih efisien / kecil.
Sumber:
sumber
now()
panggilan mungkin melewatkan acara perjalanan.o=(n=Date).now()
.8.64e+7
lebih panjang dari dua karakter86400
.Python 3, 195
Saat ini tidak mencetak Great Scott karena saya tidak dapat menemukan cara yang baik hanya membuatnya sesekali.
sumber
Bash + coreutils, 177
sumber
Ruby, 194 byte
Saya belum punya waktu untuk benar-benar mengurangi ukuran ini. Saya yakin ada beberapa optimasi yang bersembunyi di sana.
Tidak digabungkan (dan lebih mudah dibaca):
Sunting: dikoreksi untuk meminta OS untuk waktu, daripada manusia.
sumber
loop{}
sebagai gantiwhile 1...end
, dan coba gunakan+
untuk penggabungan string alih-alih interpolasi.Lua 5.3, 174 byte
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
sumber
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.Back in good ol YYYY
tetapi harus dicetakBack in good old YYYY
. (Catat d lama)Lua 5.3,
179178173171169168163 byteCatatan: 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 :)
sumber
C: 363 byte
Diminimalkan menggunakan skrip praktis ini :
Asli:
Contoh dijalankan:
Saya bisa menghilangkan 10 byte dengan menghapus
sleep
kurasa.Ngomong-ngomong, beberapa kecekatan untuk Mac / Linux:
sumber
sleep
.JavaScript (ES6)
181174170 BytesCatatan: 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 olehconsole.log
untuk Node dan Io Suport: (187 Bytes)Dijelaskan:
sumber
Python,
170165 byteIni 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.
sumber
import*
Anda tidak perludatetime.
awalan.import*
memungkinkan seseorang untuk menulisdatetime.now()
bukandatetime.datetime.now()
. Agak masuk akal, dengan cara ...Caché ObjectScript, 199 byte
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.sumber
TSQL, 355 byte
Di tempat kerja sehingga tidak ada languges keren yang keren tetap dengan server produksi SQL Server Anda =)
Versi golf
Versi lebih mudah dibaca dengan perubahan kecil.
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.
sumber
VBA, 258 Bytes
Berlari dengan: Excel 2007 di Windows 7
305 byte jika Usability diperlukan
Jika Anda ingin Kode ini "Dapat Diuji" kemudian tambahkan
Application.Wait (Now() + TimeValue("0:00:01"))
setelahh=t
Keluaran
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
sumber
Javascript
173 169162 byteJavascript cukup populer ...
Penjelasan (Versi kode yang lebih lama):
sumber
Memproses, 270 byte
Diperluas:
Output sampel:
sumber
Ruby,
160157155154 byteBanyak hal untuk bermain golf di sini
sumber
Mathematica, 295 byte
Program meminta OS setiap detik untuk TS baru.
Keluaran
Diuji dengan memberi makan secara manual pada tanggal / waktu.
Pasti bisa memformat output yang lebih baik. Itu memenuhi persyaratan seperti yang dinyatakan.
sumber
LocalTime[]
? Itu muncul hanya sekali dalam kode berikut.Groovy, 244 byte
sumber
Java, 378 byte.
sumber