Nah, Brexit terjadi . Dan Sky News, sebagai jenius mereka, telah memutuskan untuk membuat hitungan mundur di sisi bus.
Tugas Anda adalah melakukan hal serupa. Inggris meninggalkan Uni Eropa pada tanggal 31 Maret 2019 dan Anda harus membuat hitungan mundur digital untuk ini yang berubah setiap detik (dengan deviasi 0,05 detik diizinkan).
Memasukkan
Program Anda harus sama sekali tidak menerima input. Itu dilarang!
Keluaran
Ini harus menampilkan waktu sampai Brexit dalam format ddd:hh:mm:ss
. Leading dan trailing newline diperbolehkan tetapi tampilan harus tetap di tempat yang sama setiap kali. Seharusnya terlihat seolah-olah berkurang di tempat. Seperti yang ditunjukkan oleh @AnthonyPham, ini tidak berarti mencetak cukup baris baru untuk "menghapus" layar, ini berarti Anda harus benar-benar menghapus layar.
Output seperti ini tidak diizinkan:
100:20:10:05
100:20:10:04
Ini juga tidak
100:20:10:05
*A thousand newlines*
100:20:10:04
karena mereka berada di lebih dari satu baris.
Anda tidak perlu khawatir setelah Brexit. Program Anda hanya perlu bekerja hingga 31/3/2019
Aturan
- Celah standar tidak diijinkan
- Ini adalah kode-golf sehingga kode terpendek dalam byte menang.
- Pesan kesalahan (meskipun saya tidak bisa memikirkan caranya) tidak diizinkan
- Kode harus dapat dijalankan dalam waktu 2 tahun (ketika Inggris meninggalkan Uni Eropa) dan harus menampilkan waktu aktual dan tidak mulai dari 730 lagi (lihat di bawah)
Aturan hitung mundur
Hitungan mundur tidak boleh berupa kode keras dan harus dapat dijalankan kapan saja sebelum Brexit selesai dan masih menghasilkan hasil yang benar. Ketika hari baru dimulai jam harus mengikuti format di bawah ini
712:00:00:01
712:00:00:00
711:23:59:59
Biar saya katakan lagi, tanggal Brexit selesai adalah 31/3/2019 pada tengah malam untuk kenyamanan (31: 3: 19 00:00:00 atau 31: 3: 2019 00:00:00 atau format lain yang Anda inginkan)
NB: Saya pikir saya memiliki segalanya tetapi saya tidak memposting ini di Sandbox, kalau tidak waktunya tidak tepat. Jangan ragu untuk mengirim saran untuk perbaikan karena tidak sempurna.
1000
jika saya ingin itu berubah sekali setiap detik. Terima kasihJawaban:
JavaScript,
134129113 byteSunting: Disimpan 2 byte berkat @Shaggy. Disimpan 11 byte berkat @ l4m2.
sumber
<a id=0>
? Atau semacam itu?document.body.innerHTML
bukannyao.innerHTML
<tt>
.PowerShell,
70635553 BytesKutipan ganda dikecualikan, mudah -2 terima kasih kepada @ Joey
Menjalankan ini dengan sleep menambahkan 8 byte, tetapi input sebagian besar tidak terlihat jika dijalankan tanpa mereka, versi (63 byte) dengan sleep:
for()
adalah loop tak terbatas, dan dalam loop itu ..cls
untuk menghapus layar,dapatkan
31/3/19
sebagaiDateTime
objek, dan-
tanggal saat ini darinya, untuk memberikan sisa waktu, lalu.ToString()
(|% T*
) dengan format yang benar.ini akan menampilkan waktu negatif setelah brexit.
sumber
T*
kerjanya. Saya tidak terbiasa dengan itu.%
foreach benar-benar mengambilT
objek oString, dan akan menerima string berikutnya sebagai argumennya. mengenai format datetime mengapa itu tidak akan berjalan di komputer AS? Saya pikir yangdd
lain tidak peka budaya.3/31/19
. Akan juga bekerja di2019-03-31
mana saja, tetapi biaya beberapa byte.31Mar19
bukan31/3/19
yang mudah-mudahan harus memperbaikinya?Excel VBA,
918482 byteDisimpan 7 byte berkat JoeMalpass menunjukkan bahwa Excel melihat tanggal sebagai angka.
Disimpan 2 byte berkat JoeMalpass
Output ke sel
A1
di lembar Excel aktif.sumber
("2019-3-31")
dengan(43555)
. Namun ketika saya mencoba menjalankan ini di Excel, membeku setelah sekitar 5-6 detik ...Now
bekerja tanpa()
...Python 3.6, 146 byte
sumber
C #,
173172156150127 byteDisimpan 16 byte berkat @Bob Disimpan 6 byte berkat @ Søren D. Ptæus
Versi yang diformat:
sumber
(TimeSpan)0
? Di telepon, tidak dapat menguji sekarang. Anda masih dapat menghapus yang jernih karena carriage return mengurusnya: ini mengembalikan kursor di awal baris.Clear
! Saya konyol. Dan tidak ada yang tidak dapat dikonversiint
keTimeSpan
saya sudah mencoba yang itu.(t = new DateTime(2019, 3, 31) - DateTime.Now).Ticks > 0
.JavaScript ES5,
320319316305295284 byteTerima kasih kepada @Fels untuk referensi
Math
, @dgrcode untuk referensiconsole
Tidak bermain golf
sumber
g=Math;
Math
masih bisa menghemat 2 byte, kan?var
. Selain itu, pilih nama yang lebih pendek untuk variabel, sepertih
bukanhours
, ataum
bukanminutes
. Mungkin melakukanc=console
akan menghemat beberapa byte lagi. Juga1e3
bukannya1000
PHP, 84 byte
Cukup mudah. 1553990400 adalah cap waktu untuk 31-3-2019 00:00:00 dalam UTC. Ini loop tak terhingga, menggunakan DateTime-> diff () -> format () untuk menampilkan berapa banyak waktu yang tersisa. Setelah Brexit terjadi, ia akan mulai menghitung mulai dari 0.
Versi yang dikomentari / lebih mudah dibaca:
sumber
<?
tag di sini? 2. Saya pikir kurung Anda salah, saat ini Anda memanggil->diff
gema daripada objek DateTime. 3. echo bekerja tanpa tanda kurung. 4. Bahkan setelah memperbaikinya, ini tidak berhasil untuk saya, tetapi saya baru bermain golf sehingga bisa saja saya menjadi idiot.CJam,
69625957 byteDisimpan 7 byte dengan mengonversi format waktu secara berbeda
Disimpan 3 byte berkat saran Martin Ender
Disimpan 2 byte dengan menggunakan carriage return bukan backspaces
Tidak dapat dijalankan di TIO karena alasan yang jelas.
Ini menulis ulang tampilan terus-menerus dalam loop tak terbatas sehingga jenis teks berkedip masuk dan keluar (setidaknya di konsol saya), meskipun hanya benar-benar memperbarui waktu sekali per detik.
Versi 70-byte ini hanya mencetak sekali per detik:
Penjelasan
sumber
Ab
dengans
, dan menyimpan byte dengan melakukan1e3/
terlebih dahulu lalu membaginya dalam urutan yang berlawanan60md\60md\24md\]W%
.{60md\}2*
menyimpan yang lain.Python 3.5 (118 Bytes)
sumber
C # 6, 149 byte
Terima kasih kepada Bob karena telah menghemat 57 byte!
Program tidak digabungkan:
C #,
210206159 byteTerima kasih kepada Bob karena telah menyimpan 47 byte lagi!
Terima kasih kepada Martin Smith karena telah menghemat 4 byte!
Program tidak digabungkan:
sumber
new DateTime(2019,3,31)
lebih pendek.Console.Clear
dan alih-alih menambahkan"\r"
ke string, misalnya"\r"+(x-a)...
(x-a).ToString(@"d\:hh\:mm\:ss")
setara dengan `String.Format (" \ r {0: d \\: hh \\: mm \\: ss} ", xa)` setara dengan$@"{x-a:d\:hh\:mm\:ss}"
(string yang lebih pendek, yang diinterpolasi dalam C # 6.0). Jika Anda melakukannya, maka Anda dapat lebih mempersingkat penuh"\r"+$@"{x-a:d\:hh\:mm\:ss}"
ke dalam$"\r{x-a:d\\:hh\\:mm\\:ss}"
.C, 104 byte
Kerusakan
Bergantung pada
time
pengembalian jumlah detik sejak 01/01/1970, yang merupakan kasus bagi saya (menggunakan Dentang / GCC pada macOS) dan harus menjadi kasus untuk sebagian besar barang UNIX.Menggunakan
bashterminal escape sequence untuk memindahkan kursor (<esc>[1A
memindahkan kursor ke atas 1 baris). Akan lebih baik jika hanya menggunakan\r
, tetapiprintf
tidak akan memerah sampai ia melihat baris baru, dan membilasnya secara manual membutuhkan lebih banyak.Mungkin hitungan mundur CPU paling intensif yang pernah saya lihat. Berjalan dalam loop panas untuk memastikan selalu seakurat mungkin. Jika dijalankan setelah batas waktu, itu akan menghasilkan beberapa hal yang sangat aneh (negatif di mana-mana!)
sumber
main(x)
bukan bentuk utama yang valid, int implisit telah dihapus dari bahasa. Saya percaya versi minimal dan aman adalahint main(){}
.AHK , 145 Bytes
Ini bukan jawaban terpendek tetapi hasilnya memberikan perasaan malapetaka yang sangat bagus, saya pikir. Saya awalnya mencoba untuk mengirim penekanan tombol Ctrl+ Adiikuti oleh DELdan kemudian apapun waktu itu tapi refresh rate terlalu lambat dan itu akan menghancurkan apa pun lingkungan Anda berada di. Sebaliknya, kemudian, saya pergi dengan GUI. Ternyata mengambil lebih sedikit byte untuk benar-benar menghancurkan jendela dan membuatnya kembali daripada yang dilakukannya untuk memperbarui kontrol berulang kali jadi saya pergi dengan itu. Ini efek yang bagus.
sumber
C #,
128127 BytesKode tidak dikunci:
Saya tidak akan menemukan trik tanpa bantuan dari jawaban C # lainnya di sini.
Untuk siapa pun yang mencari peningkatan lebih lanjut, Anda juga bisa memasukkan ekspresi Write () di dalam for loop. Sepertinya saya harus dapat menyimpan byte di sini, karena itu menyelamatkan saya titik koma untuk pernyataan itu, tetapi berhasil ke nomor yang sama karena Anda tidak dapat memiliki tubuh yang sepenuhnya kosong:
sumber
Console.Write($"\r{new DateTime(2019,3,31)-DateTime.Now:ddd\\:hh\\:mm\\:ss}");
ddd
pad Anda nol, terlihat lebih baik daripada metode dua spasi yang bagus.Ruby (83 byte)
Tidak disatukan
Pada dasarnya salah satu pengiriman Python, dengan beberapa perbaikan. Kami hanya memancarkan "\ r" untuk memulai string sebelum rendering ulang. Dan untuk format string
"%03d:%02d:%02d:%02d"
, kita benar-benar tidak peduli tentang lebar pada specifier pertama ... jadi kita bisa melakukannya"%02d"*4
, dan memancarkan backspace dan ruang untuk membersihkan titik dua yang tidak perlu.Juga, saya menemukan dua karakter yang lebih pendek
print
:$><<
.$>
adalah singkatan global untuk$defout
, yang merupakan aliran output untukprint
danprintf
dan default keSTDOUT
.IO#<<
menulis sisi kanannya ke aliran. Bagaimana dua karakter lebih pendek? Nah, sekarang saya bisa menghilangkan ruang yang memimpin sebelum tanda kurung membungkus string format.Pada titik ini saya benar-benar berpikir tidak ada cara yang mungkin untuk mempersingkat program ini lebih lanjut di Ruby.
Sunting: Saya salah. Alih-alih pertama
Time.new(2019,3,31)
, kita hanya bisa menggunakan waktu UNIX baku:1553990400
.Sunting 2: Saya sudah mencoba bermain-main dengan memfaktorkan menit, dan membagi cap waktu UNIX dengan konstanta itu, tetapi sebenarnya tidak berakhir menghemat byte. :(
Sunting 3: Ternyata caching
h=3600
sebenarnya melukai saya dua byte. Aduh.Sunting 4: Disimpan 3 byte berkat @EricDuminill. Dia menggunakan pelampung, tetapi rasional bekerja tanpa kehilangan presisi!
Sunting 5:
Array#*
sebagai alias untukArray#join
, dengan Ruby?
-syntax untuk masing-masing karakter!sumber
loop{h=431664-Time.now.to_f/3600;$><<('%02d:'*4+"\b \r")%[h/24,h%24,h%1*60,3600*h%60]}
Detik mungkin mati 1, karena pembulatan.to_r
bukannyato_f
menjaga presisi..to_r
bukan.to_f
+"\r"
ke kanan array. Ini memungkinkan Anda untuk menggunakan['%02d']*4*?:
alih-alih'%02d:'*4+"\b "
agar Anda dapat kehilangan tanda kurung, yang berarti Anda satu byte. Simpan byte lain dengan menulis+?\r
alih-alih+"\r"
.JavaScript + HTML, 136 + 7 = 143 byte
sumber
C #, 142 byte
Program tidak digabungkan:
sumber
ToString()
byte dan bukannya membangun pemformatan ke dalam metode Write (), atau mungkin string yang diinterpolasigoto
ide dasarnya .Tanggal Bash + GNU, 128 byte
2 byte dikurangi berkat @muru, dan 2 byte sebelumnya berkat @ This Guy.
Tidak disatukan
sumber
while[1]
?line 1: [1]: command not found
kesalahan. Tampaknya ruang wajib :-(3600
ke variabel untuk menyimpan 2 byte? Anda mungkin juga dapat mengubahB=3600;A=86400
keB=3600;A=24*B
byte lain?A=$[24*B]
jadi tidak mungkin di sanaC=:%02d;printf "%03d$C$C$C\r"
untuk menyimpan byte? Dan pindahkan tugas ke A dan B dalam konteks aritmatika:D=$[B=3600,A=24*B,1553990400-`date +%s`]
untuk menyimpan yang lain?MATL, 45 byte
TIO tampaknya tidak mendukung kliring output, tetapi untungnya MATL Online melakukannya !
Dengan 2 byte lebih banyak, versi yang lebih ramah-CPU yang melakukan
pause
(tidur) setiap detik:Coba ini di MATL Online
737515
adalah "31 Maret 2019" mewakili format zaman standar MATLAB - jumlah hari sejak 0 Januari 0000, secara opsional termasuk bagian fraksional untuk mewakili waktu hari. (Saya mencoba memperpendek ini dengan menghitungnya entah bagaimana, tetapi satu-satunya faktor adalah 5 dan enam digit angka lainnya (147503), dan saya tidak dapat menemukan cara untuk melakukannya dalam waktu kurang dari 6 byte.)sumber
PHP, 64 byte
Ini akan menghitung dengan tepat sampai
0:00:00:00
dan kemudian break / keluar. Jalankan dengan-r
.-2 byte jika saya tidak perlu mencetak 0.
sumber
RPL,
8378 byteDengan asumsi HP48 Anda, atau yang serupa, diatur dengan waktu dan tanggal (UK) yang benar, format tanggal mm / dd, dan format waktu 24 jam:
Saya terkejut bisa menghemat 2 byte dengan menghapus spasi di sekitar
":"
. 1.1 adalah tanggal valid terpendek, kemudian dibuang olehSUB
. Hati-hati dengan emulator, waktu dapat berjalan lebih cepat atau lebih lambat (atau tidak sama sekali) dari jam dinding Anda. Dengan HP asli, Anda dapat menghentikan program ini dengan menekan tombol ON ... atau menunggu baterai kosong.sumber
PHP,
1029590 byteDisimpan 7 byte berkat @TheLethalCoder & dengan tidak memfaktorkan
Menyimpan 5 byte lainnya dengan menggabungkan
Ini golf pertama saya, jadi saya mungkin kehilangan beberapa trik, tetapi di sini Anda terlepas dari itu.
Adapun jawaban PHP @chocochaos 'yang kalau tidak akan truf ini, saya percaya itu cacat karena alasan yang saya jelaskan dalam komentar saya, tetapi karena saya baru di sini saya mungkin salah.Atau saya hanya seorang pemula :)sumber
$a
sekali jadi sebaiknya gunakan nomor di tempat. Saya tidak terlalu terbiasa dengan php tetapi sepertinya mungkin ada lebih banyak perbaikanflawed because of reasons stated in the comments
? Jika Anda mengomentari jawaban mereka, hanya Anda yang berkomentar.<?=
tag pembuka dan menjatuhkan gema, menetapkan$b
di tempat Anda pertama kali menggunakannya. Selain itu Anda dapat menghemat 3 byte menggunakan^0
bukanfloor
. Ini bitwise atau dan melibatkan pemain ke int, ini adalah cara terpendek untuk pemain ke int yang pernah saya lihat.AWK , 78 byte
Cobalah online!
Lebih lama sebelum saya menyadari saya bisa menghitung ulang waktu akhir. Terkadang agak terlambat untuk bermain dan mendapatkan ide dari orang lain.
FYI, tautan TIO tidak berfungsi dengan baik, karena tidak diterapkan
\r
dengan benar.sumber
F #, 142 byte
Saya tumbuh di Irlandia sekitar setengah kilometer dari perbatasan. Terlepas dari tanda "Selamat datang di Fermanagh" dan tanda jalan berubah Anda tidak akan tahu Anda akan memasuki negara lain. Digunakan untuk menyeberang dua kali dalam perjalanan ke sekolah.
sumber
c, gcc 114 byte
Tidak ada yang dihapus, program lengkap. Program dikompilasi dalam gcc di Ubuntu. Hitung mundur tidak akan menampilkan jejak panjang pernyataan cetak karena panggilan sistem untuk menghapus dan berhenti ketika hitungan mundur mencapai 0 detik.
Tidak disatukan
sumber